zfs: affected by geom_(mbr|bsd) => geom_part_(mbr|bsd) ?

Andriy Gapon avg at icyb.net.ua
Tue Nov 11 05:35:26 PST 2008


on 05/11/2008 18:03 Andriy Gapon said the following:
> Using GENERIC amd64 7-BETA2 system (installed from "official" ISO) I
> partitioned my disk for ZFS root file system more or less as described here:
> https://ish.com.au/solutions/articles/freebsdzfs
> 
> Big difference is that I created a separate slice to contain a partition
> for ZFS pool, so that ZFS pool is ad4s2d (and UFS2 boot is ad4s1a).
> 
> Everything was fine, ZFS root was mounted as expected.
> 
> Then I built a custom kernel with nooptions for GEOM_(BSD|MBR) and
> options for GEOM_PART_(BSD|MBR). When I tried to boot this kernel it
> couldn't mount ZFS root and I simply rebooted my machine when I stuck at
> mountroot prompt (I couldn't enter UFS2 root because of unrelated
> keyboard problem).
> The boot was verbose and I didn't see any peculiar GEOM or GEOM_PART
> messages (errors, warnings).
> 
> I'll try to debug this further by booting into UFS root and running
> gpart, but I'd like to ask for an advice upfront.

So I did this.
Here are some data:
$ gpart show
=>       63  976773105  ad6  MBR  (500.1GB)
         63   12578832    1  freebsd  [active]  (6.4GB)
   12578895  964189170    2  freebsd  (493.7GB)
  976768065       5103       - free -  (2.6MB)

=>       0  12578832  ad6s1  BSD  (6.4GB)
         0        16         - free -  (8.2KB)
        16   2097152      1  freebsd-ufs  (1073.7MB)
   2097168   2097152         - free -  (1073.7MB)
   4194320   8384512      2  freebsd-swap  (4.3GB)

=>        0  964189170  ad6s2  BSD  (493.7GB)
          0         16         - free -  (8.2KB)
         16  964189154      4  freebsd-swap  (493.7GB)

$ zpool status
  pool: tank
 state: UNAVAIL
status: One or more devices could not be opened.  There are insufficient
        replicas for the pool to continue functioning.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-D3
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        UNAVAIL      0     0     0  insufficient replicas
          ad6s2d    UNAVAIL      0     0     0  cannot open

So gpart sees ad6s2d perfectly well, it has the same parameters as
disklabel previously reported and /dev/ad6s2d exists. But zfs "cannot
open" it.

What I did next was:
1. reboot into "disklabel" kernel single-user
2. zpool export tank
3. reboot into gpart kernel single-user
4. zpool import - it saw tank correctly
5. zpool import tank
6. profit! :-)

As I see it, zpool.cache contained something about ad6s2d that prevented
gpart ad6s2d from being recognized as the same device as "disklabel"
one. I really wonder what that could have been?
Or maybe gpart reported some subtle property of the device differently...

-- 
Andriy Gapon


More information about the freebsd-geom mailing list