BTRFS est un système de fichiers open source et moderne implémenté avec des fonctionnalités avancées. Il fonctionne sur le mécanisme de copie sur écriture (CoW).
Il est inclus dans le noyau Linux principal. Les fonctionnalités notables de Btrfs sont les données et métadonnées de copie sur écriture, les instantanés, la prise en charge RAID intégrée, le redimensionnement et la défragmentation en ligne, la compression transparente, le stockage efficace pour les petits fichiers, etc.
Instantané est une copie à un instant donné de Btrfs sous-volume. Les instantanés sont accessibles en écriture par défaut. Btrfs permet de créer des instantanés lisibles, ce qui est utile pour effectuer une sauvegarde.
Dans ce didacticiel, nous apprenons à créer des instantanés Btrfs, des sauvegardes incrémentielles et à les restaurer.
Informations système
j’utilise Fedora et maintenant Fedora 33 a Btrfs par défaut. Mon système a un disque de démarrage de 20 Go et un disque supplémentaire de 10 Go avec le système de fichiers Btrfs dessus.
Ici, sda est le disque de démarrage tandis que sdb est le disque supplémentaire que nous utiliserons pour l’instantané btrfs.
Liste des informations sur le disque :
$ ls -l /dev | grep sd
brw-rw----. 1 root disk 8, 0 Nov 21 08:42 sda
brw-rw----. 1 root disk 8, 1 Nov 21 08:42 sda1
brw-rw----. 1 root disk 8, 2 Nov 21 08:42 sda2
brw-rw----. 1 root disk 8, 16 Nov 21 08:57 sdb
brw-rw----. 1 root disk 8, 17 Nov 21 08:57 sdb1
Pour expliquer, j’ai créé LVM et l’ai monté sur /mnt/linoxide_btrfs1 avec le système de fichiers btrfs.
Liste PV, VG et LV créés :
$ pvs && vgs && lvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 linoxide_vg lvm2 a-- <10.00g <5.00g
VG #PV #LV #SN Attr VSize VFree
linoxide_vg 1 1 0 wz--n- <10.00g <5.00g
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
linoxide_lv1 linoxide_vg -wi-a----- 5.00g
La sortie des informations de montage :
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 286M 0 286M 0% /dev
tmpfs 294M 0 294M 0% /dev/shm
tmpfs 294M 4.5M 289M 2% /run
tmpfs 294M 0 294M 0% /sys/fs/cgroup
/dev/sda2 20G 2.3G 18G 12% /
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 59M 0 59M 0% /run/user/1000
tmpfs 59M 0 59M 0% /run/user/0
/dev/mapper/linoxide_vg-linoxide_lv1 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs1
Instantané de Btrfs
Afin de créer un instantané btrfs, créez d’abord un sous-volume.
Étape 1. Créer un sous-volume
Pour créer un sous-volume nommé ‘/mnt/linoxide_btrfs1/subvol1’, exécutez :
$ sudo btrfs subvolume create /mnt/linoxide_btrfs1/subvol1
Étape 2. Copiez les fichiers dans le sous-volume
Copiez quelques fichiers de données dans un sous-volume. La commande suivante copie certains fichiers de /etc/ vers subvol1.
$ cd /mnt/linoxide_btrfs1/subvol1
$ cp /etc/[abc]* .
$ ls -l
-rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime
-rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases
-rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db
-rw-------. 1 root root 541 Nov 21 09:25 anacrontab
-rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf
-rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc
-rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg
-rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release
-rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream
-rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Étape 3. Créer un instantané
Créons un instantané du sous-volume1 (/mnt/linoxide_btrfs1/subvol1).
Noter la -r
indicateur pour lecture seule. Assurez-vous de créer un instantané en lecture seule si vous utilisez des commandes d’envoi/réception (expliquées dans la section suivante).
Pour créer un instantané en lecture seule de ‘/mnt/linoxide_btrfs1/subvol1’ dans ‘/mnt/linoxide_btrfs1/.snapshots/subvol1-day1’, exécutez :
$ sudo btrfs subvolume snapshot -r /mnt/linoxide_btrfs1/subvol1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day1
Vérifiez le contenu de l’instantané :
$ cd .snapshots/
$ ls -l
drwxr-xr-x. 1 root root 446 Nov 21 09:25 subvol1-day1
$ cd subvol1-day1/
$ ls -l
-rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime
-rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases
-rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db
-rw-------. 1 root root 541 Nov 21 09:25 anacrontab
-rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf
-rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc
-rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg
-rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release
-rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream
-rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Instantané Btrfs à l’aide de l’envoi
Nous avons pris un instantané sur le même disque que le sous-volume, ce qui n’est pas bon pour la stratégie de sauvegarde. En cas de catastrophe telle qu’une corruption de disque, l’option de récupération sera perdue.
BTRFS a une solution pour cela. Nous pouvons envoyer des instantanés à un système distant ou à un disque dur externe en utilisant la commande btrfs send et btrfs receive. Ils sont basés sur SSH. Le système distant doit également être formaté en BTRFS.
Laissez-moi vous expliquer avec example.
Créez un nouveau disque avec le système de fichiers btrfs monté sur /mnt/linoxide_btrfs2.
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 286M 0 286M 0% /dev
tmpfs 294M 0 294M 0% /dev/shm
tmpfs 294M 4.5M 289M 2% /run
tmpfs 294M 0 294M 0% /sys/fs/cgroup
/dev/sda2 20G 2.3G 18G 12% /
/dev/sda1 200M 12M 189M 6% /boot/efi
tmpfs 59M 0 59M 0% /run/user/1000
tmpfs 59M 0 59M 0% /run/user/0
/dev/mapper/linoxide_vg-linoxide_lv1 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs1
/dev/mapper/linoxide_vg2-linoxide_lv2 5.0G 17M 4.5G 1% /mnt/linoxide_btrfs2
Dans ce example, la volume Btrfs de destination est le deuxième disque btrfs monté en tant que /mnt/linoxide_btrfs2 .
La commande suivante pour envoyer l’instantané à la destination distante :
$ sudo sudo btrfs send /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 | sudo btrfs receive /mnt/linoxide_btrfs2
At subvol /mnt/linoxide_btrfs1/.snapshots/subvol1-day1
At subvol subvol1-day1
Vérifiez les fichiers de données :
$ cd /mnt/linoxide_btrfs2/
$ ls -l
drwxr-xr-x. 1 root root 446 Nov 21 09:25 subvol1-day1
$ cd subvol1-day1/
$ ls -l
-rw-r--r--. 1 root root 16 Nov 21 09:25 adjtime
-rw-r--r--. 1 root root 1529 Nov 21 09:25 aliases
-rw-r--r--. 1 root root 12288 Nov 21 09:25 aliases.db
-rw-------. 1 root root 541 Nov 21 09:25 anacrontab
-rw-r--r--. 1 root root 55 Nov 21 09:25 asound.conf
-rw-r--r--. 1 root root 2853 Nov 21 09:25 bashrc
-rw-r--r--. 1 root root 112 Nov 21 09:25 boto.cfg
-rw-r--r--. 1 root root 37 Nov 21 09:25 centos-release
-rw-r--r--. 1 root root 51 Nov 21 09:25 centos-release-upstream
-rw-r--r--. 1 root root 1053 Nov 21 09:25 chrony.conf
Maintenant, vous avez un sauvegarde complète qui peut également être utilisé comme DR.
Sauvegarde incrémentielle
Snapshot peut également envoyer des sauvegardes de manière incrémentielle. Lorsqu’un répertoire est renommé, Rsync supprime le répertoire et transfère à nouveau toutes les données, tandis que les BTRF ne transfèrent que quelques octets de métadonnées.
Prenons un autre instantané.
$ sudo btrfs subvolume snapshot -r /mnt/linoxide_btrfs1/subvol1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day2
Utilisant -p
flag, vous devez spécifier l’instantané de base et cet instantané doit exister dans la source et la destination. La commande suivante enverra la différence entre deux instantanés de base à la destination.
$ sudo btrfs send -p /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/.snapshots/subvol1-day2 | sudo btrfs receive /mnt/linoxide_btrfs2
Comment restaurer l’instantané Btrfs
Dans cette section, j’expliquerai comment restaurer des données à partir d’un instantané pris précédemment. Prenons le scénario où le fichier est supprimé par erreur. Vous pouvez récupérer le dernier instantané ou même récupérer une ancienne version du fichier à partir d’un ancien instantané.
Vous pouvez simplement utiliser la commande cp pour restaurer le fichier supprimé :
$ sudo cp /mnt/linoxide_btrfs1/.snapshots/subvol1-day1/chrony.conf /mnt/linoxide_btrfs1/subvol1
Supposons que vous ayez supprimé l’intégralité du sous-volume. Même dans ce cas, avec l’utilisation de la commande cp, vous pouvez restaurer l’intégralité du contenu à partir de l’instantané :
$ sudo cp -r /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/subvol1
Ou vous pouvez restaurer le sous-volume à l’aide de la commande btrfs snapshot :
$ sudo btrfs subvolume snapshot /mnt/linoxide_btrfs1/.snapshots/subvol1-day1 /mnt/linoxide_btrfs1/subvol1
Nettoyage d’instantané
Lorsque vous effectuez une sauvegarde incrémentielle périodique avec un instantané btrfs, vous pouvez en accumuler beaucoup. Cela peut créer de la confusion et occuper beaucoup d’espace sur le disque. Vous pouvez également purger les anciens instantanés indésirables à l’aide de la suppression d’instantanés. Lors de la purge, gardez à l’esprit que pour effectuer un envoi incrémentiel, vous avez besoin du dernier instantané.
$ sudo btrfs subvolume delete /mnt/linoxide_btrfs1/.snapshots/subvol1-day1
Conclusion
Btrfs a mûri à un rythme rapide. Aujourd’hui, il dispose d’un large éventail de fonctionnalités telles que la compression, les instantanés, l’intégrité des données et les performances qui en font un système de fichiers prêt pour la production. J’espère que cet article sera utile pour utiliser des instantanés de BTRFS. Faites-moi part de votre point de vue dans la section des commentaires.