Aller au contenu
Administration Linux medium

Découvrir et administrer Btrfs sous Linux

33 min de lecture

Le système de fichiers Btrfs (B-tree File System) équipe de plus en plus de systèmes Linux modernes. Il se distingue par ses fonctionnalités avancées : snapshots instantanés, compression transparente et gestion native de volumes multiples en RAID. Conçu pour les environnements dynamiques, Btrfs se présente comme une alternative moderne à ext4, avec une flexibilité bien supérieure, au prix d'une administration plus exigeante.

Dans ce guide, vous allez apprendre à créer, monter et administrer un système de fichiers Btrfs, en tirant parti de ses outils spécifiques et de ses capacités de tuning. Si vous n'avez pas encore lu le guide de choix d'un système de fichiers Linux, commencez par lui pour bien saisir les bases (blocs, journalisation, extents).

  • Créer un système de fichiers Btrfs sur un ou plusieurs disques
  • Monter des volumes et des sous-volumes, temporairement puis via /etc/fstab
  • Choisir les options de montage adaptées : compression, SSD, sécurité
  • Prendre des snapshots et les exporter avec btrfs send et btrfs receive
  • Surveiller l'intégrité avec scrub et réagir face à une corruption
  • Appliquer les bonnes pratiques : sous-volumes, quotas, nodatacow

Le système de fichiers Btrfs (B-tree File System) est né chez Oracle en 2007 avec un objectif clair : proposer un système moderne, fiable et adapté aux gros volumes. Il est intégré au noyau Linux depuis 2009 et plusieurs distributions l'ont adopté : openSUSE l'utilise par défaut pour la racine (avec snapshots automatiques), Fedora Workstation en a fait son système par défaut depuis la version 33. Contrairement à ext4, Btrfs n'est pas l'évolution d'un système existant, mais une refonte complète pensée pour les besoins actuels des administrateurs.

Le cœur de Btrfs repose sur le mécanisme Copy-on-Write (CoW) : au lieu de modifier les blocs en place, il écrit de nouveaux blocs à chaque changement, puis met à jour les métadonnées. Ce fonctionnement garantit une meilleure intégrité des données en cas de coupure brutale, permet des snapshots quasi instantanés et rend possible des fonctionnalités avancées comme la déduplication.

Ce principe a un coût en performance pour certains workloads qui réécrivent sans cesse les mêmes fichiers (bases de données, images de machines virtuelles), mais il permet des opérations qu'ext4 ne sait pas faire sans outils tiers.

Voici ce qui distingue Btrfs des systèmes de fichiers classiques. Chacune de ces fonctionnalités est intégrée au système lui-même : pas besoin d'empiler LVM, mdadm ou des outils tiers pour en profiter.

  • RAID natif : Btrfs gère les profils RAID 0, 1 et 10 sans LVM ni mdadm (les profils RAID 5/6 existent mais restent déconseillés, voir plus bas).
  • Compression transparente (zlib, lzo, zstd) : activée par une simple option de montage.
  • Checksums sur les données et les métadonnées : détection des corruptions silencieuses à la lecture.
  • Scrub : vérification d'intégrité de l'ensemble du volume, à lancer à la demande ou à planifier.
  • Sous-volumes : chaque sous-volume se gère comme un système de fichiers indépendant (montage, snapshot, quota).
  • Snapshots : capture instantanée et sans interruption d'un sous-volume.
  • Redimensionnement à chaud : on peut agrandir ou réduire un volume monté.
  • Quotas par sous-volume (qgroups).
  • Défragmentation en ligne avec btrfs filesystem defragment.

Sur le terrain, ces fonctionnalités se traduisent par des gains directs pour l'administrateur :

  • gain d'espace avec la compression transparente ;
  • sauvegardes rapides via les snapshots et btrfs send/btrfs receive ;
  • adapté aux conteneurs et aux environnements qui créent et détruisent beaucoup de données ;
  • fonctionnalités intégrées sans empiler des couches (RAID, LVM, outils de snapshot).

