Aller au contenu principal

Btrfs, meilleur système de fichiers ?

Btrfs est considéré par certains comme le système de fichiers du futur pour Linux. Il offre en effet des fonctionnalités intéressantes, comme nous le verrons dans cet article.

Son nom provient de l'utilisation des B-tree, mais certains préfèrent l'appeler butter FS ou better FS, d'où le titre de cet article.

Premiers tests

SysNux a commencé à utiliser Btrfs en 2009, sur un ultra portable Asus Eee-Pc. Ces petits portables sous Linux avaient un disque relativement petit de 4 Go. La fonctionnalité Btrfs intéressante dans ce cas est la compression. Cela a permis l'installation d'un système Linux beaucoup plus complet que la version livrée de base.

En 2009, Btrfs était considéré comme expérimental, néanmoins aucun problème n'a été rencontré.

Systèmes embarqués

Une des caractéristiques fondamentales de Btrfs est d'utiliser la copie sur écriture (Copy-On-Write - COW), c'est à dire que les données mises à jour sont d'abord écrites à un endroit libre du disque, puis l'emplacement initial est libéré. Ainsi, les données initiales existent toujours sur le disque, et en cas de panne (coupure d'électricité par exemple), le système est beaucoup plus résilient : au pire, on perd quelques secondes de données, mais le système de fichiers n'est pas cassé, on peut redémarrer immédiatement. C'est une caractéristique très intéressante pour les systèmes embarqués comme les routeurs ou systèmes de téléphonie : une étude de Fujitsu en 2014 a confirmé ce point.

SysNux a commencé à utiliser Brtfs pour ce type d'installation en 2010, sans regret.

Fonctions avancées

Btrfs intègre des fonctions qui permettent de combiner plusieurs disques ou partitions (RAID) : il supporte les modes RAID0, RAID1, RAID10, et, de manière plus expérimentale, RAID5 et RAID6.

Btrfs permet aussi de diviser le système de fichier en sous-volumes.

Le serveur principal de SysNux utilisait traditionnellement pour son stockage principal deux disques configurés en RAID1 avec Linux MD, et le gestionnaire de volumes LVM. (Le système est installé sur un SSD.)

Fin 2015, un des disques a commencé a montré des signes de faiblesse : la taille devenant aussi un peu juste, deux nouveaux disques ont été installés. Décision a alors été prise de basculer entièrement sur Btrfs, et d'utiliser une partition du SSD (sda4) comme cache, grâce à bcache.

Ci-dessous, la première commande associe deux périphériques de cache (bcache0 et bcache1) aux nouveaux disques (sdd et sde) ; ensuite, on crée le système de fichiers btrfs, avec les données et les méta-données en miroir (RAID1) :

[jdg@tiare ~]$ sudo make-bcache --writeback -B /dev/sd[de] -C /dev/sda4
[jdg@tiare ~]$ sudo mkfs.btrfs --nodesize 64K --data raid1 --metadata raid1 /dev/bcache0 /dev/bcache1 

On peut ensuite monter le nouveau système de fichiers, copier les données, et vérifier que le RAID1 est bien actif :

[jdg@tiare ~]$ sudo btrfs fi usage /home/jdg/
Overall:
    Device size:                   3.64TiB
    Device allocated:              2.15TiB
    Device unallocated:            1.49TiB
    Device missing:                  0.00B
    Used:                          1.95TiB
    Free (estimated):            859.97GiB      (min: 859.97GiB)
    Data ratio:                       2.00
    Metadata ratio:                   2.00
    Global reserve:              512.00MiB      (used: 0.00B)

Data,RAID1: Size:1.07TiB, Used:998.04GiB
   /dev/bcache0    1.07TiB
   /dev/bcache1    1.07TiB

Metadata,RAID1: Size:5.00GiB, Used:2.46GiB
   /dev/bcache0    5.00GiB
   /dev/bcache1    5.00GiB

System,RAID1: Size:8.00MiB, Used:256.00KiB
   /dev/bcache0    8.00MiB
   /dev/bcache1    8.00MiB

Unallocated:
   /dev/bcache0  763.01GiB
   /dev/bcache1  763.01GiB

Tout est correct !

Puis on peut puis créer les sous-volumes comme nécessaire, par exemple un sous-volume par utilisateur, un pour la base de données PostgreSQL, un pour les images de machines virtuelles :

[jdg@tiare ~]$ sudo btrfs sub list /home/jdg/
Mot de passe [sudo] de jdg :
ID 1059 gen 329947 top level 5 path Partage
ID 1062 gen 329949 top level 5 path SysNux
ID 1073 gen 329986 top level 5 path jdg
ID 1074 gen 329965 top level 5 path cathy
ID 1075 gen 329945 top level 5 path michael
ID 1076 gen 329950 top level 5 path vaiana
ID 1131 gen 329986 top level 5 path pgsql
ID 1136 gen 329952 top level 5 path images-vm
ID 1292 gen 329954 top level 5 path Snapshots
ID 3651 gen 329196 top level 1073 path Téléchargement

Conclusion

Ce premier article montre que Btrfs n'est pas qu'un système de fichiers : ses fonctions RAID et gestionnaire de volume remplacent les sous-systèmes MD et LVM de Linux. On verra dans un prochain article comment utiliser d'autres fonctionnalités pour réaliser efficacement des sauvegardes.

À noter que Btrfs est relativement jeune pour un système de fichiers : même si SysNux n'a jamais perdu le moindre fichier à cause de Btrfs, de bonnes sauvegardes sont indispensables !