Date: Fri, 04 May 2012 09:25:12 +0200 From: Peter Maloney <peter.maloney@brockmann-consult.de> To: Andrew Reilly <areilly@bigpond.net.au> Cc: freebsd-fs@freebsd.org Subject: Re: gpart labels - why arent't some showing up in /dev/gpt/? Message-ID: <4FA38458.3040801@brockmann-consult.de> In-Reply-To: <20120503232252.GC26284@johnny.reilly.home> References: <20120502063927.GA9559@johnny.reilly.home> <4FA0D844.8090105@brockmann-consult.de> <4FA0FE82.4040600@entel.upc.edu> <20120503232252.GC26284@johnny.reilly.home>
next in thread | previous in thread | raw e-mail | index | archive | help
On 05/04/2012 01:22 AM, Andrew Reilly wrote: > On Wed, May 02, 2012 at 11:29:38AM +0200, Gustau Pérez i Querol wrote: >> Al 02/05/2012 08:46, En/na Peter Maloney ha escrit: >>> I have the same problem. Any time you boot off a CD/DVD and use import >>> -f (and then don't export), or I guess use import -f a pool from >>> anywhere, it does that. I don't know any non-zfs causes for the problem. >> When doing the import -f, use -d /dev/gpt to force zpool to search >> for devices in /dev/gpt. That way the import will be done by gpt name, >> instead of by device name. > I've just read the manpage on that option again, and I don't > think that it would help, even if it was available. Let's test that then, shall we? Here is an old VM I have, where one slice lost its gpt label. ================== part 1: previously lost label on non-root disk ================== # zpool status test2 pool: test2 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM test2 ONLINE 0 0 0 gptid/44b52f4d-5d75-11e1-b476-080027e5bb66 ONLINE 0 0 0 # zdb ... test2: version: 28 name: 'test2' state: 0 txg: 4 pool_guid: 16644836222594068864 hostid: 871222403 hostname: 'bczfsvm1test.bc.local' vdev_children: 1 vdev_tree: type: 'root' id: 0 guid: 16644836222594068864 create_txg: 4 children[0]: type: 'disk' id: 0 guid: 1497402725988130066 path: '/dev/da3p1' phys_path: '/dev/da3p1' whole_disk: 1 metaslab_array: 30 metaslab_shift: 22 ashift: 9 asize: 729284608 is_log: 0 create_txg: 4 ... da3 is wrong (another pool uses da3, and gpart show da3 shows "no such geom")... so now I try to figure out which disk it really is: # dd if=/dev/gptid/44b52f4d-5d75-11e1-b476-080027e5bb66 of=/dev/null bs=1M count=5000 >/dev/null 2>&1 & # gstat here are the high load ones: L(q) ops/s r/s kBps ms/r w/s kBps ms/w %busy Name 0 600 600 76798 1.0 0 0 0.0 60.1| da4 0 601 601 76924 1.1 0 0 0.0 66.4| da4p1 0 601 601 76924 1.2 0 0 0.0 70.6| gptid/44b52f4d-5d75-11e1-b476-080027e5bb66 # gpart show da4 => 34 41942973 da4 GPT (20G) 34 1433600 1 freebsd-zfs (700M) 1433634 40509373 - free - (19G) # gpart show -l da4 => 34 41942973 da4 GPT (20G) 34 1433600 1 (null) (700M) 1433634 40509373 - free - (19G) (Strange... I thought usually when this happens, the label still shows in gpart) # ls /dev/gpt root0 root1 swap0 swap1 # shutdown -r now # zpool import -f -d /dev/gpt test2 cannot import 'test2': no such pool available # gpart modify -i 1 -l test2d1 da4 da4p1 modified # ls /dev/gpt (expecting not to see it here... never works this way, but maybe rescan or reboot will work; I don't know how to make it 'retaste' the partitions other than gpart delete and create) root0 root1 swap0 swap1 # camcontrol rescan 0 Re-scan of bus 0 was successful # ls /dev/gpt (not sure what to expect here) root0 root1 swap0 swap1 # shutdown -r now # ls /dev/gpt/ root0 root1 swap0 swap1 test2d1 # zpool import test2 # zpool status test2 pool: test2 state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM test2 ONLINE 0 0 0 gptid/44b52f4d-5d75-11e1-b476-080027e5bb66 ONLINE 0 0 0 # shutdown -r now # zpool import -d /dev/gpt test2 # zpool status test2 # zpool status test2 config: NAME STATE READ WRITE CKSUM test2 ONLINE 0 0 0 gpt/test2d1 ONLINE 0 0 0 # zdb ... test2: version: 28 name: 'test2' state: 0 txg: 24635 pool_guid: 16644836222594068864 hostid: 871222403 hostname: 'bczfsvm1test.bc.local' vdev_children: 1 vdev_tree: type: 'root' id: 0 guid: 16644836222594068864 children[0]: type: 'disk' id: 0 guid: 1497402725988130066 path: '/dev/gpt/test2d1' phys_path: '/dev/gpt/test2d1' whole_disk: 1 metaslab_array: 30 metaslab_shift: 22 ashift: 9 asize: 729284608 is_log: 0 create_txg: 4 ... # zpool export test2 # zpool import test2 # zpool status test2 config: NAME STATE READ WRITE CKSUM test2 ONLINE 0 0 0 gpt/test2d1 ONLINE 0 0 0 ================== part 2: root disk ================== # zpool status zroot config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/root0 ONLINE 0 0 0 gpt/root1 ONLINE 0 0 0 # shutdown -r boot on DVD (to break it, just to prove that the fix works) # kldload /mnt2/boot/kernel/opensolaris.ko # kldload /mnt2/boot/kernel/zfs.ko # ls /dev/gpt root0 root1 swap0 swap1 test2d1 # zpool import -f zroot # zpool status zpool: not found (oops... forgot to use altroot, so the booted fixit system is broken now... oh well, just remove DVD and reset) # zpool status zroot config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 da0p3 ONLINE 0 0 0 da2p3 ONLINE 0 0 0 (strange... usually you get gptid stuff instead of device names) # ls /dev/gpt swap0 swap1 test2d1 # shutdown -r now boot DVD again (to fix it) # kldload /mnt2/boot/kernel/opensolaris.ko # kldload /mnt2/boot/kernel/zfs.ko # ls /dev/gpt root0 root1 swap0 swap1 test2d1 # zpool import -f -d /dev/gpt -o altroot=/z zroot # zpool status config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/root0 ONLINE 0 0 0 gpt/root1 ONLINE 0 0 0 Remove DVD and boot # zpool status zroot pool: zroot state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 gpt/root0 ONLINE 0 0 0 gpt/root1 ONLINE 0 0 0 So, it seems to work... but not if you do it in the wrong order. You need to set the label again, and boot without the pool imported before /gpt/ exists. Then you need to use -d. And thank you Gustau Pérez i Querol! I didn't know about -d. > I had > previously been able to refer to gpt entries as paths from /dev, > without it. I.e., zpool create raidz tank gpt/zraid1 gpt/zraid2 > ... etc. My problem at the moment is that the /dev/gpt/zraid1 > etc entries aren't there at all, and zpool create complains > about exactly that problem. It's not a question of using -d > /dev/gpt to short-cut the path name. > > Cheers, > -- -------------------------------------------- Peter Maloney Brockmann Consult Max-Planck-Str. 2 21502 Geesthacht Germany Tel: +49 4152 889 300 Fax: +49 4152 889 333 E-mail: peter.maloney@brockmann-consult.de Internet: http://www.brockmann-consult.de --------------------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FA38458.3040801>