Aucune solution n'est parfaite, et Btrfs demande de connaître ses zones de fragilité avant de l'adopter en production :

  • Les profils RAID 5/6 sont considérés comme instables par le projet lui-même (problème dit du write hole) : ne les utilisez pas en production, préférez RAID 1 ou RAID 10.
  • Le CoW peut ralentir les écritures aléatoires intensives (bases de données, VM) et fragmente fortement ces fichiers.
  • La gestion de l'espace disque est moins intuitive qu'avec ext4 : df peut afficher des valeurs trompeuses, et un volume peut se retrouver « plein » alors qu'il reste de la place (métadonnées saturées).
  • L'administration demande d'apprendre une commande dédiée (btrfs) et ses sous-commandes, là où ext4 se contente des outils classiques.

Le choix d'un système de fichiers dépend du profil d'écriture et du besoin de fonctionnalités. Btrfs est particulièrement pertinent pour :

  • les serveurs de fichiers avec snapshots fréquents ;
  • les postes de développement qui manipulent beaucoup de conteneurs ;
  • les systèmes de sauvegarde, grâce à send/receive ;
  • les disques SSD, grâce à la compression qui réduit les écritures.

Btrfs allie flexibilité, intégrité et fonctionnalités avancées sans empilement de couches, mais il demande une prise en main plus rigoureuse qu'ext4. Voyons comment le créer proprement.

Avant de profiter des fonctionnalités avancées de Btrfs, il faut formater le support de stockage. Cette opération peut se faire sur un disque entier ou une partition. Btrfs n'a pas besoin de LVM : il gère directement les volumes multiples et le RAID.

On peut créer un système Btrfs sur :

  • un disque brut (/dev/sdb),
  • une partition (/dev/sdb1).

Pour lister les disques disponibles et repérer le bon périphérique :

Fenêtre de terminal
lsblk

S'il s'agit d'un nouveau disque, créez une table de partitions avec fdisk, parted ou gdisk :

Fenêtre de terminal
sudo fdisk /dev/sdb

Créez ensuite une partition comme /dev/sdb1, à formater avec Btrfs. Vérifiez qu'elle apparaît bien avec lsblk avant de continuer : formater le mauvais périphérique détruit ses données sans confirmation.

La commande de base est :

Fenêtre de terminal
sudo mkfs.btrfs /dev/sdb1

Quelques options utiles :

  • -L nom : attribue un label au système de fichiers ;
  • -d profil : définit le profil de stockage des données (single, raid1, etc.) ;
  • -m profil : définit le profil de stockage des métadonnées ;
  • -f : force le formatage, même si le périphérique contient déjà un système de fichiers.

Exemple complet :

Fenêtre de terminal
sudo mkfs.btrfs -L data_btrfs -m single -d single /dev/sdb1

Pour créer un volume sur plusieurs disques :

Fenêtre de terminal
sudo mkfs.btrfs -L pool_btrfs /dev/sdb1 /dev/sdc1

Btrfs assemble alors les disques dans un volume unique. Avec les versions récentes de btrfs-progs, les données sont réparties en single (concaténation, sans redondance) et les métadonnées en raid1 (mirroring). Pour obtenir une vraie redondance des données, demandez-la explicitement :

Fenêtre de terminal
sudo mkfs.btrfs -L pool_btrfs -d raid1 -m raid1 /dev/sdb1 /dev/sdc1

Avant même de monter le volume, vérifiez que le système de fichiers est bien créé et que les profils correspondent à ce que vous avez demandé :

Fenêtre de terminal
sudo btrfs filesystem show /dev/sdb1

La sortie doit afficher le label, l'UUID et la liste des périphériques membres. La répartition détaillée de l'espace (btrfs filesystem df, btrfs filesystem usage) ne sera consultable qu'une fois le volume monté.

Créer un système de fichiers Btrfs est rapide, mais les choix initiaux (profils RAID, nombre de disques) influencent fortement les performances et la fiabilité : mieux vaut les poser dès le formatage que de convertir après coup.

Une fois le système de fichiers Btrfs créé, il faut le monter pour l'utiliser. Le montage intègre la partition ou le volume dans l'arborescence du système, typiquement sous /mnt ou /srv. Btrfs étant orienté gestion de volumes et de sous-volumes, quelques spécificités s'appliquent par rapport à ext4.

Le montage manuel est la première étape naturelle : il permet de valider que le volume fonctionne avant de l'inscrire dans la configuration persistante. Trois commandes suffisent :

  1. Créer un point de montage :
