Si vous ouvrez la section defragment
de btrfs-filesystem(8)
, vous verrez l'inscription inquiétante suivante laissée par les développeurs:
Avertissement: Défragmentation de versions de noyau Linux <3.9 ou ≥ 3.14-RC2 ainsi que de versions de noyau stable Linux ≥ 3.10.31, ≥ 3.12.12 ou ≥ 3.13.4 rompre la réforme -Liens de données de vache (par exemple les fichiers copiés avec
cp --reflink
, instantanés ou données de duplication). Cela peut entraîner une augmentation considérable de l'utilisation de l'espace en fonction des liens refusés de Ref.
Cela semble horrible. Un point de vente de btrfs
est sa capacité à créer des instantanés sans tout copier. Je crée principalement des instantanés lisonnamment.
Les fichiers d'instantanés à réadonner comptent-ils également comme des "données de vache" ou seront la déduplication de sous-volée parent survivant sans faire de l'espace disque?
Oui, les fichiers dans un instantané de lecture réaménée comme des données de vache et contribueront à un gonflement de l'espace disque causé par la défragmentation.
Lorsque la défragmentation se produit, les données sont copiées des anciennes étendues en moins de nouvelles étendues. Les nouvelles étendues sont distinctes des anciennes étendues. Toutes les autres copies du fichier (dans les instantanés, par exemple) indiquent toujours les anciennes étendues. Par conséquent, vous avez des données gonflables.
Il y a un long fil de défragmentation de la liste de diffusion démarrer ici qui a des points intéressants.
Juste les instances particulières que vous le signalez. Donc, si vous avez la sous-volume A
et instantanés S1
Et S2
De cette sous-volume A
, puis exécutant de défragme sur Juste Subvolume A
_ _ va briser la réflexion entre elle et les instantanés, mais S1
et S2
Partage toujours toutes les données qu'ils étaient à l'origine. Si vous prenez ensuite un troisième instantané de A
, il partagera des données avec A
, mais pas avec S1
Ou S2
(Car A
ne partage plus les données avec S1
ou S2
).
Compte tenu de ce comportement, vous avez à leur tour trois cas potentiels lorsque vous parlez d'instantanés persistants:
A
dans l'explication ci-dessus), et ce faisant ainsi sur un calendrier qui coïncide avec une rotation d'instantanée. L'idée est de defragment
juste avant de prendre un instantané et d'une fréquence qui donne un bon équilibre entre l'utilisation et la performance de l'espace. En règle générale, si vous prenez cette route, commencez par effectuer la défragmentation sur une base mensuelle si vous faites des instantanés quotidiens ou hebdomadaires, ou avec chaque quatrième instantané, sinon, puis ajustez l'intervalle en fonction de la manière dont cela a une incidence sur votre utilisation de l'espace.Source: Btrfs mailinglist , comme référence par SPaCedog.
De mon expérience d'essai et d'erreur, BTRFS défragmentant des instantanés (pour utiliser la nouvelle compression ZSTD) a entraîné une exclusive de 100% et 0,00 octets de données partagées.
Avant btrfs defragment
:
# btrfs filesystem du -s /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/
Total Exclusive Set shared Filename
1.41GiB 6.27MiB 1.41GiB /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/
Après btrfs defragment
:
# btrfs filesystem du -s /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/
Total Exclusive Set shared Filename
1.42GiB 1.42GiB 0.00B /mnt/btrfs/Backups.backupdb/d2/readonly-snapshot/