Aller au contenu

Systeme de fichiers Btrfs

Mise à jour :

Le système de fichiers Btrfs (B-tree File System) est un choix de plus en plus répandu sur les systèmes Linux modernes. Il se distingue par ses fonctionnalités avancées comme les snapshots, la compression transparente, et la gestion native de volumes en RAID. Conçu pour répondre aux besoins des environnements dynamiques et des grandes infrastructures, Btrfs vise à remplacer ext4 tout en offrant une flexibilité bien supérieure.

Dans ce guide, on va 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 tu n’as pas encore lu le guide d’introduction aux systèmes de fichiers Linux, je te recommande de le faire pour bien saisir les bases (blocs, journalisation, extents…).

Kezako Btrfs ?

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 désormais intégré dans le noyau Linux et soutenu par plusieurs distributions comme openSUSE, Fedora et Ubuntu (pour certains usages). Contrairement à ext4, Btrfs n’est pas une évolution d’un système existant, mais une refonte complète pensée pour les besoins actuels des administrateurs.

Un système Copy-on-Write

Le cœur de Btrfs repose sur le mécanisme Copy-on-Write (CoW) : au lieu de modifier directement les blocs, il en crée de nouveaux à chaque changement. Ce fonctionnement garantit une meilleure intégrité des données, permet des snapshots ultra-rapides et rend possible des fonctionnalités avancées comme la déduplication.

Ce principe a un coût en performance pour certains workloads (bases de données, VM…), mais il permet des opérations qu’ext4 ne sait pas faire sans outils tiers.

Fonctionnalités techniques

Voici ce qui distingue Btrfs des autres systèmes de fichiers :

  • RAID natif : Btrfs gère le RAID 0, 1, 10 (et expérimentalement RAID 5/6) sans LVM ou mdadm.

  • Compression transparente (zlib, lzo, zstd) : active au montage.

  • Défragmentation en ligne avec btrfs filesystem defragment.

  • Checksum sur les données et métadonnées : détection des corruptions silencieuses.

  • Balayage automatique (scrub) : vérifie régulièrement l’intégrité du disque.

  • Subvolumes : chaque sous-volume peut être géré comme un FS indépendant.

  • Redimensionnement à chaud : on peut agrandir ou réduire le FS monté.

  • Support natif des quotas par sous-volume.

  • Snapshots : capture instantanée et sans interruption d’un sous-volume.

Avantages concrets

  • Gain d’espace avec la compression automatique,
  • Sauvegardes rapides via les snapshots et btrfs send/receive,
  • Adapté aux containers et aux environnements dynamiques,
  • Fonctionnalités intégrées sans besoin d’empiler des couches (RAID, LVM…).

Inconvénients à connaître

Aucune solution n’est parfaite. Voici les principales limites actuelles :

  • Les modes RAID 5/6 sont toujours expérimentaux (bugs non corrigés),
  • Le CoW peut ralentir certaines écritures séquentielles intensives,
  • Moins robuste qu’ext4 pour les systèmes critiques sans tuning adapté,
  • Outils d’administration encore en évolution, moins nombreux que pour ext4.

Pour quels usages ?

Btrfs est idéal pour :

  • les serveurs de fichiers avec snapshots fréquents,
  • les postes de développement avec plusieurs containers,
  • les systèmes de sauvegarde,
  • les disques SSD, grâce à la compression et au TRIM.

Btrfs, c’est un système de fichiers qui allie flexibilité, intégrité, et fonctionnalités avancées sans nécessiter d’empilements complexes. Mais il demande une prise en main plus rigoureuse qu’ext4. Prêt à le mettre en place ? Voyons comment le créer proprement.

Création d’un système de fichiers Btrfs

Avant de profiter des fonctionnalités avancées de Btrfs, il faut d’abord formater le support de stockage avec le bon système de fichiers. 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.

Préparer le support de stockage

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

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

Pour lister les disques disponibles :

Terminal window
lsblk

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

Terminal window
sudo fdisk /dev/sdb

Ensuite, on crée une partition comme /dev/sdb1, à formater avec Btrfs.

Formater en Btrfs avec mkfs.btrfs

La commande de base est :

