FreeBSD : RAID1 hotswap avec gestion AHCI
- Mercredi 24 février 2010
- Publié dans Administration . BSD . FreeBSD . Système
- Par Boris HUISGEN
- Ecrire
FreeBSD 8 gère par défaut vos disques par le driver ATA. Celui ne gère pas le hotswap disque. Si atacontrol permet bien de désactiver et débrancher un disque à chaud, la détection n’est effective qu’au prochain reboot. Pour permettre une détection à chaud, il est nécessaire d’utiliser le driver expérimental AHCI, tout en s’assurant que la gestion AHCI des disques est supportée et activée dans le BIOS.
La gestion AHCI s’appuie sur la couche CAM (déjà utilisée pour les périphériques SCSI et USB), ce qui implique un changement de noms des disques durs. Ainsi /dev/ad0 devient /dev/ada0. La fstab est à modifier avant de redémarrer, d’autant qu’un LiveCD est nécessaire en cas d’erreur ou pour réactiver la gestion ATA. Pour éviter ces désagréments, GEOM propose comme solution les labels qui permettent de bénéficier de noms fixes pour les disques (quelque soit le mode en cours). Pour récupérer les labels de vos partitions UFS, activez l’option suivante :
# sysctl kern.geom.label.debug=1
Les labels seront alors listés au prochain boot, lesquels seront à récupérer et à placer dans la fstab. Pour la partition de swap, le label doit être créer par glabel :
# glabel label swap /dev/ad0s1b
Dans le cas d’un système déjà configuré en RAID par GEOM, les labels sont déjà configurés : GEOM les utilise implicitement. Ainsi, l’activation / désactivation de l’AHCI est transparente et un simple reboot permet de bénéficier de la gestion AHCI.
Pour rappel, voici la méthode de création d’un RAID1 sous GEOM :
# sysctl kern.geom.debugflags=16 # gmirror label -v -b round-robin gm0 /dev/ad8 # cat geom_mirror_load="YES" >> /boot/loader.conf # ee /etc/fstab
# Device Mountpoint FStype Options Dump Pass# /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1f /home ufs rw 2 2 /dev/mirror/gm0s1d /usr ufs rw 2 2 /dev/mirror/gm0s1e /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0
# shutdown -r now
# gmirror insert gm0 /dev/ad10
# gmirror status
Name Status Components
mirror/gm0 DEGRADED ada0
ada1 (48%)
A présent, la gestion des AHCI peut être activée :
# cat ahci_load="YES" >> /boot/loader.conf # shutdown -r now # camcontrol devlist <WDC WD2502ABYS-02B7A0 02.03B03> at scbus2 target 0 lun 0 (ada1,pass2) <WDC WD2502ABYS-02B7A0 02.03B03> at scbus3 target 0 lun 0 (pass0,ada0) <Slimtype DVD A DS8A2S 6P5D> at scbus5 target 0 lun 0 (cd0,pass1)
Je débranche le second disque, la pile RAID se dégrade :
(ada1:ahcich3:0:0:0): lost device (ada1:ahcich3:0:0:0): Invalidating pack GEOM_MIRROR: Cannot write metadata on ada1 (device=gm0, error=6). GEOM_MIRROR: Cannot update metadata on disk ada1 (error=6). GEOM_MIRROR: Device gm0: provider ada1 disconnected.
Une fois le disque rebranché, une détection des périphériques de masse est nécessaire (ce n’est pas automatisé) :
# camcontrol devlist <WDC WD2502ABYS-02B7A0 02.03B03> at scbus2 target 0 lun 0 (pass0,ada0) <Slimtype DVD A DS8A2S 6P5D> at scbus5 target 0 lun 0 (cd0,pass1) # camcontrol rescan all Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful Re-scan of bus 4 was successful Re-scan of bus 5 was successful # camcontrol devlist <WDC WD2502ABYS-02B7A0 02.03B03> at scbus2 target 0 lun 0 (pass0,ada0) <WDC WD2502ABYS-02B7A0 02.03B03> at scbus3 target 0 lun 0 (ada1,pass2) <Slimtype DVD A DS8A2S 6P5D> at scbus5 target 0 lun 0 (cd0,pass1)
Le disque est à présent reconnu mais le RAID lui aussi ne se reconstruit pas automatiquement :
(ada1:ahcich3:0:0:0): Synchronize cache failed (ada1:ahcich3:0:0:0): removing device entry (aprobe0:ahcich3:0:0:0): SIGNATURE: 0000 ada1 at ahcich3 bus 0 target 0 lun 0 ada1: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device ada1: 300.000MB/s transfers ada1: 239429MB (490350672 512 byte sectors: 16H 63S/T 16383C) ada1: Native Command Queueing enabled GEOM_MIRROR: Component ada1 (device gm0) broken, skipping. GEOM_MIRROR: Cannot add disk ada1 to gm0 (error=22). GEOM_MIRROR: Device gm0: rebuilding provider ada1.
Ce qui est entrepris de suite :
# gmirror forget gm0 /dev/ada1
gmirror: No such device: /dev/ada1.
# gmirror insert gm0 /dev/ada1
# gmirror status
Name Status Components
mirror/gm0 DEGRADED ada0
ada1 (1%)
La reconstruction RAID au final ne nécessite plus aucun redémarrage. Le driver AHCI apporte également d’autres fonctionnalités comme le support du NCQ, ce qui permet d’augmenter le débit en cas de forte charge. Pour le vérifier et obtenir des informations détaillées sur un disque, camcontrol est de rigueur :
# camcontrol identify ada0 pass0: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device protocol ATA/ATAPI-8 SATA 2.x device model WDC WD2502ABYS-02B7A0 serial number WD-WCAT1E308323 firmware revision 02.03B03 cylinders 16383 heads 16 sectors/track 63 LBA supported 268435455 sectors LBA48 supported 490350672 sectors PIO supported PIO4 DMA supported WDMA2 UDMA6 overlap not supported Feature Support Enable Value Vendor write cache yes yes read ahead yes yes Native Command Queuing (NCQ) yes 31/0x1F Tagged Command Queuing (TCQ) no no 31/0x1F SMART yes yes microcode download yes yes security yes no power management yes yes advanced power management no no 0/0x00 automatic acoustic management yes yes 254/0xFE 128/0x80

Excellent tu tutoriel. Est-ce que tu serais par hasard comment changer le gmirror par des disque plus gros?
Il faut retirer du mirroring le premier disque et le remplacer, faire ton slice et les partitions, puis jouer avec dump/restore pour y copier les données de chaque partition depuis le second disque. Une fois que c’est fait tu peux refaire ton gmirror, rebooter sur le 1er disque et enfin ajouter le second disque (que tu devras reslicer au préalable).
Cela doit marcher à chaud en AHCI, en un seul reboot. Sinon, tu dois t’aider d’un livecd.