Outils pour utilisateurs

Outils du site


sysadmin:linux:raid:raid-btrfs

Mettre en place un RAID 1 avec Btrfs

Pour ce test deux fichiers périphériques disk-0 et disk-1 sont créés.

$ dd if=/dev/zero of=./disk-0 bs=1M count=256
$ dd if=/dev/zero of=./disk-1 bs=1M count=256

On crée le système de fichier btrfs sur disk-0, on le monte pour l'utiliser normalement. A ce stade on a un systeme de fichier opérationnel sur un seul périphérique.

$ sudo mkfs.btrfs /data/test-btrfs/disk-0
$ sudo losetup /dev/loop0 /data/test-btrfs/disk-1
$ sudo mkdir /mnt/btrfs-test && sudo mount -t btrfs -o loop /dev/loop0 /mnt/btrfs-test/

On monte le système de fichier btrfs sur l'arborescence logique:

Ajouter le nouveau périphérique pour le système de fichier /mnt/btrfs-test. Ici l'option -f st utilisée car un systeme de fichier est préexistant sur le ficheir périphérique

$  sudo btrfs device add -f /dev/loop2 /mnt/btrfs-test/

A cet instant le systeme de fichier peut être etendu sur 2 périphérique mais le RAID logiciel n'est pas activé.

C'est la commande balance avec les arguments -dconvert (data) et -mconvert (metadata) qui permet de définir le raid 1 logiciel:

$ sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/btrfs-test

Une fois la balance terminée, pour s'assurer que tout a fonctionné:

$ btrfs filesystem df /mnt/btrfs-test/
System, RAID1: total=32.00MiB, used=4.00KiB
Data+Metadata, RAID1: total=64.00MiB, used=60.00KiB
A partir de maintenant, pour le montage manuel du système de fichier, on peut utiliser indifféremment l'un des deux périphériques disques (disk-0 ou disk-1). Dans /etc/fstab on utilisera uuid du système de fichier.

Mises en situation

Pour les essais de cette section, on crée un fichier témoin:

$ cd /mnt/btrfs-test/dossier-1
$ cat /dev/urandom | tr -d -c [:alnum:] | head -c 80 > mon_fichier_important.txt

Le RAID 1 est fonctionnel à cette étape.

Disque absent ou HS

On démonte le système de fichier btrfs

$ cd /mnt && sudo umount /mnt/btrfs-test

On remonte le système de fichier btrf en utilisant le fichier périphérique correspondant au second disque (disk-1) et on modifie le fichier important.

$ sudo mount -t btrfs /dev/loop2 /mnt/btrfs-test/
$ echo "insertion importante" >> /mnt/btrfs-test/dossier-1/mon_fichier_important.txt

On démonte et on détruit volontairement le périphérique disk-1 par écrasement du contenu. Si le RAID 1 fonctionne correctement, les données doivent être dupliquées sur le disk-0 et on devrait pouvoir reconstruire le RAID sans perte d'information.

$ sudo umount /mnt/btrfs-test
$ sudo dd if=/dev/urandom of=/dev/loop2 bs=1M count=256

Si on essaye de remonter le système de fichier à partir du périphérique écrasé, on doit obtenir une erreur:

$ sudo mount -t btrfs /dev/loop2 /mnt/btrfs-test/
mount : mauvais type de système de fichiers, option erronée, superbloc erroné
        sur /dev/loop2, page de code ou programme auxiliaire manquant, ou autre erreur
       Dans quelques cas certaines informations sont utiles dans le journal
        système — essayez « dmesg | tail » ou quelque chose du genre

Regardons l’état du système de fichier btrfs contenu dans le périphérique encore valide:

$ sudo btrfs filesystem show /dev/loop0
Label: none  uuid: b7e86f0b-5a8f-412c-bee4-52ede8324e9e
        Total devices 2 FS bytes used 64.00KiB
        devid    1 size 256.00MiB used 96.00MiB path /dev/loop0
        *** Some devices missing

La commande retourne que des fichiers périphériques sont manquants. Le montage ne fonctionne pas sans l'option degraded:

$ sudo mount /dev/loop0 /mnt/btrfs-test/
mount : mauvais type de système de fichiers, option erronée, superbloc erroné
        sur /dev/loop0, page de code ou programme auxiliaire manquant, ou autre erreur
       Dans quelques cas certaines informations sont utiles dans le journal
        système — essayez « dmesg | tail » ou quelque chose du genre
 
 
$ sudo mount /dev/loop0 -o degraded /mnt/btrfs-test/

Le système de fichier est monté, le fichier important est accessible mais le RAID 1 fonctionne en mode dégradé. Il manque le périphérique /dev/loop2. Le mot clé missing permet de déréférencer tous les périphériques indisponibles:

$ sudo btrfs device delete missing /mnt/btrfs-test/ 

Ici btrfs refuse de retirer le périphérique tant qu'il est déclaré comme faisant parti du RAID 1. On refait une balance pour ne plus utiliser le périphérique absent puis on le retire:

$ sudo btrfs balance start --force -dconvert=single -mconvert=single /mnt/btrfs-test/
$ sudo btrfs device delete missing /mnt/btrfs-test/
yoann@janus:/mnt/btrfs-test/dossier-1$ sudo btrfs filesystem show
Label: none  uuid: b7e86f0b-5a8f-412c-bee4-52ede8324e9e
        Total devices 1 FS bytes used 64.00KiB
        devid    1 size 256.00MiB used 64.00MiB path /dev/loop0

Le second périphérique est a présent supprimé. Pour recréer notre RAID 1, on réassocie le périphérique et on refait une balace.

$ sudo btrfs device add /dev/loop2 /mnt/btrfs-test/
$ sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt/btrfs-test/

Après cette opération, le RAID 1 est à nouveau pleinement opérationnel

$ btrfs fi df /mnt/btrfs-test/
System, RAID1: total=32.00MiB, used=4.00KiB
Data+Metadata, RAID1: total=64.00MiB, used=60.00KiB

Partition ou données illisibles

Références

sysadmin/linux/raid/raid-btrfs.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1