Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 04 May 2012 09:37:42 +0200
From:      Peter Maloney <peter.maloney@brockmann-consult.de>
To:        freebsd-fs@freebsd.org
Subject:   Re: gpart labels - why arent't some showing up in /dev/gpt/?
Message-ID:  <4FA38746.5070903@brockmann-consult.de>
In-Reply-To: <4FA38458.3040801@brockmann-consult.de>
References:  <20120502063927.GA9559@johnny.reilly.home> <4FA0D844.8090105@brockmann-consult.de> <4FA0FE82.4040600@entel.upc.edu> <20120503232252.GC26284@johnny.reilly.home> <4FA38458.3040801@brockmann-consult.de>

next in thread | previous in thread | raw e-mail | index | archive | help
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@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?4FA38746.5070903>