Fenêtre de terminal
sudo mkdir -p /mnt/data
  1. Monter le système de fichiers :
Fenêtre de terminal
sudo mount /dev/sdb1 /mnt/data
  1. Vérifier que tout est en place :
Fenêtre de terminal
findmnt /mnt/data

ou :

Fenêtre de terminal
df -hT /mnt/data

La colonne type doit afficher btrfs. Ce montage est temporaire : il disparaît au prochain redémarrage.

Il est plus sûr de monter un volume Btrfs via son label ou son UUID, surtout si plusieurs disques sont présents : les noms /dev/sdX peuvent changer d'un démarrage à l'autre.

Pour trouver ces identifiants :

Fenêtre de terminal
sudo blkid /dev/sdb1

Exemples :

  • Monter par label :
Fenêtre de terminal
sudo mount -L data_btrfs /mnt/data
  • Monter par UUID (reprenez celui affiché par blkid) :
Fenêtre de terminal
sudo mount UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data

Pour rendre un montage persistant au redémarrage, ajoutez-le dans /etc/fstab (le fichier qui décrit les montages appliqués au démarrage). Exemple :

UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,compress=zstd 0 0

Explication :

  • UUID : identifiant stable du système de fichiers ;
  • /mnt/data : point de montage ;
  • btrfs : type de système de fichiers ;
  • defaults,compress=zstd : options (ici, compression activée) ;
  • 0 0 : pas de sauvegarde avec dump, pas de vérification fsck au démarrage (Btrfs n'utilise pas fsck).

Tester la configuration sans redémarrer :

Fenêtre de terminal
sudo mount -a
findmnt /mnt/data

Si mount -a renvoie une erreur, corrigez la ligne avant tout redémarrage : une entrée fstab invalide peut bloquer le démarrage du serveur.

Un sous-volume Btrfs est une arborescence interne du volume, qui se comporte comme un système de fichiers à part entière. Créez-en un :

Fenêtre de terminal
sudo btrfs subvolume create /mnt/data/@home

Vous pouvez ensuite monter ce sous-volume directement (plutôt que la racine du volume) :

Fenêtre de terminal
sudo mount -o subvol=@home /dev/sdb1 /home

Dans /etc/fstab, cela donne :

UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /home btrfs defaults,subvol=@home 0 0

Avec Btrfs, on raisonne en sous-volumes plutôt qu'en partitions : c'est un découpage plus souple, qui devient décisif pour les sauvegardes et les snapshots. Les options de montage permettent d'affiner encore le comportement de chaque montage.

Le système de fichiers Btrfs propose de nombreuses options de montage pour configurer finement son comportement : compression, défragmentation automatique, gestion des sous-volumes, ou encore optimisations pour SSD. Bien les connaître permet d'adapter le volume à son usage réel.

Ces quatre options couvrent l'essentiel du tuning d'un volume Btrfs. Les deux premières changent la façon dont les données sont écrites, les deux suivantes réduisent le travail inutile. Dans le doute, compress=zstd et noatime forment un point de départ sûr pour la plupart des usages.

  • compress=zstd | lzo | zlib Active la compression transparente des fichiers. Recommandé : zstd, qui allie rapidité et bon taux de compression.

    Exemple dans /etc/fstab :

    UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,compress=zstd 0 0
  • autodefrag Active la défragmentation automatique à l'écriture, utile pour les petits fichiers fréquemment modifiés (bases SQLite, navigateurs). À éviter sur les gros fichiers type images de VM.

    Exemple :

    UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,compress=zstd,autodefrag 0 0
  • noatime Empêche la mise à jour de la date d'accès des fichiers (atime), ce qui réduit les écritures. Particulièrement utile avec le CoW, où chaque mise à jour d'atime déclenche une écriture de métadonnées.

    Exemple :

    UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,noatime 0 0
  • space_cache=v2 Accélère les montages et allocations en maintenant un cache d'espace libre. C'est le comportement par défaut des noyaux récents : vous n'avez normalement pas à le préciser, mais vous le croiserez dans des configurations existantes.

Sur un SSD, l'enjeu n'est pas la vitesse brute mais la gestion du TRIM : informer le disque des blocs devenus libres pour préserver ses performances et sa durée de vie. Deux options entrent en jeu :

  • ssd Informe le système de fichiers qu'il tourne sur un SSD, ce qui ajuste la stratégie d'allocation. Btrfs détecte automatiquement la plupart des SSD : cette option est rarement nécessaire, et elle n'active pas le TRIM.

  • discard=async Active le TRIM en ligne (libération des blocs inutilisés côté SSD) de manière asynchrone, sans pénaliser les performances.

    Exemple :

    UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,ssd,discard=async 0 0

L'alternative, souvent préférable, est le TRIM périodique avec le timer systemd fstrim.timer, livré avec util-linux :

Fenêtre de terminal
sudo systemctl enable --now fstrim.timer
systemctl list-timers fstrim.timer

Vous pouvez aussi lancer un TRIM manuel pour vérifier que le volume le supporte :

Fenêtre de terminal
sudo fstrim -v /mnt/data

Ces options ne sont pas propres à Btrfs, mais elles font partie de tout montage bien durci :

  • nodev : interdit les fichiers de type périphérique sur le volume monté ;
  • nosuid : ignore les bits SUID/SGID, ce qui réduit la surface d'élévation de privilèges ;
  • noexec : interdit l'exécution de programmes depuis le volume (utile sur /tmp, /var/log, les disques externes).

Exemple combiné pour /tmp :

UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /tmp btrfs defaults,nodev,nosuid,noexec 0 0

Deux options désignent le sous-volume à monter. C'est par elles que passe tout schéma de type @/@home utilisé par les distributions qui installent leur racine sur Btrfs :

  • subvol=nom Monte un sous-volume spécifique au lieu de la racine du volume.

    Exemple :

    UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /home btrfs defaults,subvol=@home 0 0
  • subvolid=id Alternative par identifiant numérique du sous-volume, peu utilisée manuellement.

Pour les workloads qui réécrivent en permanence les mêmes blocs (bases de données, images de VM), le CoW dégrade les performances et fragmente les fichiers. L'option de montage nodatacow le désactive pour tout le volume, mais c'est rarement ce que l'on veut : le plus courant est de le désactiver par répertoire avec l'attribut chattr +C :

Fenêtre de terminal
sudo chattr +C /mnt/data/vm

L'attribut ne s'applique qu'aux fichiers créés après sa pose : posez-le sur un répertoire vide, avant d'y placer les fichiers. Vérifiez avec :

Fenêtre de terminal
lsattr -d /mnt/data/vm

Attention : désactiver le CoW désactive aussi les checksums et la compression sur ces fichiers. Vous échangez de l'intégrité contre de la performance, en connaissance de cause.

Ce tableau récapitule les options à connaître et les contextes où elles apportent un vrai gain :

OptionUtilité principaleRecommandé pour
compress=zstdRéduction de l'espace disqueTous les systèmes
autodefragRéduction de la fragmentationPetits fichiers modifiés souvent
noatimeRéduction des écritures inutilesSystèmes fortement sollicités
discard=asyncTRIM en ligneDisques SSD
nodev,nosuidRenforcement de la sécurité/tmp, /home, disques externes
subvol=@homeMontage d'un sous-volume spécifiqueSystèmes avec snapshots

Bien choisir ses options de montage, c'est garantir un volume Btrfs performant, stable et adapté à son usage. Reste à savoir quoi faire quand quelque chose se passe mal : c'est le rôle de btrfs check et de scrub.

Même si Btrfs intègre de nombreux mécanismes de détection d'erreurs, un système de fichiers reste vulnérable aux coupures d'alimentation, aux pannes matérielles et aux bugs. Il faut donc connaître les outils de vérification et de réparation, et surtout savoir dans quel ordre les utiliser : mal employés, ils peuvent aggraver une corruption.

btrfs check analyse la structure interne du système de fichiers (arbres, métadonnées, connectivité). Il s'utilise :

  • après un crash ou un arrêt brutal, si le volume refuse de monter ;
  • en cas de comportement anormal : fichiers manquants, erreurs répétées dans les journaux ;
  • pour une vérification manuelle ponctuelle, volume démonté.

Attention : btrfs check ne s'utilise que sur un système de fichiers démonté. Ne l'exécutez jamais sur un volume monté.

Par défaut, btrfs check travaille en lecture seule : il signale les erreurs sans rien toucher. C'est toujours la première étape :

Fenêtre de terminal
sudo btrfs check /dev/sdb1

Une sortie sans erreur signalée se termine par un résumé des octets vérifiés. Si des erreurs apparaissent, ne vous précipitez pas sur la réparation : commencez par sauvegarder ce qui peut l'être.

Le mode réparation existe, mais la documentation upstream est explicite : il est dangereux et ne doit pas être utilisé sans analyse préalable des erreurs détectées. Une réparation mal adaptée peut rendre un volume définitivement irrécupérable.

Fenêtre de terminal
sudo btrfs check --repair /dev/sdb1

Avant d'en arriver là, épuisez les options moins risquées :

  1. monter le volume en lecture seule et copier les données ailleurs ;
  2. tenter btrfs restore (extraction de fichiers depuis un volume non montable, sans le modifier) ;
  3. chercher le message d'erreur exact dans la documentation ou les listes de diffusion Btrfs.

N'utilisez --repair qu'en dernier recours, sur un volume dont les données sont déjà sauvegardées ou perdues de toute façon.

Contrairement à check, scrub travaille sur un volume monté et en service. Il lit chaque bloc, vérifie les checksums et corrige automatiquement les erreurs quand une copie saine existe (profils RAID 1/10, métadonnées en dup).

Lancer un scrub (il part en arrière-plan) :

Fenêtre de terminal
sudo btrfs scrub start /mnt/data

Suivre l'état d'avancement et le nombre d'erreurs trouvées :

Fenêtre de terminal
sudo btrfs scrub status /mnt/data

Un scrub planifié (mensuel, par exemple) est la meilleure défense contre les corruptions silencieuses : il détecte les blocs abîmés avant que vous n'en ayez besoin.

Si le volume qui refuse de monter est le système racine, la procédure passe par un support externe. L'ordre des opérations compte : on sauvegarde d'abord, on répare ensuite.

  1. Démarrer sur un live USB Linux avec le support Btrfs.
  2. Identifier la partition avec lsblk.
  3. Tenter un montage en lecture seule et copier les données :
Fenêtre de terminal
sudo mount -o ro /dev/sdb1 /mnt
  1. Si le montage échoue, vérifier sans modifier :
Fenêtre de terminal
sudo btrfs check /dev/sdb1
  1. En tout dernier recours seulement, une fois les données extraites ou perdues :
Fenêtre de terminal
sudo btrfs check --repair /dev/sdb1

Btrfs n'est pas un système de fichiers à formater puis oublier. Il offre une palette d'outils intégrés pour surveiller son état, gérer l'espace, défragmenter et ajuster ses paramètres selon l'usage. Voici comment garder un œil sur son bon fonctionnement au quotidien.

Pour lister les volumes Btrfs et leurs périphériques :

Fenêtre de terminal
sudo btrfs filesystem show

Pour afficher la répartition de l'espace entre données et métadonnées :

Fenêtre de terminal
sudo btrfs filesystem df /mnt/data

Exemple de sortie :

Data, single: total=10.00GiB, used=7.50GiB
Metadata, single: total=1.00GiB, used=512.00MiB
System, single: total=32.00MiB, used=16.00MiB

Cette séparation données / métadonnées est propre à Btrfs : chaque catégorie a son propre espace alloué, et l'une peut saturer avant l'autre. Pour une vue plus complète (espace alloué, non alloué, estimation de l'espace libre réel), préférez :

Fenêtre de terminal
sudo btrfs filesystem usage /mnt/data

C'est cette commande qu'il faut consulter quand df -h affiche des valeurs qui semblent incohérentes : avec le CoW, la compression et le RAID, le df classique ne raconte qu'une partie de l'histoire.

Le Copy-on-Write fragmente naturellement les fichiers modifiés en place. Pour analyser le nombre d'extents (fragments) d'un fichier :

Fenêtre de terminal
sudo filefrag -v /mnt/data/fichier

Pour défragmenter un répertoire récursivement :

Fenêtre de terminal
sudo btrfs filesystem defragment -r /mnt/data

L'option -czstd (ou -clzo, -czlib) applique la compression à la volée pendant la défragmentation, pratique pour compresser des données écrites avant l'activation de compress=zstd :

Fenêtre de terminal
sudo btrfs filesystem defragment -r -czstd /mnt/data

Piège à connaître : la défragmentation casse les liens partagés avec les snapshots et les copies reflink. Chaque fichier défragmenté redevient une copie indépendante, ce qui peut faire exploser l'espace utilisé sur un volume riche en snapshots. Vérifiez l'espace disponible avant et après avec btrfs filesystem usage.

Btrfs remonte ses erreurs dans les journaux du noyau. Deux commandes les font apparaître :

Fenêtre de terminal
sudo dmesg | grep -i btrfs
journalctl -k | grep -i btrfs

Btrfs tient aussi des compteurs d'erreurs par périphérique (erreurs d'écriture, de lecture, de checksum), précieux pour repérer un disque défaillant avant la panne :

Fenêtre de terminal
sudo btrfs device stats /mnt/data

Des compteurs qui augmentent d'un contrôle à l'autre signalent un disque à remplacer.

Un scrub mensuel détecte les corruptions silencieuses avant qu'elles ne deviennent des pertes de données. Avec cron, ajoutez une entrée dans /etc/crontab :

0 3 1 * * root btrfs scrub start /mnt/data

Vous pouvez aussi l'automatiser proprement avec un timer systemd, qui offre la journalisation intégrée. Dans les deux cas, contrôlez le résultat après coup :

Fenêtre de terminal
sudo btrfs scrub status /mnt/data

Btrfs permet d'agrandir ou de réduire un volume à chaud, c'est-à-dire pendant qu'il est monté (c'est même une obligation : la commande travaille sur le point de montage) :

  • Agrandir de 10 Gio :
