Btrfs est un système de fichiers open source à usage général pour Linux. Le nom dérive de l'utilisation de B-trees pour stocker les structures internes du système de fichiers. Différents noms sont utilisés pour le système de fichiers, notamment "Butter F S" et "B-tree F S". Le développement de Btrfs a commencé chez Oracle en 2007, et maintenant un certain nombre d'entreprises (dont Red Hat, Fujitsu, Intel, SUSE et bien d'autres) contribuent à l'effort de développement. Btrfs est inclus dans le noyau Linux principal.
Instantanés Btrfs
Les sous-volumes Btrfs peuvent être instantanés et clonés, ce qui crée des arbres B supplémentaires. Un instantané commence par une copie d'un sous-volume prise à un moment donné. Vous pouvez rendre un instantané accessible en écriture et l'utiliser comme un clone évolutif du sous-volume d'origine. Vous pouvez également utiliser l'instantané comme image stable d'un sous-volume à des fins de sauvegarde ou de migration vers d'autres systèmes. Les instantanés peuvent être créés rapidement et consomment initialement très peu d'espace disque.
Utilisez la commande btrfs subvolume snapshot pour créer un instantané inscriptible/lisible d'un sous-volume. L'exemple suivant crée un instantané du sous-volume SV1 :
# btrfs subvolume snapshot /btrfs/SV1 /btrfs/SV1/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1/SV1-snap'
Utilisez l'instantané de sous-volume btrfs -r option pour créer un instantané en lecture seule :
# btrfs subvolume snapshot -r /btrfs/SV1 /btrfs/SV1-rosnap Create a readonly snapshot of '/btrfs/SV1' in '/btrfs/SV1-rosnap'
Les instantanés apparaissent sous la forme d'un répertoire normal lorsque la commande ls est utilisée. Les instantanés apparaissent également dans la sortie de la commande btrfs subvolume list.
# btrfs subvolume list /btrfs ID 257 gen 10 top level 5 path SV1 ID 258 gen 9 top level 257 path SV1/SV1-snap ID 259 gen 10 top level 5 path SV1-rosnap
Prendre un instantané d'un fichier
Vous pouvez utiliser le "cp –reflink ” commande pour prendre un instantané d'un fichier. Avec cette option, le système de fichiers ne crée pas de nouveau lien pointant vers un inode existant, mais crée à la place un nouvel inode qui partage les mêmes blocs de disque que la copie d'origine. Le nouveau fichier semble être une copie du fichier d'origine, mais les blocs de données ne sont pas dupliqués. Cela permet à la copie d'être presque instantanée et économise également de l'espace disque. À mesure que le contenu du fichier diverge au fil du temps, sa quantité de stockage requise augmente. Une restriction est que cette opération ne peut fonctionner que dans les limites du même système de fichiers et dans le même sous-volume.
L'exemple suivant copie un fichier à l'aide de la commande cp –reflink. L'espace utilisé est donné à la fois avant et après l'opération de copie. Notez que l'espace utilisé n'augmente pas.
# df -hP /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
# cp --reflink /btrfs/SV1/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1/copy_of_vmlinuz
# df -h /btrfs Filesystem Size Used Avail Use% Mounted on /dev/sda 10G 23M 8.0G 1% /btrfs
Monter un sous-volume ou un instantané
Par défaut, Linux monte le volume parent Btrfs, qui a un ID de 0. Dans cet exemple, la commande de montage suivante a été émise avant de créer des sous-volumes et des instantanés :
# mount /dev/sdb /btrfs
Le sous-volume SV1 a été créé dans /btrfs. La commande ls affiche le sous-volume :
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:01 SV1
L'exemple suivant copie les fichiers dans SV1, crée un instantané de SV1 et vérifie que le sous-volume et l'instantané contiennent les mêmes fichiers :
# cp -p /boot/vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1
# btrfs sub snapshot /btrfs/SV1 /btrfs/SV1-snap Create a snapshot of '/btrfs/SV1' in '/btrfs/SV1-snap'
# ls /btrfs/SV1* /btrfs/SV1: vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: vmlinuz-3.10.0-693.17.1.el7.x86_64
Si vous démontez /btrfs et le remontez, le volume parent Btrfs est monté par défaut :
# ls /btrfs/ SV1 SV1-snap # umount /btrfs # mount /dev/sda /btrfs/ # ls /btrfs/ SV1 SV1-snap
Vous pouvez cependant monter un sous-volume ou un instantané btrfs comme s'il s'agissait d'un périphérique de disque. Si vous montez un instantané au lieu de son sous-volume parent, vous restaurez en fait l'état du système de fichiers au moment où l'instantané a été pris. L'exemple suivant copie un fichier vers SV1 afin que le contenu soit différent de SV1-snap :
# cp testfile /btrfs/SV1
# ls -l /btrfs/SV1* /btrfs/SV1: total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64 /btrfs/SV1-snap: total 5756 -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Pour monter un sous-volume ou un instantané, vous devez d'abord déterminer le numéro d'identification du sous-volume que vous souhaitez monter. Utilisez la commande btrfs subvolume list pour afficher les numéros d'identification. Dans l'exemple suivant, l'ID du sous-volume racine est 257 :
# btrfs sub list /btrfs ID 257 gen 12 top level 5 path SV1 ID 258 gen 9 top level 5 path SV1-snap
Utilisez le btrfs "set-default de sous-volume ” pour définir le sous-volume par défaut d'un système de fichiers. Par exemple, pour monter le sous-volume SV1 Btrfs, qui a un ID de 257 :
# btrfs subvolume set-default 257 /btrfs
Vous devez ensuite démonter et remonter le système de fichiers Btrfs. Le niveau racine contient alors le contenu du sous-volume SV1 et le sous-volume racine n'est plus visible :
# ls -l /btrfs total 5760 -rw-r--r--. 1 root root 19 Mar 29 11:44 testfile -rwxr-xr-x. 1 root root 5890720 Jan 25 20:26 vmlinuz-3.10.0-693.17.1.el7.x86_64
Vous pouvez également utiliser le "-o subvolid ” à la commande mount pour monter le sous-volume racine ou un sous-volume ou un instantané. Par exemple, pour monter le sous-volume racine :
# umount /btrfs # mount -o subvolid=5 /dev/sda /btrfs
# ls -l /btrfs total 0 drwxr-xr-x. 1 root root 84 Mar 29 11:44 SV1 drwxr-xr-x. 1 root root 68 Mar 29 11:17 SV1-snapComment créer et monter un système de fichiers Btrfs (expliqué avec des exemples)
Comment redimensionner/étendre un volume/système de fichiers Btrfs