Upgrade to 9.0: How to convert zpool from adX to adaX?

Martin Birgmeier Martin.Birgmeier at aon.at
Thu Jan 5 07:59:44 UTC 2012


On 01/04/12 18:23, Jeremy Chadwick wrote:
> On Wed, Jan 04, 2012 at 04:47:42PM +0100, Martin Birgmeier wrote:
>> I'll be upgrading a server from 8.2 to 9.0 soon. On it, I currently
>> have the following zpool:
>>
>> ----------
>> [0]# zpool status
>>    pool: hal.1
>>   state: ONLINE
>> status: The pool is formatted using an older on-disk format.  The pool can
>>          still be used, but some features are unavailable.
>> action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
>>          pool will no longer be accessible on older software versions.
>>   scrub: none requested
>> config:
>>
>>          NAME        STATE     READ WRITE CKSUM
>>          hal.1       ONLINE       0     0     0
>>            raidz2    ONLINE       0     0     0
>>              ad10p3  ONLINE       0     0     0
>>              ad12p3  ONLINE       0     0     0
>>              ad14p3  ONLINE       0     0     0
>>              ad16p3  ONLINE       0     0     0
>>              ad18p3  ONLINE       0     0     0
>>              ad20p3  ONLINE       0     0     0
>>
>> errors: No known data errors
>> [0]#
>> ----------
>>
>> I would like to do two things:
>>
>> 1) Wire the ATA CAM disks such that ad10 ->  ada0, ad12 ->  ada1, etc.
>>
>> 2) Change the zpool to use the then newly available ada0p3, ada1p3,
>> ..., ada5p3 gparts.
>>
>> Ultimately, I want to set sysctl kern.cam.ada.legacy_aliases=0.
>>
>> Please advise on how best to achieve this.
>>
>> Regards,
>>
>> Martin
>>
>> p.s. The following information relates to the current ata attachments:
>>
>> ----------
>> [0]# egrep 'ad[0-9]|ata[0-9]|atapci[0-9]' /var/run/dmesg.boot
>> atapci0:<JMicron JMB361 UDMA133 controller>  port
>> 0xcc00-0xcc07,0xc880-0xc883,0xc800-0xc807,0xc480-0xc483,0xc400-0xc40f
>> mem 0xfe8fe000-0xfe8fffff irq 18 at device 0.0 on pci3
>> atapci0: [ITHREAD]
>> atapci1:<AHCI SATA controller>  on atapci0
>> atapci1: [ITHREAD]
>> atapci1: AHCI v1.00 controller with 2 3Gbps ports, PM supported
>> ata2:<ATA channel 0>  on atapci1
>> ata2: [ITHREAD]
>> ata3:<ATA channel 1>  on atapci1
>> ata3: [ITHREAD]
>> ata4:<ATA channel 0>  on atapci0
>> ata4: [ITHREAD]
>> atapci2:<ATI IXP700/800 SATA300 controller>  port
>> 0xa000-0xa007,0x9000-0x9003,0x8000-0x8007,0x7000-0x7003,0x6000-0x600f
>> mem 0xfe4ffc00-0xfe4fffff irq 19 at device 17.0 on pci0
>> atapci2: [ITHREAD]
>> atapci2: AHCI v1.20 controller with 6 3Gbps ports, PM supported
>> ata5:<ATA channel 0>  on atapci2
>> ata5: [ITHREAD]
>> ata6:<ATA channel 1>  on atapci2
>> ata6: [ITHREAD]
>> ata7:<ATA channel 2>  on atapci2
>> ata7: [ITHREAD]
>> ata8:<ATA channel 3>  on atapci2
>> ata8: [ITHREAD]
>> ata9:<ATA channel 4>  on atapci2
>> ata9: [ITHREAD]
>> ata10:<ATA channel 5>  on atapci2
>> ata10: [ITHREAD]
>> ad10: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata5-master
>> UDMA100 SATA 3Gb/s
>> ad12: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata6-master
>> UDMA100 SATA 3Gb/s
>> ad14: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata7-master
>> UDMA100 SATA 3Gb/s
>> ad16: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata8-master
>> UDMA100 SATA 3Gb/s
>> ad18: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata9-master
>> UDMA100 SATA 3Gb/s
>> ad20: 1907729MB<WDC WD2001FASS-00W2B0 01.00101>  at ata10-master
>> UDMA100 SATA 3Gb/s
>> [0]#
> You can try doing this on 8.2 already, and always revert if need be.
> All you need to do is add ahci_load="yes" to /boot/loader.conf and see
> how things behave after that.  This will make use of the AHCI-to-CAM
> translation layer (which is now default in 9.0).
>
> There isn't much you need to do with ZFS either: it should "taste"
> the disks and find them on boot.  If it doesn't, try "zpool import",
> then when it shows the pool, do "zpool import {poolid}".
>
> It should automatically refer to everything as adaX going forward.
>
> No need to bother with kern.cam.ada.legacy_aliases.
>
Thank you for this explanation.

I understand that many improvements to zfs have gone into the code after 
8.2.0; therefore, I am very careful not doing any "exotic" things with 
this server, as it is a production system and I do not want to lose 
data. (Note: Single and double failures are supposedly covered by using 
raidz2, and history is preserved by using snapshots, so I have no 
further backups on tapes or other disks. Thus, theoretically, all backup 
cases except for disaster are covered, and regarding that I currently 
count on the probability of floods, fire, burglary, and Russian Mars 
probes falling on my house as being sufficiently low, whereas I am not 
that confident regarding software disasters.) To make it short, I do not 
want to experiment, but just to apply a tried and true procedure for 
getting my pool to operate flawlessly under 9.0.

Remark: My root partition is a UFS.

In 9.0, if I keep kern.cam.ada.legacy_aliases=1, there will be two paths 
to each device, one through adX, the other through adaX. Which one will 
zfs use, and show with 'zpool status'?

Also, I understand that I will have to wire down the various ATA CAMs to 
obtain the old numbering. How can I do this? Again, which path would zfs 
use if I did not wire down the ATA CAMs? Will I have half of my devices 
go through adX and the other through adaX, or will zfs even believe that 
it has a multipath connectivity to each device?

Regards,

Martin



More information about the freebsd-fs mailing list