Fenêtre de terminal
sudo btrfs filesystem resize +10G /mnt/data
  • Réduire de 5 Gio :
Fenêtre de terminal
sudo btrfs filesystem resize -5G /mnt/data
  • Fixer une taille absolue :
Fenêtre de terminal
sudo btrfs filesystem resize 100G /mnt/data

Vérifiez le résultat avec btrfs filesystem usage /mnt/data. Attention : redimensionner le système de fichiers ne redimensionne pas la partition sous-jacente, qui se gère séparément (parted, growpart).

Les quotas Btrfs (qgroups) limitent la consommation d'espace par sous-volume, très utile pour isoler /home, /var ou les répertoires de projets. Activez-les d'abord :

Fenêtre de terminal
sudo btrfs quota enable /mnt/data

Puis consultez l'utilisation par sous-volume :

Fenêtre de terminal
sudo btrfs qgroup show /mnt/data

Et fixez une limite sur un sous-volume donné :

Fenêtre de terminal
sudo btrfs qgroup limit 50G /mnt/data/@home

Sachez que les qgroups ajoutent un surcoût de calcul, surtout sur les volumes avec beaucoup de snapshots : n'activez les quotas que si vous en avez besoin.

L'un des atouts majeurs de Btrfs est la création de snapshots instantanés. Un snapshot est une copie figée d'un sous-volume à un moment donné, qui ne consomme de l'espace qu'au fur et à mesure des modifications (grâce au CoW). C'est l'outil idéal pour les sauvegardes, les tests et les retours arrière rapides.

