RAID 5 + agrandissement du RAID + chiffrement

Posted on July 29, 2014

Le besoin

Je me demande souvent où j’ai mis tel ou tel fichier, je range bien mais la capacité de mes disques est limitée, donc j’en met un peu partout. Problème bien connu. Je pourrais utiliser LVM pour ça, pour avoir un seul volume logique qui contiendrait tous mes fichiers, mais ce n’est pas suffisant de retrouver mes données.

Il faut aussi qu’elles soient un minimum à l’abri d’une panne de disque. Pour ça, nous avons le RAID 5 qui est pas mal. Les données sont redondées, on a autant de disques durs qu’on veut, la capacité perdue n’est que d’un disque. Mais avoir une grande capacité, ce n’est pas suffisant, je ne veux pas qu’on puisse récupérer mes fichiers dans le cas d’un cambriolage (ou réquisition judiciaire, ’fin truc banal).

En plus de ça, il faut donc chiffrer les données.

Choix de la solution

J’ai donc choisi de prendre quelques disques, de les utiliser en RAID 5 , et je n’ai pas fait dans la demie-mesure : 4 × 2TB. Cela donne (4-1) * 2TB d’espace utilisable, c’est un bon début.

Pour le chiffrement, Luks car c’est un standard.

Commandes et détails

Attention, durant tout ce que je fais, je ne prétend aucunement être optimal. C’est la manière que j’ai utilisée pour faire mon infra, point.

Initialement

Un petit mot sur ma configuration à la base. J’ai déjà deux disques 2TB chez moi, ils sont utilisés, il faut donc que je procède en plusieurs étapes.

Procédure

Tout d’abord, on crée le RAID 5 avec les deux disques neufs en mode dégradé (le RAID 5 fonctionne normalement à partir de 3 disques) ; on indique 3 disques dont un manquant. Puis on chiffre le disque RAID avec le programme cryptsetup.

Ensuite on déplace les fichiers des deux anciens disques vers le RAID, et on rajoute les deux disques dans le RAID. Une fois que c’est fait, on devrait avoir 3 disques actifs et un de spare (qui prendra la place d’un disque en cas de panne).

Problème, ça m’intéresse pas tellement d’avoir un disque de rechange, je veux surtout plus de place, donc on va indiquer au RAID qu’il faut utiliser le quatrième disque et « agrandir » le disque virtuel RAID. Cette étape n’est pas suffisante pour profiter de l’espace disque virtuel offert par le RAID, il faudra en plus redéfinir la taille du système de fichiers (ext4) via la commande resize2fs.

C’est parti !

En premier, on crée des partitions de même taille sur nos deux premiers disques, sinon ça va pas marcher. Ce qu’il faut vérifier c’est le bloc de début des partitions. Si vous avez des disques qui affichent « Sector size (logical/physical): 512 bytes / 4096 bytes », il faut que le bloc de début soit bien aligné avec la taille des secteurs. Pour faire ça automatiquement sans se prendre la tête, utilisez fdisk.

création des partitions (fdisk)

partitionnement des disques

fdisk -c /dev/sdX

On arrive sur l’écran, on supprime toutes les anciennes partitions avec d. Ensuite on en crée une nouvelle avec n, qui commence au secteur 2048. On laisse tous les autres paramètres par défaut si on compte utiliser toute la taille du disque. Il faut penser à mettre une étiquette sur la partition pour indiquer qu’elle fera partie d’un RAID. Pour cela on utilise la commande t sur la partition, et on y inscrit l’étiquette fd. On finit par enregistrer nos modifications sur le disque avec w.

Une fois qu’on a fait les deux partitions sur les disques, il faut vérifier qu’elles ont la même taille. Il suffit de retourner dans fdisk pour s’en convaincre.

création du RAID 5 (mdadm)

Maintenant qu’on a créé nos deux partitions, on va en faire une grappe de RAID. Les plus geeks pourront s’amuser à changer des paramètres comme la taille des « chunks » pour mieux convenir à leurs besoins.

création de la grappe de RAID en mode dégradé

mdadm --create /dev/md0 --level=5 --raid-device=3 /dev/sda1 /dev/sdb1 missing

