GNU/Linux >> Tutoriels Linux >  >> Fedora

Comprendre le système de fichiers Btrfs dans Fedora Linux

Le système de fichiers B-Tree (Btrfs) est un système de fichiers de copie sur écriture (CoW) pour les systèmes d'exploitation Linux. Les utilisateurs de Fedora ont été initiés à Btrfs lorsque l'équipe du projet Fedora en a fait le système de fichiers par défaut pour Fedora Workstation 33. Je n'avais pas trop réfléchi à Btrfs bien qu'il soit disponible pour Linux depuis plusieurs années. Cet article vous familiarisera avec le système de fichiers Btrfs et ses fonctionnalités telles que les instantanés, les sous-volumes et les quotas.

B-Tree Filesystem (Btrfs) est à la fois un système de fichiers et un gestionnaire de volumes. Il est en développement depuis 2007 et depuis lors, il fait partie du noyau Linux. Ses développeurs visent à créer un système de fichiers moderne capable de résoudre les défis associés à la mise à l'échelle vers de grands sous-systèmes de stockage. D'après la page de manuel Btrfs, ses principales fonctionnalités se concentrent sur la tolérance aux pannes, la facilité d'administration et la réparation.

Système de fichiers Btrfs dans Fedora Linux

Ses principales fonctionnalités sont :

  • Instantanés :instantanés inscriptibles et en lecture seule.
  • RAID.
  • Autorétablissement :sommes de contrôle pour les données et les métadonnées
  • Détection automatique de la corruption des données.
  • Sous-volumes.
  • Sensibilisation au SSD.
  • Sauvegardes incrémentielles efficaces

Vous pouvez en savoir plus sur ses fonctionnalités avancées et ses avantages sur la page de manuel officielle de Btrfs.

Prérequis

Si vous utilisez déjà Fedora Workstation 33, vous êtes prêt pour les étapes suivantes. Sinon, vous pouvez télécharger l'ISO officielle de Fedora Workstation et l'installer ou l'exécuter sur une nouvelle machine virtuelle à partir de n'importe quelle distribution Linux que vous utilisez.

Lors de la rédaction de cet article, je n'ai pas rencontré d'outil graphique pour travailler avec Btrfs (les suggestions sont les bienvenues !). Par conséquent, nous travaillerons avec la ligne de commande pour la plupart des démonstrations de cet article. Vous devez travailler avec Btrfs en tant que superutilisateur pour les prochaines étapes.

~]$ sudo su # passe en mode super utilisateur

Vous pouvez examiner le format Btrfs en exécutant la commande suivante.

Regarder de plus près le système de fichiers Btrfs

Afficher le système de fichiers Fedora Btrfs :

[root@fosslinux tuts]# btrfs filesystem showLabel :'fedora_localhost-live' uuid :688a6af2-77e1-4da4-bc63-878c5b0f063bTotal devices 1 FS bytes used 18.94GiBdevid 1 size 148.05GiB used 21.02GiB path /dev/sda2 

Vous pouvez remarquer que l'étiquette du système de fichiers est « fedora_localhost-live ». Vous pouvez modifier l'étiquette pour représenter une représentation plus précise de votre système puisque nous n'exécutons pas la version USB en direct de Fedora.

Modification des libellés Btrfs :

Vous pouvez modifier l'étiquette à l'aide de la commande btrfs filesystem label.

[root@fosslinux tuts]# étiquette du système de fichiers btrfs /fedora_localhost-live[root@fosslinux tuts]# étiquette du système de fichiers btrfs / fedoraworkstation33[root@fosslinux tuts]# étiquette du système de fichiers btrfs /fedoraworkstation33[root@fosslinux tuts]#Btrfs Fedora étiquette de système de fichiers sous-volumes Btrfs

Les sous-volumes ne sont pas les mêmes que les partitions mais peuvent être comparés à des partitions et sont utilisés de la même manière que les partitions. Un sous-volume est le répertoire standard que Btrfs peut gérer.