Terminal window
sudo mkfs.btrfs /dev/sdb1

Quelques options utiles :

  • -L nom : attribue un label au système de fichiers,
  • -d type : définit le mode de gestion des données (single, raid1, etc.),
  • -m type : définit le mode de gestion des métadonnées,
  • -f : force le formatage, même si le disque est non vide.

Exemple complet :

Terminal window
sudo mkfs.btrfs -L data_btrfs -m single -d single /dev/sdb1

Pour plusieurs disques :

Terminal window
sudo mkfs.btrfs -L pool_btrfs /dev/sdb1 /dev/sdc1

Ici, Btrfs les assemble dans un volume unique avec gestion intégrée (comme un RAID 0 par défaut).

Vérification post-création

Pour afficher les infos sur le nouveau FS :

Terminal window
sudo btrfs filesystem show

Pour voir l’espace disponible et la structure du système :

Terminal window
sudo btrfs filesystem df /mnt

Créer un système de fichiers Btrfs, c’est rapide, mais les choix initiaux (compression, mode RAID, nombre de disques) influencent fortement les performances et la fiabilité. On passe maintenant à l’étape suivante : le montage.

Montage d’un système de fichiers Btrfs

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

Monter temporairement un système Btrfs

  1. Créer un point de montage :
Terminal window
sudo mkdir -p /mnt/data
  1. Monter le système de fichiers :
Terminal window
sudo mount /dev/sdb1 /mnt/data
  1. Vérifier que tout est en place :
Terminal window
mount | grep btrfs

ou :

Terminal window
df -hT /mnt/data

Ce montage est temporaire : il disparaît au prochain redémarrage.

Monter par label ou UUID

Il est plus sûr de monter un volume Btrfs via son label ou son UUID, surtout si plusieurs disques sont présents.

Pour trouver ces identifiants :

Terminal window
sudo blkid

Exemples :

  • Monter par label :
Terminal window
sudo mount -L data_btrfs /mnt/data
  • Monter par UUID :
Terminal window
sudo mount UUID=abcd-1234 /mnt/data

Montage automatique avec /etc/fstab

Pour rendre un montage persistant, on l’ajoute dans /etc/fstab. Exemple :

UUID=abcd-1234 /mnt/data btrfs defaults,compress=zstd 0 0

Explication :

  • UUID : identifiant stable du système,
  • /mnt/data : point de montage,
  • btrfs : type de FS,
  • defaults,compress=zstd : options (ici, compression activée),
  • 0 0 : pas de sauvegarde avec dump, pas de vérification avec fsck.

Tester la configuration sans redémarrer :

Terminal window
sudo mount -a

Spécificité : monter un sous-volume

Btrfs permet de monter un sous-volume spécifique (plutôt que la racine). Exemple :

Terminal window
sudo mount -o subvol=@home /dev/sdb1 /home

Dans /etc/fstab, cela donne :

UUID=abcd-1234 /home btrfs defaults,subvol=@home 0 0

Créer un sous-volume :

Terminal window
sudo btrfs subvolume create /mnt/data/@home

Avec Btrfs, on pense souvent en sous-volumes plutôt qu’en partitions : c’est un paradigme plus souple, surtout pour les sauvegardes et les snapshots. On verra dans le chapitre suivant les options de montage spécifiques à Btrfs pour affiner son comportement.

Options de montage spécifiques à Btrfs

Le système de fichiers Btrfs propose de nombreuses options de montage permettant de 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 FS à son usage réel et d’en tirer les meilleures performances.

Options de performance

  • 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=abcd-1234 /mnt/data btrfs defaults,compress=zstd 0 0
  • autodefrag Active la défragmentation automatique à l’écriture, utile pour les fichiers fréquemment modifiés (bases SQLite, VMs).

    Exemple :

    UUID=abcd-1234 /mnt/data btrfs defaults,compress=zstd,autodefrag 0 0
  • noatime Empêche la mise à jour du champ d’accès des fichiers (atime), ce qui réduit les écritures.

    Exemple :

    UUID=abcd-1234 /mnt/data btrfs defaults,noatime 0 0
  • space_cache=v2 Accélère les montages successifs en stockant un cache d’espace libre. v2 est recommandé pour les nouveaux systèmes.

