{{tag>linux sysadmin btrfs raid}}
====== 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 =====
* http://askubuntu.com/questions/49893/how-does-btrfs-raid-work-in-degraded-mode