Un snapshot se prend sur un sous-volume source. Si besoin, créez-en un :

Fenêtre de terminal
sudo btrfs subvolume create /mnt/data/@home

Pour créer un snapshot en lecture/écriture :

Fenêtre de terminal
sudo btrfs subvolume snapshot /mnt/data/@home /mnt/data/@home_snap

Pour un snapshot en lecture seule (obligatoire pour l'export avec btrfs send, et idéal pour une sauvegarde) :

Fenêtre de terminal
sudo btrfs subvolume snapshot -r /mnt/data/@home /mnt/data/@home_ro_snap

Un snapshot est un sous-volume comme un autre : la même commande liste les deux et permet de vérifier que la création a fonctionné :

Fenêtre de terminal
sudo btrfs subvolume list /mnt/data

Chaque ligne affiche l'identifiant et le chemin du sous-volume. Chaque snapshot est indépendant : vous pouvez le monter, l'exporter ou le supprimer sans toucher à la source.

Pour consulter le contenu d'un snapshot (récupérer un fichier supprimé, par exemple), montez-le comme n'importe quel sous-volume :

Fenêtre de terminal
sudo mkdir -p /mnt/snap_home
sudo mount -o subvol=@home_ro_snap /dev/sdb1 /mnt/snap_home

Vérifiez avec findmnt /mnt/snap_home que le montage est actif, puis copiez les fichiers voulus.

Les snapshots s'accumulent vite et retiennent de l'espace disque : les anciens blocs ne sont libérés que quand plus aucun snapshot ne les référence. Supprimez ceux qui ne servent plus :

Fenêtre de terminal
sudo btrfs subvolume delete /mnt/data/@home_snap

L'opération est irréversible : relistez les sous-volumes après coup pour confirmer la suppression.

Le duo send/receive exporte un snapshot en lecture seule sous forme de flux, à stocker dans un fichier ou à envoyer vers un autre volume Btrfs (y compris via SSH). C'est la brique de base des sauvegardes Btrfs.

Exporter un snapshot vers un fichier :

Fenêtre de terminal
sudo btrfs send /mnt/data/@home_ro_snap > backup-home.btrfs

Le réimporter sur un autre volume Btrfs monté :

Fenêtre de terminal
sudo btrfs receive /mnt/backup < backup-home.btrfs

Pour des sauvegardes incrémentales, l'option -p n'envoie que la différence entre deux snapshots :

Fenêtre de terminal
sudo btrfs send -p /mnt/data/@home_ro_snap /mnt/data/@home_ro_snap2 > diff.btrfs

Les snapshots changent la façon de travailler au quotidien : toute opération risquée peut être précédée d'un point de retour qui coûte quelques secondes. Exemples typiques :

  • avant une mise à jour système, snapshot en lecture seule de la racine ;
  • sauvegarde quotidienne de /home combinée à send -p vers un disque externe ;
  • avant un test de configuration ou l'exécution d'un script douteux ;
  • retour rapide à l'état précédent en quelques secondes, sans restauration complète.

Même si Btrfs est un système de fichiers moderne et riche en fonctionnalités, sa configuration initiale et sa gestion au quotidien font toute la différence. Voici les pratiques qui améliorent sa fiabilité, ses performances et sa résilience sur le long terme.

Plutôt que de tout stocker à la racine du volume, créez des sous-volumes pour /home, /var, /srv, etc. Ce découpage ne coûte rien à la création et vous ouvre toutes les fonctionnalités par périmètre :

Fenêtre de terminal
sudo btrfs subvolume create /mnt/data/@home
sudo btrfs subvolume create /mnt/data/@var

Avantages :

  • monter indépendamment chaque répertoire, avec ses propres options ;
  • créer des snapshots ciblés (snapshoter /home sans embarquer /var) ;
  • simplifier les sauvegardes incrémentales avec btrfs send -p.

La compression réduit l'espace disque utilisé et diminue souvent les I/O (moins d'octets écrits). Ajoutez l'option compress=zstd dans /etc/fstab :

