Table des matières

, ,

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 COW1). 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

1)
Copy On Write