Options pour SSD

  • ssd Informe le FS qu’il est sur un disque SSD, ce qui active des optimisations spécifiques (alignement, TRIM…).

  • discard Active la commande TRIM en ligne pour libérer les blocs inutilisés.

    Exemple :

    UUID=abcd-1234 /mnt/data btrfs defaults,ssd,discard 0 0

Ou, plus efficacement, déclencher TRIM périodiquement via cron :

Terminal window
sudo fstrim -v /mnt/data

Sécurité et contrôle d’accès

  • nodev : interdit les fichiers de type périphérique sur la partition montée.
  • nosuid : empêche les bits SUID/SGID, renforçant la sécurité.
  • noexec : interdit l’exécution de programmes sur la partition (utile sur /tmp, /var/log, etc.).

Exemple combiné pour /tmp :

UUID=abcd-1234 /tmp btrfs defaults,nodev,nosuid,noexec 0 0

Gestion de sous-volumes

  • subvol=nom Permet de monter un sous-volume spécifique.

    Exemple :

    UUID=abcd-1234 /home btrfs defaults,subvol=@home 0 0
  • subvolid=id Alternative par identifiant du sous-volume, peu utilisée manuellement.

Autres options utiles

  • nodatacow Désactive le mécanisme Copy-on-Write pour certains workloads spécifiques (bases de données, VM). À utiliser avec précaution, car il désactive aussi la journalisation.

    Il faut le définir au moment de la création du fichier ou répertoire avec l’attribut chattr :

    Terminal window
    sudo chattr +C /mnt/data/vm

Résumé des options courantes

OptionUtilité principaleRecommandé pour
compress=zstdRéduction de l’espace disqueTous les systèmes
autodefragRéduction de la fragmentationFichiers modifiés fréquemment
noatimeRéduction des écritures inutilesSystèmes fortement sollicités
ssd, discardOptimisation pour SSDDisques 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 système Btrfs performant, stable et adapté à son usage. Dans le chapitre suivant, on verra comment vérifier et réparer un système Btrfs avec les outils btrfs check et scrub.

Vérification et réparation avec btrfs check

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, pannes matérielles ou bugs. Il est donc essentiel de connaître les outils permettant de vérifier et réparer un système Btrfs. Les commandes clés sont btrfs check, btrfs scrub et btrfs device.

Quand utiliser btrfs check ?

  • Après un crash du système ou un redémarrage brutal,
  • En cas de comportement anormal : fichiers manquants, montages impossibles,
  • Pour une vérification manuelle périodique (rare mais possible),
  • Si le système refuse de monter en raison d’une corruption détectée.

Attention : btrfs check ne s’utilise que sur un système de fichiers démonté. Ne jamais l’exécuter sur une partition montée.

Vérification d’un système Btrfs

Pour vérifier un système sans le réparer :

Terminal window
sudo btrfs check /dev/sdb1

Cela analyse la structure du système de fichiers et signale les erreurs détectées.

Réparation avec --repair

Si des erreurs sont signalées et que le système ne peut être monté, on peut tenter une réparation :

Terminal window
sudo btrfs check --repair /dev/sdb1

Important : cette commande est destructive et à utiliser en dernier recours. Il est fortement conseillé de faire une sauvegarde avant.

Scrub : vérification des blocs en ligne

Pour vérifier les blocs de données pendant que le système est monté, on utilise scrub. Ce processus lit chaque bloc, vérifie les checksums, et tente de corriger les erreurs en utilisant les redondances (RAID).

Lancer un scrub :

Terminal window
sudo btrfs scrub start /mnt/data

Suivre l’état d’avancement :

Terminal window
sudo btrfs scrub status /mnt/data

Planifier un scrub régulier (par exemple avec cron) est une bonne pratique pour détecter les erreurs silencieuses.

Récupération d’un système corrompu

  1. Démarrer sur un live CD Linux avec support Btrfs.
  2. Identifier la partition avec lsblk.
  3. Vérifier ou réparer :
Terminal window
sudo btrfs check /dev/sdb1
sudo btrfs check --repair /dev/sdb1 # en dernier recours
  1. Monter avec des options minimales ou en lecture seule si nécessaire :