UUID=0b3f2a17-6f4d-4c8a-9a6e-3d2f1e5c7b90 /mnt/data btrfs defaults,compress=zstd 0 0

Elle ne s'applique qu'aux nouvelles écritures. Pour recompresser les fichiers existants :

Fenêtre de terminal
sudo btrfs filesystem defragment -r -czstd /mnt/data

Rappel du piège vu plus haut : sur un volume avec des snapshots, cette défragmentation duplique les données partagées.

Le scrub est votre détecteur de corruptions silencieuses. Lancé régulièrement (mensuellement, par exemple, via cron ou un timer systemd), il vérifie tous les checksums pendant que le volume reste en service :

Fenêtre de terminal
sudo btrfs scrub start /mnt/data

Consultez ensuite btrfs scrub status /mnt/data : un compteur d'erreurs non nul mérite une investigation immédiate (journaux noyau, btrfs device stats).

Pour les bases de données et les images de VM, le Copy-on-Write nuit aux performances et fragmente les fichiers. Désactivez-le sur un répertoire dédié, avant d'y créer les fichiers :

Fenêtre de terminal
sudo mkdir /mnt/data/vm
sudo chattr +C /mnt/data/vm
lsattr -d /mnt/data/vm

La sortie de lsattr doit afficher l'attribut C. Gardez en tête la contrepartie : plus de checksums ni de compression sur ces fichiers.

