[Btrfs](https://btrfs.wiki.kernel.org/index.php/Main_Page) (B-tree file system, se prononce « Butter-FS ») est un système de fichiers basé sur le principe du [Copy-On-Write](https://fr.wikipedia.org/wiki/Copy-on-write) visant à mettre en œuvre des fonctionnalités avancées comme la tolérance aux pannes, la réparation et la facilité d'administration. Sous licence GNU GPL il est développé conjointement par Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO AG (en)…
En 2012, un effort intense de développement et de test est fourni par la communauté afin de faire de Btrfs le successeur de ext3/ext4, systèmes de fichiers habituels des distributions Linux.
Nous utilisons pour l'instant Btrfs uniquement sur des systèmes de stockages secondaires, comme les serveurs de sauvegardes, où l'on profite de la performance des snapshots.
Le support du système de fichier BTRFS est intégré par le noyau Linux de base. Néanmoins, il faut installer le paquet [`btrfs-progs`](https://packages.debian.org/bookworm/btrfs-progs) pour bénéficier des outils relatifs à Btrfs (création, maintenance)
Un subvolume (ou sous-volume) est comparable à un simple répertoire (il peut contenir des fichiers et d'autres répertoires). Lorsque que l'on utilise Btrfs, il existe au moins un subvolume, le subvolume racine.
Un subvolume peut avoir des options de montages spécifique (à quelques exceptions près, comme la compression qui sera globale au volume Btrfs).
Si on souhaite avoir des options spécifiques, ou monter le subvolume dans un autre emplacement on utilisera la commande `mount` ou le `fstab` si on souhaite que ce soit persistant, on ajoutera l'option de montage`subvol=MY_SUBVOL`, avec *MY_SUBVOL* le chemin relatif du sous-volume par rapport à la racine du volume Btrfs.
Un snapshot est un intantané figé de toutes les données contenues dans un subvolume. Si par exemple vous disposez deux fichiers ("foo" et "bar") dans un subvolume, un snapshot avant la suppression d'un de ces deux vous permettra de le récupérer dans ce snapshot. Un snapshot reste un subvolume, manipulable avec les commandes relatives au sobvolumes, mais en plus son contenu sera par défaut en lecture seule.
> **Important** : **Un snapshot n'est pas une sauvegarde**, il s'appuie sur le mécanisme de copy-on-write de Btrfs. Il partage donc les mêmes blocs de données. Ainsi, si les données sont endommagées, elles le seront aussi bien sur le snapshot que sur le subvolume. Cette fonctionnalité est utile pour conserver une ou plusieurs copies locales qui peuvent enuite être utilisées pour effectuer un rollback ou une sauvegarde à partir de l'état figé d'un subvolume.
On peut monter le volume avec l'option `compress` pour activer une compression à la volée des fichiers. Selon la version du Kernel système, on pourra choisir l'algorithme de compression (zstd, lzo, zlib) ainsi que son éventuel réglage du niveau de compression.
Exemple : `compress=zstd:3` pour utiliser la compression *zstd* au niveau de compression *3* (le niveau par défaut qui offre un bon compromis entre temps cpu et niveau de compression)
Si le volume avant n'avait pas l'option `compress` on pourra tout recompresser avec `btrfs filesystem defragment -czstd` ou `-clzo`/`-czlib`.
Vérifier l'intégrité d'un subvolume avec l'opération **scrub** qui lance une lecture de l'ensemble des données et métadonnées du système de fichiers et utilise les sommes de contrôle pour identifier et réparer les données corrompues éventuelles :
Dans Debian, il existe un paquet [btrfsmaintenance](https://packages.debian.org/bookworm/btrfsmaintenance) qui contient un ensemble de scripts pour automatiser l'éxécution des taches de maintenance (Srub, Balance, Trim et Defrag)