Terminal window
sudo mount -o ro /dev/sdb1 /mnt

Surveillance et tuning du système de fichiers Btrfs

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

Afficher les informations du système de fichiers

Pour voir les volumes Btrfs montés :

Terminal window
sudo btrfs filesystem show

Pour afficher l’utilisation réelle de l’espace :

Terminal window
sudo btrfs filesystem df /mnt/data

Exemple de sortie :

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

Cela montre que les métadonnées et les données sont gérées séparément.

Analyser et défragmenter

Btrfs fragmente les fichiers, surtout quand le Copy-on-Write est actif. Pour analyser le taux de fragmentation :

Terminal window
sudo filefrag -v /mnt/data/fichier

Pour défragmenter un fichier ou un répertoire :

Terminal window
sudo btrfs filesystem defragment -r /mnt/data

Ajouter -clzo ou -czstd applique la compression à la volée pendant la défragmentation :

Terminal window
sudo btrfs filesystem defragment -r -czstd /mnt/data

Observer les erreurs et journaux

Btrfs logge ses erreurs dans le noyau. Pour les consulter :

Terminal window
dmesg | grep btrfs

Ou avec journalctl :

Terminal window
journalctl -k | grep btrfs

Suivi automatique avec scrub

Lancer un scrub régulier est une bonne habitude pour détecter les erreurs silencieuses :

Terminal window
sudo btrfs scrub start -Bd /mnt/data

Option -Bd = bloquant (attend la fin), verbeux.

Planifier un scrub mensuel :

Terminal window
echo "0 3 1 * * root btrfs scrub start -Bd /mnt/data" | sudo tee -a /etc/crontab

Redimensionner un système de fichiers

Btrfs permet d’agrandir ou réduire l’espace à chaud (si monté) :

  • Agrandir :
Terminal window
sudo btrfs filesystem resize +10G /mnt/data
  • Réduire :
Terminal window
sudo btrfs filesystem resize -5G /mnt/data
  • Taille absolue :
Terminal window
sudo btrfs filesystem resize 100G /mnt/data

Gestion des quotas

Activer les quotas Btrfs :

Terminal window
sudo btrfs quota enable /mnt/data

Voir l’utilisation par sous-volume :

Terminal window
sudo btrfs qgroup show /mnt/data

On peut ainsi fixer des limites d’usage par sous-volume, très utile pour isoler /home, /var, etc.

Snapshots avec Btrfs

L’un des atouts majeurs de Btrfs, c’est la possibilité de créer des snapshots en un clin d’œil. Un snapshot est une copie instantanée d’un sous-volume à un moment donné, qui ne prend de l’espace que lorsqu’il y a des modifications. C’est l’outil idéal pour les sauvegardes, les tests, ou les restaurations rapides.

Créer un snapshot

Avant tout, assure-toi d’avoir un sous-volume source. Exemple :

Terminal window
sudo btrfs subvolume create /mnt/data/@home

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

Terminal window
sudo btrfs subvolume snapshot /mnt/data/@home /mnt/data/@home_snap

Pour un snapshot en lecture seule (idéal pour une sauvegarde) :

Terminal window
sudo btrfs subvolume snapshot -r /mnt/data/@home /mnt/data/@home_ro_snapshot

Lister les snapshots existants

Pour voir tous les sous-volumes (y compris les snapshots) :

Terminal window
sudo btrfs subvolume list /mnt/data

Chaque snapshot est un sous-volume indépendant, que tu peux monter, sauvegarder ou supprimer.

Monter un snapshot

Tu peux monter un snapshot comme n’importe quel sous-volume :

Terminal window
sudo mount -o subvol=@home_ro_snapshot /dev/sdb1 /mnt/snap_home

Supprimer un snapshot

Attention, cette opération est irréversible. Pour supprimer un snapshot :

Terminal window
sudo btrfs subvolume delete /mnt/data/@home_snap

Utiliser btrfs send et receive pour sauvegarder

Tu peux exporter un snapshot pour le transférer ou le sauvegarder :

Terminal window
sudo btrfs send /mnt/data/@home_ro_snapshot > backup-home.btrfs