Vous pouvez utiliser un sous-volume pour prendre des instantanés, définir un quota et le répliquer vers d'autres emplacements et d'autres systèmes d'exploitation hôtes tant qu'ils s'exécutent sous le système de fichiers Btrfs.

Lister les sous-volumes Btrfs :

[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24421 top level 5 path homeID 258 gen 24407 top level 5 path rootID 265 gen 22402 top level 258 path var/lib/machines

Créer un sous-volume :

Vous pouvez créer un nouveau sous-volume en exécutant la commande btrfs subvolume create.

[root@fosslinux tuts]# btrfs subvolume create /opt/fooCreate subvolume '/opt/foo'[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24469 top level 5 path homeID 258 gen 24469 top level 5 chemin rootID 265 gen 22402 niveau supérieur 258 chemin var/lib/machinesID 279 gen 24469 niveau supérieur 258 chemin opt/foo

Supprimer le sous-volume :

Vous pouvez supprimer un sous-volume en exécutant la commande btrfs subvolume delete.

[root@fosslinux tuts]# btrfs subvolume delete /opt/fooDelete subvolume (no-commit):'/opt/foo'[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24495 top level 5 path homeID 258 gen 24493 chemin supérieur de niveau 5 rootID 265 gen 22402 chemin supérieur de niveau 258 var/lib/machines

Les sous-volumes peuvent s'avérer utiles pour les administrateurs système, en particulier lors de l'ajout d'utilisateurs.

Ajouter un utilisateur

Avant Fedora Linux 33, la création d'un nouveau compte utilisateur créait un répertoire personnel pour le compte. Essentiellement, le répertoire utilisateur créé est un sous-répertoire de /home. Cela signifiait que la propriété et les privilèges étaient adaptés au propriétaire du répertoire /home. Cela signifiait également qu'il n'y avait pas de fonctions spéciales pour gérer le sous-répertoire. Avec Btrfs, vous avez plus de contrôle pour gérer et appliquer des contraintes aux répertoires d'utilisateurs créés.

La manière traditionnelle d'ajouter un nouvel utilisateur.

Ajoutez un nouvel utilisateur, « fedoran1 », à l'aide de la commande useradd :

[root@fosslinux tuts]# useradd fedoran1[root@fosslinux tuts]# getent passwd fedoran1fedoran1:x:1001:1001::/home/fedoran1:/bin/bash[root@fosslinux tuts]# ls -l / hometotal 0drwx------. 1 fedoran1 fedoran1 80 7 avril 19:00 fedoran1drwx------. 1 tuts tuts 308 6 avril 08:33 tuts
Utilisation des sous-volumes Btrfs comme accueil des utilisateurs

Vous pouvez héberger des sous-volumes Btrfs en tant que répertoires d'accueil des utilisateurs en ajoutant –btrfs-subvolume-home à la commande useradd. La commande créera un nouveau sous-volume Btrfs pour l'utilisateur.

[root@fosslinux tuts]# useradd --btrfs-subvolume-home fedoran2Create subvolume '/home/fedoran2'[root@fosslinux tuts]# getent passwd fedoran2fedoran2:x:1002:1002::/home/fedoran2:/ bin/bash

Si vous exécutez la commande / liste de sous-volumes btrfs, vous remarquerez un nouveau sous-volume pour le répertoire personnel du nouvel utilisateur.

[root@fosslinux tuts]# btrfs subvolume list /ID 256 gen 24732 top level 5 path homeID 258 gen 24731 top level 5 path rootID 265 gen 22402 top level 258 path var/lib/machinesID 280 gen 24728 top level 256 path home/fedoran2
Supprimer un utilisateur :

Parfois, vous souhaitez supprimer un utilisateur avec tous les fichiers de l'utilisateur et son répertoire personnel simultanément. Vous pouvez utiliser la commande userdel avec l'option -r, qui supprimera également le sous-volume Btrfs de l'utilisateur.

[root@fosslinux tuts]# userdel -r fedoran2Delete subvolume (commit):'/home/fedoran2'

Quotas Btrfs

Avez-vous déjà eu un programme qui a perdu le contrôle et écrit sur votre disque jusqu'à ce que votre répertoire /home entier soit rempli ? Ces problèmes surviennent, en particulier avec les applications ou les serveurs qui stockent du contenu et des fichiers journaux. Vous pouvez empêcher votre système ou votre serveur de s'arrêter parce que le disque est rempli en définissant et en implémentant des quotas Btrfs.

La première étape consiste à activer les quotas sur votre système de fichiers Btrfs :

[root@fosslinux tuts]# activation du quota btrfs /

Ensuite, notez le numéro d'identification du groupe de quotas (qgroup) de chaque sous-volume à l'aide de la commande btrfs subvolume list. Il serait préférable d'associer chaque sous-volume à un qgroup en fonction de son numéro d'identification à l'aide de la commande btrfs qgroup create. Vous pouvez le faire individuellement, mais vous pouvez également utiliser la commande suivante pour accélérer la création de qgroups pour les sous-volumes.

>liste des sous-volumes btrfs \ | couper -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \

Dans votre Fedora 33, remplacez le \ par le chemin racine ( / ) de votre système de fichiers.

 # liste de sous-volumes btrfs / | couper -d' ' -f2 | xargs -I{} -n1 btrfs qgroup créer 0/{} /

Exécutez la commande btrfs quota rescan pour afficher les qgroups que vous avez créés.

[root@fosslinux tuts]# btrfs qgroup show /ATTENTION :une nouvelle analyse est en cours, les données de qgroup peuvent être incorrectesqgroupid rfer excl-------- ---- ----0/5 16.00KiB 16.00KiB0 /256 23.70MiB 23.70MiB0/258 449.61MiB 449.61MiB0/265 16.00KiB 16.00KiB0/279 16.00KiB 16.00KiB

Vous pouvez désormais attribuer un quota à un qgroup qui appliquera les modifications au sous-volume associé.

Nous pouvons maintenant utiliser la commande btrfs qgroup limit pour limiter l'utilisation du répertoire personnel de l'utilisateur fedoran2 à 2 Go.

[root@fosslinux tuts]# btrfs qgroup limit 2G /home/fedoran2

Confirmez les changements de limite de quota pour l'utilisateur fedoran2.

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2qgroupid rfer excl max_rfer max_excl-------- ---- ---- -------- --- -----0/279 16.00KiB 16.00KiB 2.00GiB aucun

Afficher tous les qgroups et limites de quota attribués, le cas échéant, à l'aide de btrfs qgroup show -re /

[root@fosslinux tuts]# btrfs qgroup show -reF /home/fedoran2qgroupid rfer excl max_rfer max_excl-------- ---- ---- -------- --- -----0/279 16.00KiB 16.00KiB 2.00GiB aucun

Instantanés Btrfs

Un instantané dans le système de fichiers Btrfs est simplement une copie d'un sous-volume. Par conséquent, un instantané est un sous-volume qui peut partager ses données et ses métadonnées avec d'autres sous-volumes à l'aide des fonctionnalités de copie sur écriture (CoW). La prise d'un instantané est immédiate, mais elle n'occupe pas d'espace dès sa création.

Lorsque vous prenez un instantané, l'espace de l'instantané augmente avec les modifications apportées au sous-volume d'origine ou à l'instantané s'il est accessible en écriture. De plus, tous les fichiers ajoutés, modifiés ou supprimés dans le sous-volume résideront toujours dans l'instantané. Ces fonctionnalités offrent un moyen pratique de créer des sauvegardes dans votre système.

Créer des sauvegardes à l'aide d'instantanés

Par défaut, un instantané résidera sur le même disque que le sous-volume, et vous pouvez parcourir ou même récupérer une copie d'un fichier dans son état d'origine tel que lorsque l'instantané a été pris. Une caractéristique intéressante des instantanés est que vous pouvez les envoyer vers un disque dur externe ou un système distant à l'aide de SSH. Le hic, c'est que la destination doit avoir un système de fichiers Btrfs. Pour tirer parti de cette fonctionnalité dans les instantanés, vous utiliserez les commandes btrfs send et btrfs receive.

Remarque :Stocker un instantané sur le même disque que le sous-volume n'est pas une stratégie de sauvegarde idéale. Si votre disque est corrompu, vous perdrez à la fois le sous-volume et les instantanés.

Suivez ces étapes pour créer une sauvegarde d'un sous-volume.

1 :Créez un sous-volume pour votre projet

À des fins de démonstration, nous allons créer un sous-volume Btrfs (myproject) dans le répertoire $HOME/Desktop/myproject. Le sous-volume Btrfs ressemblera et fonctionnera comme un répertoire standard.

Créez un sous-volume à l'aide de la commande suivante :

[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myprojectCreate subvolume '/home/tuts/Desktop/myproject'

Créez un répertoire caché pour stocker vos instantanés :

[tuts@fosslinux ~]$ mkdir $HOME/.myprojectsnapshots

Créez un fichier texte dans le sous-volume $HOME/Desktop/myproject :

[tuts@fosslinux ~]$ cd /home/tuts/Desktop/monprojet[tuts@fosslinux monprojet]$ ls[tuts@fosslinux monprojet]$ vi jour0.txt[tuts@fosslinux monprojet]$ lsjour0.txt 

2 :Prendre un instantané

Par défaut, les instantanés sont accessibles en écriture, mais vous devrez créer un instantané en lecture seule pour utiliser les commandes btrfs send et btrfs receive. ‘

Les instantanés peuvent être pris chaque jour, chaque heure ou même chaque minute.

Prenez un instantané en lecture seule du sous-volume $HOME/Desktop/myproject et organisez-le dans $HOME/.myprojectsnapshots à l'aide de la commande suivante.

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day0Créer un instantané en lecture seule de '/home/tuts/Desktop/myproject' dans '/home/tuts /.myprojectsnapshots/myproject-day0'

Remarque :

  • Utilisez l'indicateur -r pour créer un instantané en lecture seule. L'indicateur -r offrira une meilleure cohérence et sécurité et vous permettra d'envoyer et de recevoir sur un disque dur externe.
  • Les instantanés ne prendront pas d'instantanés récursifs d'eux-mêmes. Un instantané du sous-volume /home n'effectuera pas d'instantané du sous-volume $HOME/Desktop/myproject.
Utiliser btrfs envoyer et btrfs recevoir pour sauvegarder les instantanés.

Dans la démonstration ci-dessous, l'instantané du volume Btrfs (/.myprojectsnapshots/myproject-day0) sera envoyé à une clé USB montée en tant que /run/media/tuts/bk.

[tuts@fosslinux ~]$ sudo btrfs envoie $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs receive /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day0ERROR :/run/media/tuts/bk n'appartient pas au point de montage btrfs

Selon la façon dont vous avez formaté votre clé USB, vous pouvez obtenir le message d'erreur suivant :

ERREUR :/run/media/tuts/bk n'appartient pas au point de montage btrfs.' 

L'erreur indique que votre clé USB n'est pas au format de système de fichiers btrfs. La commande btrfs send ne peut pas fonctionner sur un système de fichiers autre que btrfs.

Si vous obtenez un tel message d'erreur, formatez votre clé USB en btrfs à l'aide de la commande suivante.

Formatez la clé USB au format de système de fichiers btrfs :

[tuts@fosslinux ~]$ sudo mkfs.btrfs /dev/sdb -L 'bk' -f

Exécutez maintenant la commande btrfs send et btrfs receive :

[tuts@fosslinux ~]$ sudo btrfs envoie $HOME/.myprojectsnapshots/myproject-day0 | sudo btrfs reçoit /run/media/tuts/bk[sudo] mot de passe pour tuts :At subvol /home/tuts/.myprojectsnapshots/myproject-day0At subvol myproject-day0

La commande d'envoi btrfs a été exécutée avec succès et vous pouvez afficher et parcourir votre instantané "myproject-day0" sur votre clé USB.

La commande peut prendre un certain temps en fonction de la taille de votre sous-volume ($HOME/.myprojectsnapshots/myproject-day0). Les envois btrfs incrémentiels suivants prendront moins de temps.

Sauvegardes incrémentielles à l'aide de l'envoi btrfs

Pour utiliser btrfs envoyer de manière incrémentielle, vous devrez prendre un autre instantané de votre sous-volume.

Créer des instantanés :

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day1Créer un instantané en lecture seule de '/home/tuts/Desktop/myproject' dans '/home/tuts /.myprojectsnapshots/myproject-day1'

Envoi btrfs incrémental :

[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day0 $HOME/.myprojectsnapshots/myproject-day1 | sudo btrfs recevoir /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day1At snapshot myproject-day1

La prochaine sauvegarde incrémentielle (le lendemain).

Créer un instantané :

[tuts@fosslinux ~]$ btrfs subvolume snapshot -r $HOME/Desktop/myproject $HOME/.myprojectsnapshots/myproject-day2Créer un instantané en lecture seule de '/home/tuts/Desktop/myproject' dans '/home/tuts /.myprojectsnapshots/myproject-day2'

Envoi btrfs incrémentiel (le lendemain) :

[tuts@fosslinux ~]$ sudo btrfs send -p $HOME/.myprojectsnapshots/myproject-day1 $HOME/.myprojectsnapshots/myproject-day2 | sudo btrfs recevoir /run/media/tuts/bkAt subvol /home/tuts/.myprojectsnapshots/myproject-day2At snapshot myproject-day2
Nettoyage

Remarque :Vous avez besoin d'au moins le dernier instantané pour effectuer un envoi btrfs incrémentiel. Assurez-vous que l'instantané est présent dans la source et la destination.

Supprimer les instantanés à l'emplacement source

Vous pouvez supprimer les instantanés inutiles à l'aide de la commande suivante :

[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day0[sudo] mot de passe pour tuts:Delete subvolume (no-commit):'/home/tuts/.myprojectsnapshots/myproject-day0 '
[tuts@fosslinux ~]$ sudo btrfs subvolume delete $HOME/.myprojectsnapshots/myproject-day1[sudo] mot de passe pour tuts:Delete subvolume (no-commit):'/home/tuts/.myprojectsnapshots/myproject-day1 '

Supprimer les instantanés dans l'emplacement de destination :

[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day0Delete subvolume (no-commit):'/run/media/tuts/bk/myproject-day0'
[tuts@fosslinux ~]$ sudo btrfs subvolume delete /run/media/tuts/bk/myproject-day1Delete subvolume (no-commit):'/run/media/tuts/bk/myproject-day1'

Remarque :Il serait préférable de conserver le dernier instantané dans les emplacements source et de destination afin de pouvoir effectuer un nouvel envoi btrfs incrémentiel.

Récupérer un fichier ou un répertoire à partir d'un instantané btrfs

Des erreurs telles que la suppression d'un répertoire ou d'un fichier par erreur sont inévitables. Lorsque de telles erreurs se produisent, vous pouvez récupérer des fichiers ou des répertoires à partir de l'instantané récent. Vous pouvez également récupérer une ancienne version du répertoire ou du fichier à partir d'un ancien instantané.

Étant donné que les instantanés fonctionnent comme des répertoires, vous pouvez utiliser la commande cp pour restaurer un fichier à l'aide de la commande suivante.

Utiliser la commande cp

Restaurez un fichier supprimé à l'aide de la commande cp :

[tuts@fosslinux ~]$ cp $HOME/.myprojectsnapshots/myproject-day1/day0.txt $HOME/Desktop/myproject

Restaurez un répertoire supprimé à l'aide de la commande cp :

[tuts@fosslinux ~]$ cp -r $HOME/.myprojectsnapshots/myproject-day1/directory $HOME/Desktop/myproject

Si vous supprimez l'intégralité du répertoire $HOME/Desktop/myproject (sous-volume), vous pouvez recréer le sous-volume et utiliser la commande cp pour restaurer l'intégralité du contenu à partir d'un instantané.

Restaurer un sous-volume supprimé :

[tuts@fosslinux ~]$ btrfs subvolume create $HOME/Desktop/myprojectCreate subvolume '/home/tuts/Desktop/myproject'
[tuts@fosslinux ~]$ cp -rT $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myproject
Utilisation de la commande d'instantané btrfs

Vous pouvez restaurer un sous-volume supprimé en prenant un instantané d'instantanés.

Restaurez un sous-volume à l'aide de la commande btrfs snapshot :

[tuts@fosslinux ~]$ snapshot du sous-volume btrfs $HOME/.myprojectsnapshots/myproject-day1 $HOME/Desktop/myprojectCréer un snapshot de '/home/tuts/.myprojectsnapshots/myproject-day1' dans '/home/tuts /Desktop/monprojet'
Récupérer des instantanés btrfs à partir d'un lecteur externe

Vous pouvez utiliser la commande cp pour restaurer un instantané à partir d'un lecteur USB ou d'un lecteur externe.

Récupérer un fichier :

[tuts@fosslinux ~]$ cp /run/media/tuts/bk/myproject-day1/day0.txt $HOME/Desktop/myproject

Vous pouvez utiliser les commandes btrfs send et btrfs receive pour récupérer un instantané entier. Vous devez définir l'option de lecture seule sur false pour restaurer un sous-volume accessible en écriture.

Récupérer un instantané entier :

[tuts@fosslinux ~]$ sudo btrfs envoyer /run/media/tuts/bk/myproject-day1 | sudo btrfs reçoit le mot de passe $HOME/Desktop/[sudo] pour tuts :At subvol /run/media/tuts/bk/myproject-day1At subvol myproject-day1

Récapitulatif

L'article a mis en évidence certaines fonctionnalités de Btrfs qui valent la peine d'être apprises. Btrfs a été créé comme une alternative au système de fichiers ZFS et offre de nombreuses fonctionnalités de système de fichiers avancées pour les systèmes d'exploitation Fedora et Linux.

Vous pouvez en savoir plus sur Btrfs en utilisant la commande btrfs – – help ou la documentation en ligne, à laquelle vous pouvez accéder en utilisant man btrfs-subvolume, man btrfs-send ou man btrfs-receive. Je trouve également le wiki officiel de Btrfs pratique.

Nous pourrions tous avoir besoin d'un outil graphique pour interagir avec Btrfs ! À vous, l'équipe du projet Fedora.


Fedora
  1. Linux - Pourquoi n'y a-t-il pas de système de fichiers Rootfs présent sur le système ?

  2. Caractéristiques du système de fichiers "Btrfs"

  3. Comprendre le fichier /etc/inittab sous Linux

  4. Quelles sont les options de montage pour améliorer les performances du système de fichiers ext4 sous Linux

  5. Swapon a échoué :argument non valide sur un système Linux avec le système de fichiers Btrfs

Comment ajouter un nouveau périphérique au système de fichiers BTRFS sous Linux

Comment monter un système de fichiers Linux distant à l'aide de SSHFS

Choisissez le meilleur système de fichiers pour votre Linux

Tout ce que vous devez savoir sur le système de fichiers Linux

Comprendre les niveaux d'exécution Linux de la bonne façon

Comprendre le fichier /etc/fstab sous Linux