Sur un volume partagé entre plusieurs usages, les qgroups évitent qu'un sous-volume affame les autres :

Fenêtre de terminal
sudo btrfs quota enable /mnt/data
sudo btrfs qgroup show /mnt/data

Fixez ensuite des limites par sous-volume avec btrfs qgroup limit, et gardez à l'esprit leur surcoût sur les volumes très snapshotés.

Un volume Btrfs bien administré est un volume dont la configuration se retrouve en cas de sinistre. Notez dans votre documentation d'infrastructure :

  • UUID et labels des volumes ;
  • sous-volumes créés et leur rôle ;
  • options de montage (compress, noatime, etc.) ;
  • politique de snapshots (outil, fréquence, rétention) ;
  • quotas définis.

Cela fait gagner un temps précieux lors des restaurations et des migrations.

Btrfs signale ses problèmes dans les journaux du noyau bien avant la panne franche. Prenez l'habitude de contrôler :

Fenêtre de terminal
journalctl -k | grep -i btrfs
sudo btrfs device stats /mnt/data

Vous repérerez ainsi à temps les débuts de corruption ou un disque dont les compteurs d'erreurs grimpent.

Les problèmes Btrfs les plus fréquents ont des causes bien identifiées, et souvent une solution simple, à condition de ne pas dégainer --repair en premier réflexe. Ce tableau couvre les symptômes les plus courants :

