Comment défragmenter un système de fichiers BTRFS

Comment défragmenter un système de fichiers BTRFS

BTRFS est un système de fichiers de copie-écriture (vache) basé sur l'étendue. Les fichiers volumineux sont stockés dans plusieurs étendues de données; Et lorsque ces fichiers volumineux sont modifiés, les extensions à modifier sont copiées sur de nouvelles étendues vides dans un autre emplacement du périphérique de stockage et sont modifiées dans le nouvel emplacement. Ensuite, les extensions des fichiers volumineuses sont re-liés pour pointer vers les étendues mises à jour. Les anciennes étendus ne sont jamais supprimés instantanément.

C'est ainsi que la fonction de copie-écriture (vache) du système de fichiers BTRFS provoque une fragmentation. La fragmentation signifie que les étendues de données des fichiers volumineuses sont dispersées autour de l'ensemble du périphérique de stockage. Ils ne sont pas instantanés. Ainsi, les performances (vitesse de lecture / écriture) du système de fichiers peuvent être réduites.

Pour résoudre ce problème, il est nécessaire de défragmenter le système de fichiers BTRFS de temps en temps. Cet article vous montre comment défragmenter le système de fichiers BTRFS.

Abréviations

Les abréviations (formes courtes) utilisées dans cet article sont les suivantes:

  • Vache - Copie-écriture
  • Btrfs - Système de fichiers B-Tree
  • Disque dur - Disque dur
  • SSD - Disque dur
  • GB - Gigaoctet
  • Machine virtuelle - Machine virtuelle

Conditions préalables

Pour essayer les exemples inclus dans cet article:

  • Vous devez avoir le système de fichiers BTRFS installé sur votre ordinateur.
  • Vous devez avoir un disque dur de rechange / SSD (de toute taille) ou au moins 1 partition de disque dur / SSD gratuit (de toute taille).

J'ai un disque dur de 20 Go SDB Sur ma machine Ubuntu. Je vais créer un système de fichiers BTRFS sur le disque dur SDB.

$ sudo lsblk -e7

Note: Votre disque dur / SSD aura probablement un nom différent de la mienne, tout comme les partitions. Alors, assurez-vous de les remplacer par le vôtre à partir de maintenant.

Vous pouvez créer un système de fichiers BTRFS sur votre disque dur / SSD (sans partitionnement) si vous avez un disque dur de rechange / SSD. Vous pouvez également créer une partition sur votre disque dur / SSD et y créer un système de fichiers BTRFS.

Pour obtenir de l'aide pour l'installation du système de fichiers BTRFS à Ubuntu, consultez l'installation de l'article et utilisez BTRFS sur Ubuntu 20.04 LTS.

Pour obtenir de l'aide pour l'installation du système de fichiers BTRFS dans Fedora, consultez l'installation de l'article et utilisez BTRFS sur Fedora 33.

Création d'un système de fichiers BTRFS

Vous pouvez créer un système de fichiers BTRFS sur votre disque dur / SSD (non assuré) ou sur votre partition de disque dur / SSD.

Pour créer un système de fichiers BTRFS sur le SDB HDD (HDD entier, pas de partitions) et lui donner l'étiquette du système de fichiers données, Exécutez la commande suivante:

$ sudo mkfs.BTRFS -L DATA / DEV / SDB

Un système de fichiers BTRFS doit désormais être créé sur le SDB Disque dur.

Créer le répertoire /données Pour monter le système de fichiers BTRFS que vous venez de créer avec la commande suivante:

$ sudo mkdir -v / data

Pour monter le système de fichiers BTRFS créé sur le SDB HDD sur le /données répertoire, exécutez la commande suivante:

$ sudo mont / dev / sdb / data

Le système de fichiers BTRFS doit désormais être monté, comme vous pouvez le voir dans la capture d'écran ci-dessous:

$ df -h / données

Défragment un système de fichiers BTRFS manuellement

Comme vous pouvez le voir dans la capture d'écran ci-dessous, j'ai copié deux fichiers sur le système de fichiers BTRFS monté sur le /données Répertoire pour démontrer le processus de défragmentation du système de fichiers BTRFS:

$ ls -lh / données

Vous pouvez défragmenter un seul fichier ou un sous-volume / répertoire entier récursivement.

Pour défragmenter le fichier unique / data / ubuntu-20.04.1-Live-Server-AMD64.ISO, Nous exécuterons la commande suivante:

$ sudo btrfs FileSystème défragment -vf / data / ubuntu-20.04.1-Live-Server-AMD64.ISO

Le fichier / data / ubuntu-20.04.1-Live-Server-AMD64.ISO devrait être défragmenté.

Pour défragmenter chaque fichier ou répertoire du /données Répertoire récursivement, exécutez la commande suivante:

$ sudo btrfs FileSystème défragment -rvf / data

Comme vous pouvez le voir, tous les fichiers du /données Le répertoire est défragmenté.

De la même manière, si vous aviez le sous-volume / data / osimages, alors vous pouvez défragmenter tous les fichiers du / data / osimages sous-volume récursivement avec la commande suivante:

$ sudo btrfs FileSystème défragment -rvf / data / osimages

Compression d'un système de fichiers BTRFS tout en défragmentant

Le système de fichiers BTRFS vous permet de compresser des fichiers pendant que vous les défragmentez.

Pour défragmenter tous les fichiers du /données répertoire et comprimez-les avec le Zrib Algorithme de compression en même temps, exécutez la commande defragment avec le -tzlib Option, comme suit:

$ sudo btrfs Filesystem défragment -rvf -czlib / data

Pour défragmenter tous les fichiers du /données répertoire et comprimez-les avec le Zstd Algorithme de compression en même temps, exécutez la commande defragment avec le -czstd Option, comme suit:

$ sudo btrfs fileSystème défragment -rvf -czstd / data

Pour défragmenter tous les fichiers du /données répertoire et comprimez-les avec le LZO Algorithme de compression en même temps, exécutez la commande defragment avec le -clzo Option, comme suit:

$ sudo btrfs Filesystem défragment -rvf -clzo / data

Les fichiers dans le /données Le répertoire doit être défragmenté et comprimé en même temps.

De la même manière, vous pouvez défragmenter et compresser les fichiers d'un sous-volume BTRFS, également.

Défragmentant automatiquement un système de fichiers BTRFS

Vous pouvez activer la défragmentation automatique sur votre système de fichiers BTRFS à l'heure du mont. Cette fonctionnalité du système de fichiers BTRFS défragmera automatiquement tous les fichiers de votre système de fichiers BTRFS.

Pour monter le système de fichiers BTRFS créé sur le SDB HDD dans le /données Répertoire avec défragmentation automatique activée au moment du démarrage, vous devez ajouter une entrée pour le système de fichiers BTRFS dans le / etc / fstab déposer.

Tout d'abord, trouvez le système de fichiers UUID du btrfs créé sur le SDB HDD, comme suit:

$ sudo blkid / dev / sdb

Comme vous pouvez le voir, l'UUID du système de fichiers BTRFS créé sur le SDB Le disque dur est 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE.

Ce sera différent pour vous. Alors, assurez-vous de le remplacer par le vôtre à partir de maintenant.

Ouvrir le / etc / fstab fichier avec le nano Éditeur de texte, comme suit:

$ sudo nano / etc / fstab

Ajoutez la ligne suivante à la fin du / etc / fstab déposer:

UUID = 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE / DATA BTRFS AUTODEFRAG 0 0

Une fois que vous avez terminé, appuyez sur + X suivie par Y et Pour sauver le / etc / fstab déposer.

Pour que les modifications prennent effet, redémarrez votre ordinateur avec la commande suivante:

$ sudo redémarrer

Comme vous pouvez le voir, le système de fichiers BTRFS créé sur le SDB Le disque dur est monté sur le /données Le répertoire avec défragmentation automatique activé.

Problèmes de défragmentation d'un système de fichiers BTRFS

Bien qu'il puisse sembler que la défragmentation améliore les performances du système de fichiers, il y a certains problèmes de défragmentation d'un système de fichiers BTRFS.

Comme BTRFS est un système de fichiers Copy-on-Write (COW), pour comprendre les problèmes avec la défragmentation du système de fichiers BTRFS, vous devez comprendre la fonction de copie-écriture du système de fichiers BTRFS.

Supposons que vous ayez un grand fichier (fichier1) qui utilise 100 étendus (vous pouvez considérer les étendues comme des blocs de fichiers) d'un système de fichiers BTRFS. Si vous créez une autre copie de ce grand fichier (fichier2) Dans le même système de fichiers BTRFS, vous verrez qu'aucun espace disque supplémentaire n'est utilisé. C'est parce que les fichiers sont identiques, et les 100 extensions de chaque fichier sont les mêmes. Ainsi, le système de fichiers BTRFS utilise les mêmes étendues pour les deux fichiers.

Figure 1: fichier1 et fichier2 sont identiques et partagent le même système de fichiers BTRFS pour enregistrer l'espace disque

Maintenant, disons, vous avez modifié l'une des copies du grand fichier (fichier2). La modification doit modifier 10 des 100 extensions. Le système de fichiers BTRFS copiera les 10 étendus requis dans un autre emplacement inutilisé (disons, E101-E110) du système de fichiers et les modifier là-bas. Une fois les modifications écrites sur le disque, le système de fichiers BTRFS re-liera les extensions afin que les modifications soient reflétées dans le grand fichier. Le processus est illustré dans la figure ci-dessous:

Figure 2: dix Les étendues sont modifiées dans fichier2. Ainsi, les extensions sont re-liées dans le système de fichiers BTRFS.

À partir des figures 1 et 2, vous pouvez comprendre comment fonctionne la copie-écriture (vache) et comment le système de fichiers BTRFS utilise la copie-écriture (vache) pour enregistrer l'espace disque.

Maintenant que vous savez comment fonctionne la fonction de copie-écriture (vache) du système de fichiers BTRFS, vous comprendrez les problèmes de défragmentation d'un système de fichiers BTRFS.

  1. Les fichiers défragmentants déplacent les étendues des données BTRFS et tentent de les aligner, l'une après l'autre. Ainsi, les liens de copie sur l'écriture entre les copies du fichier se casse. Cela augmentera les étendues de données redondantes, ainsi que l'utilisation du disque d'un système de fichiers BTRFS qui a été précédemment enregistré en partageant des étendues de données entre des copies identiques (ou presque identiques) du fichier.
  2. Si un sous-volume BTRFS a plusieurs instantanés, la défragmentation du sous-volume brisera les liens de copie-écriture entre le sous-volume et les instantanés. Cela augmentera l'utilisation du disque d'un système de fichiers BTRFS.
  3. Si vous utilisez le système de fichiers BTRFS pour les grandes bases de données ou les images de machines virtuelles (pour stocker les données / disques de machine virtuelle), la défragmentation du système de fichiers aura également un impact négatif sur les performances du système de fichiers.

Conclusion

Dans cet article, vous avez appris à défragmenter un seul fichier et les fichiers d'un répertoire / sous-volume récursivement d'un système de fichiers BTRFS. Vous avez également appris à permettre une défragmentation automatique sur un système de fichiers BTRFS à l'heure du mont. Enfin, l'article a discuté de certains des problèmes de défragmentation d'un système de fichiers BTRFS.