Et le réimporter ailleurs :

Terminal window
sudo btrfs receive /mnt/backup < backup-home.btrfs

Idéal pour des sauvegardes différentielles, avec btrfs send -p.


Cas d’usage pratiques

  • Avant une mise à jour système : snapshot -r /
  • Pour un backup quotidien de /home,
  • Avant un test de configuration ou un script,
  • Pour un retour rapide à l’état précédent (restauration en quelques secondes).

Bonnes pratiques spécifiques à Btrfs

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

1. Utiliser les sous-volumes dès le départ

Plutôt que de tout stocker dans la racine du FS, crée des sous-volumes pour /home, /var, /srv, etc.

Exemple :

Terminal window
sudo btrfs subvolume create /mnt/data/@home
sudo btrfs subvolume create /mnt/data/@var

Avantages :

  • Permet de monter indépendamment chaque répertoire,
  • Facilite la création de snapshots ciblés,
  • Simplifie les sauvegardes incrémentales avec btrfs send.

2. Activer la compression transparente

La compression réduit l’espace disque utilisé et améliore les performances (moins d’I/O).

Ajoute l’option compress=zstd dans /etc/fstab :

UUID=abcd-1234 /mnt/data btrfs defaults,compress=zstd 0 0

Recompresse les anciens fichiers :

Terminal window
sudo btrfs filesystem defragment -r -czstd /mnt/data

3. Planifier un scrub régulier

Le scrub détecte les erreurs de données en arrière-plan. Lance-le régulièrement pour éviter les surprises :

Terminal window
sudo btrfs scrub start -Bd /mnt/data

Tu peux aussi l’automatiser via cron ou un timer systemd.

4. Isoler les workloads lourds avec nodatacow

Pour certains cas (bases de données, VMs), le Copy-on-Write peut nuire aux performances. Utilise alors nodatacow :

  1. Crée un répertoire dédié :
Terminal window
mkdir /mnt/data/vm
  1. Désactive le CoW avec chattr :
Terminal window
sudo chattr +C /mnt/data/vm
  1. Monte ce répertoire sur un sous-volume si besoin.

Attention : nodatacow désactive aussi les checksums.

5. Activer et surveiller les quotas

Les groupes de quotas permettent de contrôler la consommation de chaque sous-volume :

Terminal window
sudo btrfs quota enable /mnt/data
sudo btrfs qgroup show /mnt/data

Tu peux aussi fixer une limite par sous-volume (limit).

6. Documenter la configuration

Note les éléments suivants dans un fichier (/etc/btrfs-setup.txt, par exemple) :

  • UUID et labels,
  • Sous-volumes créés,
  • Options de montage (compress, autodefrag, etc.),
  • Politique de snapshots (script, fréquence),
  • Quotas définis.

Cela aide énormément lors des restaurations ou migrations.

7. Vérifier régulièrement les logs système

Btrfs journalise dans dmesg et journalctl. Vérifie régulièrement :

Terminal window
dmesg | grep btrfs
journalctl -k | grep btrfs

Tu pourras ainsi repérer à temps les débuts de corruption ou de déséquilibres RAID.

Contrôle de connaissances

Tu as lu tout le guide sur Btrfs ? Parfait ! C’est maintenant le moment de vérifier ce que tu as retenu. Ce petit contrôle de connaissances te permet de tester ta compréhension des concepts clés : création, montage, options, réparation, et bonnes pratiques. L’objectif : t’assurer que tu es prêt à utiliser Btrfs en production ou en environnement personnel, en confiance.

Pourquoi ce contrôle ?

Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.

🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.

🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.

💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.

Bonne chance ! 🚀

  • 10 questions aléatoires issues de la banque de questions,
  • 5 minutes pour répondre,
  • 80 % requis pour réussir.

Ce quiz est une manière rapide de consolider tes acquis avant de mettre les mains dans le cambouis.

Savoir c’est bien, pratiquer c’est mieux. Si tu maîtrises ces questions, tu es prêt à administrer un système Btrfs avec assurance. Prochainement, on pourra comparer Btrfs à d’autres systèmes comme ZFS ou XFS, pour mieux choisir selon les usages.