chiffrement du RAID (cryptsetup)

À partir de là nous pouvons chiffrer la partition virtuelle du RAID. Une fois que ce sera fait, il ne nous restera qu’à « ouvrir » cette nouvelle partition et y mettre un système de fichiers.

chiffrement de la partition RAID

cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha256 /dev/md0

ouverture de la partition chiffrée

cryptsetup luksOpen /dev/md0 data

écriture du système de fichiers (ext4)

On se retrouve avec /dev/mapper/data, et on va y écrire notre système de fichier (ext4). Il faut y intégrer une information à propos de notre RAID : la taille des « chunks » de notre RAID sera la taille des « stride » de notre système de fichiers. On retrouve la taille des chunks de notre RAID avec la commande mdadm --detail /dev/md0. La taille de « stripe-width » correspond à la taille de notre RAID moins un, fois la taille d’un chunk. stripewidth = chunksize * (nb_disques - 1) pour être plus clair.

J’utilise le paramètre -m 0 pour indiquer que je ne garde pas de place réservée à root. J’utilise mon RAID uniquement pour y mettre des données, donc autant ne pas gâcher de la place.

Note : si vous souhaitez partitionner ce nouveau disque virtuel, il serait intéressant d’utiliser LVM. Je ne le fais pas ici, je n’en ai pas l’utilité, tout sera enregistré directement sur une seule partition la plus grande possible.

écriture du système de fichiers

mkfs -t ext4 -m 0 -b 4096 -E stride=512,stripe-width=1536 /dev/mapper/data

On peut désormais (enfin !) monter notre partition et y écrire des choses, mount /dev/mapper/data /mnt.

Intégration des deux disques restants dans le RAID

Pour l’instant nous avons un RAID 5 à deux disques en mode dégradé. Il faut ajouter les anciens disques dans la grappe RAID, donc on commence par déplacer les données des anciens disques vers le RAID. Une fois la copie faite, on reformate les anciens disques, on supprime des informations sur les anciens systèmes de fichiers utilisés (sinon mdadm ne va pas vouloir ajouter les disques) et on les ajoute dans le RAID.

nettoyage des meta-données des disques

wipefs -a /dev/sdX1
wipefs -a /dev/sdY1

Maintenant on les ajoute dans le RAID.

nettoyage des meta-données des disques

mdadm /dev/md0 --add /dev/sdX1
mdadm /dev/md0 --add /dev/sdY1

Un des disques est utilisé activement, l’autre est en spare. Il faut attendre que la synchronisation entre les trois disques actifs soit faite, pour ça : watch -d /proc/mdstat.

agrandissement du RAID

Nous avons donc 4 TB de données (capacité de 2 disques) disponibles. Il faut maintenant activer le disque de spare, ce qui agrandira la partition virtuelle du RAID. Une fois que ce sera fait, il faudra agrandir notre système de fichiers.

Note : je démonte la partition chiffrée, mais je ne sais pas si c’est utile, simple précaution.

on démonte notre partition chiffrée

umount /mnt/
cryptsetup luksClose data

activation du dernier disque

mdadm /dev/md0 --grow --raid-devices 4

Comme tout à l’heure, on attend que le RAID ait fini de faire son travail via watch -d /proc/mdstat, puis on force le test de notre système de fichiers avec e2fsck -f (même s’il a l’air clean). Enfin, augmente la taille de notre système de fichiers.

déchiffrement de partition et agrandissement

cryptsetup luksOpen /dev/md0 data
e2fsck -f /dev/mapper/data
resize2fs -p -S 512 /dev/mapper/data

Et voilà. /

Commandes de tous les jours

Maintenant qu’on a vu comment faire tout ça, les commandes à retenir pour le RAID et le chiffrement de partition sont :

assembler la grappe RAID et la fermer

mdadm --assemble --scan
mdadm /dev/md0 --stop

regarder ce qu’il se passe sur le raid

watch -d /proc/mdstat

ouvrir et fermer la partition chiffrée

cryptsetup luksOpen /dev/md0 nom-de-la-partition
cryptsetup luksClose nom-de-la-partition