BtrFs » History » Version 3
« Previous -
Version 3/9
(diff) -
Next » -
Current version
Fabien Dupont, 05/09/2013 02:23 PM
BtrFs¶
- Table of contents
- BtrFs
Présentation¶
BtrFs (se prononce « Butter FS ») est un filesystem de type CoW (« Copy on Write »). C'est à dire que deux données identiques (même CRC32) ne sont écrites qu'une seule fois sur le filesystem jusqu'à ce qu'une des deux soit modifiées.
Exemple :
$ cat toto > fichier1 # « toto » est écrit quelque part sur le disque dur $ cat toto > fichier2 # fichier2 devient un pointeur vers fichier1 $ sed -ie 's/o/a/g' fichier2 # « tata » est écrit quelque part sur le disque dur # et fichier2 n'est plus un pointeur vers fichier1
De plus, BtrFs est différents des systèmes de fichiers « classiques » (ext2/3/4) car il offre les fonctionnalités suivantes :
- possibilité d'écrire le filesystem sur plusieurs disques : raid1, raid0, raid10 et depuis le kernel 3.9, raid5 ou raid6.
- sous-volumes : il n'y a pas de notion de partitions mais un répertoire peut devenir la racine d'un nouveau volume.
- snapshots : une image peut être créée et utilisée pour sauvegarder ou restaurer l'état d'un filesystem (ou d'un sous-volume) à un instant T.
Création d'un filesystem BtrFs sous debian¶
Le paquet « btrfs-tools » offre les outils permettant la création et la gestion d'un filesystem BtrFs.
# apt-get install btrfs-tools
Single¶
Les données et les métadonnées sont écrites sur un seul disque.
# mkfs.btrfs -d single /dev/sdb
raid0¶
Les données sont « stripées » sur deux disques. Il faut donc un minimum de 2 disques.
# mkfs.btrfs -d raid0 -m raid0 /dev/sdb /dev/sdc
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
+-----+ +-----+ | sdb | | sdc | +-----+ +-----+ | a | | b | | c | | d | | e | | f | | g | | h | +-----+ +-----+
Pros :
- Performance accrue en lecture, un fichier est lue sur deux disques, débit doublé.
- Plusieurs disques sont vus en un seul volume.
Cons :
- Sécurité des données faible, si un seul disque tombe en panne, l'ensemble des données est perdue.
raid1¶
Les données sont « mirrorées » sur deux disques. Il faut donc un minimum de 2 disques.
# mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
+-----+ +-----+ | sdb | | sdc | +-----+ +-----+ | a | | a | | b | | b | | c | | c | | d | | d | | e | | e | | f | | f | | g | | g | | h | | h | +-----+ +-----+
Pros :
- Sécurité des données forte, N-1 disques peuvent tomber en panne avant de perdre les données.
Cons :
- Pour N disques de taille T, on n'a que T octets à disposition.
raid10¶
Les données sont « mirrorées » sur N/2 disques puis « stripées » entre les 2 N/2 disques. Il faut donc un minimum de 4 disques.
# mkfs.btrfs -d raid10 -m raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
<-------raid0-------> <-----raid1-----> <-----raid1-----> +-----+ +-----+ +-----+ +-----+ | sdb | | sdc | | sdd | | sde | +-----+ +-----+ +-----+ +-----+ | a | | a | | b | | b | | c | | c | | d | | d | | e | | e | | f | | f | | g | | g | | h | | h | +-----+ +-----+ +-----+ +-----+
Pros :
- Sécurité des données forte, N-1 disques dans chaque morceau du raid0 peuvent tomber en panne avant de perdre les données.
- Performance accrue en lecture, un fichier est lue sur deux disques, débit doublé.
- Plusieurs disques sont vus en un seul volume.
Cons :
- Pour N disques de taille T, on n'a que (NÃT)/2 octets à disposition.
raid5 (kernel >= 3.9)¶
Les données sont « stripées » sur N-1 disques puis la parité d'un « stripe » est écrite sur le dernier disque. Il faut donc un minimum de 3 disques.
# mkfs.btrfs -d raid5 -m raid5 /dev/sdb /dev/sdc /dev/sdd
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
+-----+ +-----+ +-----+ | sdb | | sdc | | sdd | +-----+ +-----+ +-----+ | a | | b | | p1 | | p2 | | c | | d | | e | | p3 | | f | | g | | h | | p4 | +-----+ +-----+ +-----+
Pros :
- Sécurité des données forte, 1 disque peut tomber en panne avant de perdre les données.
- Plusieurs disques sont vus en un seul volume.
Cons :
- Pour N disques de taille T, on n'a que (N-1)ÃT octets à disposition.
raid6 (kernel >= 3.9)¶
Les données sont « stripées » sur N-2 disques puis la parité d'un « stripe » est « mirrorée » sur 2 disques. Il faut donc un minimum de 4 disques.
# mkfs.btrfs -d raid6 -m raid6 /dev/sdb /dev/sdc /dev/sdd
Par exemple pour un fichier contenant « abcdefgh », on aura sur les disques :
+-----+ +-----+ +-----+ +-----+ | sdb | | sdc | | sdd | | sde | +-----+ +-----+ +-----+ +-----+ | a | | b | | p1 | | p1 | | p2 | | c | | d | | p2 | | p3 | | p3 | | e | | f | | g | | p4 | | p4 | | h | +-----+ +-----+ +-----+ +-----+
Pros :
- Sécurité des données forte, 2 disques peut tomber en panne avant de perdre les données.
- Plusieurs disques sont vus en un seul volume.
Cons :
- Pour N disques de taille T, on n'a que (N-2)ÃT octets à disposition.
Administration d'un volume BtrFs¶
Sous-volumes (subvolumes)¶
Un sous-volume n'est pas équivalent à LVM. C'est une racine sous la racine.
Un sous-volume peut contenir une hierarchie de fichiers ou bien une image (« snapshot ») d'un autre sous-volume à un instant T.
Par exemple, dans un même volume, on peut avoir :
+-+- root (sous volume par défaut) | +-- /bin | +-- /usr | +-- ... | +-+- home | +-- /home | +-+- snapshot_root1 | +-- /bin | +-- /usr | +-- ... | . .
Création d'un sous-volume¶
Par exemple, pour créer un sous-volume /mnt/home dans le volume BtrFs monté dans /mnt :
# btrfs subvolume create /mnt/home
/!\ /mnt/home ne doit pas exister. Il apparaîtra tel un répertoire, du point de vue de l'utilisateur mais ce n'en n'est pas un.
Création d'un snapshot dans un sous-volume :¶
Par exemple, pour créer un snapshot de /mnt/home :
# ls -l /mnt/home/fab /mnt/home/fab: total 0 # btrfs subvolume snapshot /mnt/home /mnt/snapshot_of_home # touch /mnt/home/fab/toto # ls -l /mnt/home/fab /mnt/snapshot_of_home/fab /mnt/home/fab: total 0 -rw-r--r-- 1 root root 0 May 9 13:49 toto /mnt/snapshot_of_home/fab: total 0
On voit bien que le snapshot contient l'état de /mnt/home avant la création du fichier toto.
Monter un sous-volume¶
Pour monter un sous-volume précédement créé :
# btrfs subvolume list /mnt ID 261 gen 37 top level 5 path home ID 262 gen 41 top level 5 path snapshot_of_home # mount /dev/sdb1 /home -o subvolume=home # df -HTP | grep sdb1 /dev/sdb1 btrfs 8.0T 6.7G 8.0T 1% /home /dev/sdb1 btrfs 8.0T 6.7G 8.0T 1% /mnt # mkdir /home/fab # chown fab:fab /home/fab # ls -ld /mnt/home/fab /home/fab drwxr-xr-x 1 fab fab 8 May 9 13:49 /mnt/home/fab drwxr-xr-x 1 fab fab 8 May 9 13:49 /home/fab
Monter un volume au boot (/etc/fstab)¶
Monter un volume¶
N'importe lequel des disques d'un volume raid* peut être monté. BtrFs déduira le type de volume et les autres disques utilisés.
Par exemple, pour un volume en raid1 sur /dev/sdb et /dev/sdc monté dans /pub au boot :
# grep btrfs /etc/fstab /dev/sdb /pub btrfs defaults 0 0
Monter un sous-volume (ou un snapshot)¶
Par exemple, pour monter le sous-volume home du volume précédent :
# grep btrfs /etc/fstab /dev/sdb /pub btrfs defaults 0 0 /dev/sdb /home btrfs defaults,subvolume=home 0 0
Gérer les disques d'un raid¶
Remplacer un disque défaillant¶
Par exemple, pour un raid10 sur /dev/sdb, /dev/sdc, /dev/sdd et /dev/sde monté dans /pub, soudainement /dev/sdc tombe en panne.
Il doit être remplacé physiquement puis :
# mkfs.btrfs /dev/sdc # mount -o remount,degraded /dev/sdb # btrfs device add /dev/sdc /pub # btrfs device delete missing /pub # mount -o remount,degraded /dev/sdb
Il faut toujours exécuter les opérations dans cet ordre : remonter le filesystem en mode dégradé, ajouter le nouveau disque, supprimer le disque « missing ». Ceci permet de ne jamais avoir un volume comprenant moins de disques que ce que le type de raid permet.
Convertir un volume single en raid1¶
Par exemple, pour convertir le volume /dev/sdb monté dans /pub en raid1 avec /dev/sdc en plus :
# mkfs.btrfs /dev/sdc # btrfs device add /dev/sdc /pub # btrfs balance start -dconvert=raid1 -mconvert=raid1 /pub
La commande « balance » permet de redistribuer les données d'un volume BtrFs en fonction du type de raid.
Cette opération est similaire pour convertir en raid0, raid10, etc.
Pour plus d'informations¶
https://btrfs.wiki.kernel.org/
http://en.wikipedia.org/wiki/Btrfs
http://manpages.debian.net/cgi-bin/man.cgi?sektion=8&query=mkfs.btrfs&apropos=0&manpath=sid&locale=en
http://manpages.debian.net/cgi-bin/man.cgi?sektion=8&query=btrfs&apropos=0&manpath=sid&locale=en