Le RAID avec mdadm
Voici quelques commandes et tutoriels utiles pour gérer le RAID sous GNU/Linux avec la commande mdadm.
Préambule
Environnement
-
OS : Debian squeeze 6.0.5
Commandes
Réassembler un RAID aprés la réinstallation de son OS ou depuis un LiveCD
-
Avec un RAID composé de deux disques sda1 et sdb1 :
root@host:~# mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
Désinscrire un disque d'un RAID
root@host:~# mdadm --zero-superblock /dev/sda1
Vérifier l'état de son RAID
root@host:~# cat /proc/mdstat
Effectuer une vérification de son RAID
root@host:~# echo check > /sys/block/md0/sync_action
Connaitre l'état détaillé de son RAID
root@host:~# mdadm -D /dev/md0
Cette commande renvoie (en plus d'informations détaillées sur la sortie standard) :
-
0 si aucun problème n'a été détecté
-
1 en cas d'erreur
-
2 en cas de problème grave
Tutoriels
Étendre un RAID 5 (via l'ajout d'un disque)
-
Avec un RAID 5 composé de trois disques sda1, sdb1 et sdc1 et auqel on souhaite rajouter le disque sdd1.
-
La première chose à faire est un backup de ses données!
-
On démonte (facultatif selon le système de fichier) la partition :
root@host:~# umount /dev/md0
On prépare notre nouveau disque en copiant la table de partition d'un disque existant vers le nouveau disque (les partitions participants au RAID doivent avoir la même taille) :
root@host:~# sfdisk -d /dev/sdb | sfdisk --force /dev/sdd
On déclare notre nouveau disque dans l'array :
root@host:~# mdadm --manage /dev/md0 --add /dev/sdd1
On agrandit l'array (l'option --backup-file est fortement conseillée, voir man mdadm pour plus d'informations. Suivant la taille des disques cette opération peut prendre beaucoup de temps On pourra surveiller son évolution via la commande cat /proc/mdastat) :
root@host:~# mdadm --grow /dev/md0 --raid-devices=4 --backup-file=/root/raid5.backup.file
On étend le système de fichier (valable uniquement pour ext. NB : c'est faisable à chaud selon la version de son noyau).
root@host:~# mdadm --grow /dev/md0 --raid-devices=4 --backup-file=/root/raid1-5.backup.file
Étendre un RAID chiffré (passer d'un RAID 1 à un RAID 5)
-
Avec un RAID 1 composé de deux disques sda1 et sdb1 et auqel on souhaite rajouter un disque sc1 :
-
La première chose à faire est un backup de ses données!
-
Puis on fait un backup de l'entete luks (la aussi à titre préventif) :
root@host:~# cryptsetup luksHeaderBackup /dev/md0 --header-backup-file chemin/vers/backup.img
ou de façon manuelle en récupérant la taille de l'en-tête "Payload offset" puis l'en-tète elle même avec la commande dd :
root@host:~# cryptsetup luksDump /dev/md0 | grep "Payload offset"
root@host:~# dd if=/dev/md0 of=chemin/vers/backup.img bs=512 count=4040
À titre d'information la restauration de l'en-tête s'effectue via l'une ou l'autre de ces commandes :
root@host:~# cryptsetup luksHeaderRestore /dev/md0 --header-backup-file chemin/vers/backup.img
root@host:~# dd if=./backup.img of=/dev/md0 bs=512 count=4040
On arrète le RAID (pour plus de sécurité) :
root@host:~# mdadm --stop /dev/md0
On prépare notre nouveau disque en copiant la table de partition d'un disque existant vers le nouveau disque (les partitions participants au RAID doivent avoir la même taille) :
root@host:~# sfdisk -d /dev/sdb | sfdisk --force /dev/sdc
On convertit le RAID 1 en RAID 5 :
root@host:~# mdadm --create /dev/md0 --level=5 -n 2 /dev/sda1 /dev/sdb1
On ajoute le 3 ème disque à l'array :
root@host:~# mdadm --add /dev/md0 /dev/sdc1
On étend l'array (l'option --backup-file est fortement conseillée, voir man mdadm pour plus d'informations. Suivant la taille des disques cette opération peut prendre beaucoup de temps On pourra surveiller son évolution via la commande cat /proc/mdastat) :
root@host:~# mdadm --grow /dev/md0 --raid-disks=3 --backup-file=/root/raid1-5.backup.file
On étend maintenant la partition chiffrée :
root@host:~# cryptsetup resize /dev/mapper/md_crypt
On vérifie et corrige les eventuelles erreurs du systeme de fichier :
root@host:~# e2fsck -f /dev/mapper/md_crypt
On étend le système de fichier (valable uniquement pour ext) :
root@host:~# resize2fs /dev/mapper/md_crypt