Sécurisation des données avec RAID1

Avoir des données c'est bien, les conserver c'est mieux... En effet, si certaines des données présentes sur votre HTPC ne sont pas critiques (au sens où beaucoup de choses peuvent se retrouver sur Internet...), ce n'est souvent pas le cas de vos photos et vidéos personnelles. Il est donc bon de sécuriser ces informations. Une bonne méthode est l'utilisation d'un RAID de type mirroring (RAID 1) pour avoir en permanence une copie de vos données (couramment utilisé sur les serveurs). Cela ne vous exonère pas de faire des sauvegardes sur disque dur externe, il faut toujours être prudent quant à la sauvegarde de ses données personnelles. Combien d'étudiants n'ai-je vu à une semaine du rendu de leur projet avoir un crash ou une panne du disque où ils avaient tout (et bien sûr jamais utilisé un serveur SVN ou un système de sauvegarde quelconque).

De nombreux tutoriels sont présents sur le Web pour mettre en place votre RAID, mais je n'ai pas trouvé de documentation vraiment complète sur ce qu'il faut faire en cas de panne. Et puis quand on créé son RAID, tout va bien, on a pas encore de données dessus, donc on ne risque pas de perdre grand choses. Quand la panne survient, on se retrouve beaucoup plus en situation de stress et la grosse peur est de perdre ses données que l'on a souvent mis des années à produire et collecter.

Voici donc un petit résumé de toutes les bonnes pratiques que j'ai pu collecter pour pallier à un problème de panne disque ou plus simplement pour changer un disque quand celui-ci donne des signes de faiblesse (messages d'erreurs dans les logs par exemple).

Identification physique d'un disque dans le RAID

Dans le cas de configurations avec RAID hardware, il y a souvent des outils de monitoring qui permettent d'identifier quel est le matériel défaillant (LED qui s'allume en fasse du disque défectueux). Mais ceci est réservé pour les configurations professionnelles. Dans mon cas, j'ai simplement monté un RAID 1 logiciel grâce à GNU/Linux. Quand un problème survient, il faut tout d'abord aller voir dans les logs pour avoir un début de réponse quant au fautif.

ata3: drained 32768 bytes to clear DRQ.
ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x280000 action 0x6 frozen
SError: { 10B8B BadCRC }
ata3.00: failed command: READ DMA EXT
ata3.00: cmd 25/00:00:4f:a0:a8/00:01:13:00:00/e0 tag 0 dma 131072 in
res ff/ff:ff:ff:ff:ff/ff:ff:ff:ff:ff/ff Emask 0x2 (HSM violation)
ata3.00: status: { Busy }
ata3.00: error: { ICRC UNC IDNF ABRT }
ata3: hard resetting link

OK. Donc c'est le premier disque ATA du deuxième contrôleur a prori, mais quel /dev... Heureusement un peu plus loin dans les logs:

sd 2:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 2:0:0:0: [sdb] Sense Key : Aborted Command [current] [descriptor]
Descriptor sense data with sense descriptors (in hex):
72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00
13 4c 80 a0
sd 2:0:0:0: [sdb] Add. Sense: No additional sense information
sd 2:0:0:0: [sdb] CDB: Read(10): 28 00 13 4c 7f 3f 00 03 00 00
end_request: I/O error, dev sdb, sector 323780415

OK. Donc c'est /dev/sdb... Je vais pouvoir le retirer proprement du RAID (procédure que l'on trouve dans tous les bons tutoriels reprise un peu plus loin). Mais une fois que j'aurai ouvert la machine, comment retrouver qui est /dev/sdb (le bon disque physiquement) et ce à coup sûr (ne pas conserver le mauvais disque avec des données corrompues. En effet, je dispose de 2 disques complètement identiques (même marque, même modèle et achetés en même temps... je sais c'est pas bien). Deux disques Western Digital 320G constituent mon RAID1 (avec chacun une partition de la taille du disque). Leur référence est WD3200AAJS à tous les deux... Donc comment les identifier ?

Pour identifier un disque dans un RAID par son numéro de série, il suffit en fait d'utiliser la commander hdparm avec l'option -i. Celle-ci vous retourne l'ensemble des informations incluant le numéro de série du disque, numéro que l'on retrouve sur l'étiquette du disque.

# hdparm -i /dev/sdb
/dev/sdb:

Model=WDC WD3200AAJS-00L7A0, FwRev=01.03E01, SerialNo=WD-WCAV23855987
Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=50
...

Nous venons donc d'identifier le coupable: WD-WCAV23855987.

Remplacer le disque défectueux identifié

Le fautif étant identifié, il reste à sauvegarder la partition pour pouvoir la restaurer sur le nouveau disque.

# sfdisk -d /dev/sdb > sdb.partition

Après cette sauvegarde d'informations, nous pouvons sans problème avertir le système qu'un disque est défectueux dans le RAID et le supprimer du RAID

# mdadm /dev/md0 --fail /dev/sdb1
# mdadm /dev/md0 --remove /dev/sdb1

Après arrêt de la machine, remplacement du disque défectueux (qu'il est facile d'identifier grâce au numéro de série récupérer grâce à hdparm), il ne nous reste plus qu'à redémarrer la machine, partitionner le disque de manière identique et ajouter celui-ci au RAID

# sfdisk /dev/sdb < sdb.partition
# mdadm /dev/md0 --add /dev/sdb1

En suivant ces quelques explications, vous pourrez restaurer votre RAID sans transpirer à grosses gouttes en espérant ne rien perdre et en conservant le bon disque.