SymptômeCause probableSolution
No space left on device alors que df montre de l'espace libreEspace entièrement alloué aux chunks, métadonnées saturéesDiagnostiquer avec btrfs filesystem usage, puis rééquilibrer : sudo btrfs balance start -dusage=50 /mnt/data
df -h affiche des valeurs incohérentesCoW, compression et RAID faussent le calcul classiqueUtiliser btrfs filesystem usage comme référence
Volume qui refuse de monter après un crashMétadonnées endommagéesMonter en lecture seule (mount -o ro), sauvegarder, puis btrfs check sans --repair
Écritures lentes sur une VM ou une base de donnéesFragmentation due au CoWchattr +C sur un répertoire dédié (nouveaux fichiers), éventuellement autodefrag
btrfs send échoue avec une erreur de sous-volumeLe snapshot n'est pas en lecture seuleRecréer le snapshot avec btrfs subvolume snapshot -r
L'espace ne se libère pas après suppression de fichiersDes snapshots référencent encore les blocsLister (btrfs subvolume list) et supprimer les snapshots obsolètes

Pour tout diagnostic, commencez par ces trois commandes qui donnent l'état réel du volume :

Fenêtre de terminal
sudo btrfs filesystem usage /mnt/data
sudo btrfs device stats /mnt/data
journalctl -k | grep -i btrfs

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • Btrfs repose sur le Copy-on-Write : intégrité renforcée, snapshots instantanés, mais fragmentation sur les fichiers réécrits en place.

  • Raisonnez en sous-volumes dès la création : ce sont eux qui portent les snapshots, les quotas et les montages indépendants.

  • La compression zstd est un gain quasi gratuit : activez-la par défaut via compress=zstd dans /etc/fstab.

  • df -h ment sur Btrfs : la référence est btrfs filesystem usage.

  • Un scrub planifié détecte les corruptions silencieuses ; btrfs device stats surveille la santé des disques.

  • btrfs check --repair est dangereux et documenté comme tel en amont : lecture seule d'abord, sauvegarde ensuite, réparation en dernier recours.

  • Les profils RAID 5/6 restent instables : en production, limitez-vous à RAID 1 ou RAID 10.

  • Pour les VM et bases de données, désactivez le CoW par répertoire (chattr +C), en acceptant la perte des checksums.

  • 10 questions aléatoires issues de la banque de questions,

  • 5 minutes pour répondre,

  • 80 % requis pour réussir.

Si vous maîtrisez ces questions, vous êtes prêt à administrer un volume Btrfs en environnement réel, snapshots et scrub compris.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn