gpart labels - why arent't some showing up in /dev/gpt/?
Peter Maloney
peter.maloney at brockmann-consult.de
Fri May 4 07:37:44 UTC 2012
Added one line below (forgot to add an export before a reboot)
On 05/04/2012 09:25 AM, Peter Maloney wrote:
> 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
>
I think at this point I forgot an export in the previous email:
# zpool export test2
> # shutdown -r now
>
> # zpool import -d /dev/gpt 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 at brockmann-consult.de
Internet: http://www.brockmann-consult.de
--------------------------------------------
More information about the freebsd-fs
mailing list