{{tag>sysadmin linux btrfs}}
====== Système de fichiers Btrfs ======
Installer les outils
$ sudo apt-get install btrfs-tools
Pour découvrir btrfs, on créé le système de fichier dans un fichier de quelques mégas. Première surprise, l'espace minimal nécessaire pour la création d'un système de fichier btrfs est de 256 Mo:
$ cd /tmp
$ dd if=/dev/zero of=/tmp/btrfs-test bs=1M count=256
$ mkfs.btrfs /tmp/btrfs-test
On créer le point de montage sur l'arborescence logique et on monte notre tout nouveau système de fichier btrfs:
$ sudo mkdir /mnt/test
$ sudo losetup /dev/loop0 /tmp/btrfs-test
$ sudo mount -t btrfs -o loop /dev/loop0 /mnt/test/
$ sudo chown yoann:yoann /mnt/test
===== Le copy-on-write =====
La réactivité de création des instantanés et des sous volumes repose sur le principe du Copy-on-write COW((**C**opy **O**n **W**rite)). Lorsqu'un snapshot est créé, il n'occupe quasiment aucun espace supplémentaire sur le disque. C'est seulement lors de la modification d' un bloc de données préexistant qu' une copie est crée et que les références sont mises a jour. La contrepartie de cette solution technique est une fragmentation plus importante des fichiers. Afin de la réduire, le système de fichier btrfs utilise les **extends**. Des outils de défragmentation à chaud sont également disponibles:
$ sudo btrfs filesystem defragment /mnt/test
L'option **deframgment** doit être suivie d'un argument qui peut être un nom de dossier ou fichier.
===== Les sous-volumes =====
Du point de vue de l'utilisateur un **sous volume** (subvolume) est vu comme un dossier classique. Néanmoins un sous-volume est un système de fichier indépendant contenu dans le système de fichier parent. Il possède sa propre racine, un point de montage (qui correspond au dossier indiqué lors de la création) et des options. La création des sous volume permet une meilleure séparation des données, la gestion de quotas et une plus grande indépendance en cas de corruption de l'arborescence système. Le système de **snapshot** repose sur les **sous-volumes**.
Pour créer un sous volume, donner un nom de dossier. En invoquant la commande, le répertoire servant de point de montage est automatiquement créé:
$ btrfs subvolume create /mnt/test/sv-1/
Dans l'exemple ci-dessus on a créé un sous volume monté sur le répertoire /mnt/test/sv-1. Tous les fichiers créés dans le répertoire sv-1 appartiennent au sous-volume:
/mnt/test/sv-1/
├── tota
├── toti
├── toto
└── totu
===== Snapshot =====
On va créer un instantané du sous-volume sv1:
$ btrfs subvolume snapshot /mnt/test/sv-1 /mnt/test/snapshot-sv1
Après invocation de cette commande un nouveau répertoire a été créé (/mnt/test/snapshot-sv1). C'est le point de montage d'un nouveau sous-volume identique à /mnt/test/sv-1. Pour btrfs les sous-volumes et les snapshots sont des structures apparentées: un snapshot est une forme de sous-volume. btrfs a été conçu pour rendre très réactive la création des snapshots. Grâce au principe COW, snapshots et sous-volumes partagent les données inchangées.
Pour lister les sous-volumes et les snapshots
$ sudo btrfs subvolume list /mnt/test/
ID 256 top level 5 path sv-1
ID 257 top level 5 path snapshot-sv1
Maintenant que l'instantané est créé, on va pouvoir travailler dans le sous-volume sv-1 en toute sécurité car on possède un instantané en sauvegarde. Ici je supprime deux fichiers et je crée un nouveau dossier avec un fichier. Après modifications, on obtient l'arborescence suivante:
/mnt/test/sv-1/
├── doc
│ └── readme.txt
├── tota
└── toti
Les modifications apportées sont catastrophiques et mes applications sont devenues instables. Je souhaite revenir à l’état précédent. Pour cela, il va falloir définir l'instantané comme systeme de fichier par défaut pour le point de montage /mnt/test/sv-1.
On liste les volumes
$ sudo btrfs subvolume list /mnt/test/
ID 256 top level 5 path sv-1
ID 257 top level 5 path snapshot-sv1
L'instantané a l'identifiant **257**. On définit le volume avec l'identifiant **257** comme défaut pour le point de montage /mnt/test/sv-1:
$ sudo btrfs subvolume set-default 257 /mnt/test/sv-1
===== Options de montage =====
Lors du montage d'un systeme de fichier btrfs les options **subvol** ou **subvolid** permettent de monter un sous-volume directement sur le point de montage:
$ sudo mount -t btrfs -o loop,subvol=sv-1 /dev/loop0 /mnt/test
===== Références =====
* https://www.linux.com/learn/tutorials/533112-weekend-project-get-to-know-btrfs
* http://wiki.deimos.fr/BTRFS_:_Utilisation_du_rempla%C3%A7ant_de_l%27Ext4
* http://debian-facile.org/doc:systeme:btrfs