Vous devriez jeter un œil à btrfs quota
et btrfs qgroups
(groupes de quotas).
Fondamentalement, qgroups
faites exactement ce que vous avez demandé, ils suivent la quantité d'espace allouée par les sous-volumes. Pour activer la qgroup
fonctionnalité d'un btrfs
système de fichiers, vous devez
# btrfs quota enable /path/to/btrfs/filesystem
Cependant, avant de faire cela, soyez averti que cela déclenche un recalcul complet des qgroup
données, ce qui prendra un certain temps, en particulier pour les systèmes de fichiers volumineux avec de nombreux sous-volumes. Ce processus s'exécute de manière asynchrone en arrière-plan. Vous pouvez déjà vérifier le statut du qgroups
avec
# btrfs qgroup show /path/to/btrfs/filesystem
Cela vous donnera une sortie comme celle-ci:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(L'avertissement de la première ligne est présent tant que la nouvelle analyse est toujours en cours.)
Btrfs crée automatiquement un qgroup
pour chaque sous-volume. Dans ce cas, il y a trois sous-volumes avec les ID de sous-volume 4881, 7990 et 8400. La partie avant la barre oblique est le niveau du qgroup
. Chaque sous qgroup
- volume est au niveau 0. De plus, il y a une spéciale qgroup
au niveau 0 qui a toujours l'ID 5 et correspond à la racine du système de fichiers btrfs.
Pour chacun, qgroup
la sortie ci-dessus montre combien d'espace est référencé par elle. Cela signifie que le sous-volume correspondant contient des fichiers dont la taille totale est égale au nombre indiqué.
Cependant, en raison des instantanés et de la nature de copie sur écriture des sous-volumes btrfs, il est possible que des fichiers soient partagés. Cela signifie que le contenu (ou en fait l'étendue) des fichiers peut être référencé par plusieurs sous-volumes. Ceci est exprimé par le deuxième chiffre qui montre combien d'espace est exclusivement alloué par chaque sous-volume et n'est partagé avec aucun autre sous-volume. Si vous supprimez un sous-volume, c'est l'espace qui sera réellement libéré.
Si vous souhaitez savoir combien d'espace serait libéré si vous supprimez plusieurs sous-volumes, vous pouvez utiliser les niveaux susmentionnés. qgroups
sont organisés en une hiérarchie et des groupes aux niveaux supérieurs (supérieurs à 0) regroupent les informations des niveaux inférieurs.
Ainsi, pour savoir combien d'espace serait libéré si les sous-volumes 4881 et 7990 (dans l'exemple ci-dessus) étaient supprimés, créez un nouveau qgroup
(arbitrairement avec l'ID 0, mais vous pouvez choisir ce que vous voulez ici) au niveau 1 avec
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Attribuez ensuite le nouveau créé en qgroup
tant que parent au qgroups
sous-volume que vous souhaitez supprimer avec
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Cela déclenchera une nouvelle analyse des informations de quota qui peut prendre un certain temps. S'il est terminé et que vous émettez maintenant
# btrfs qgroup show -p /path/to/btrfs/filesystem
vous obtenez une sortie comme celle-ci:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(J'ai ajouté le -p
drapeau pour ajouter la parent
colonne à la sortie qui montre la relation parent / enfant du qgroups
.)
Maintenant, la ligne avec qgroup
1/0
vous indique combien d'espace est référencé par les deux sous-volumes que vous souhaitez supprimer et, plus important encore, elle vous indique combien d'espace est alloué par eux exclusivement . Il s'agit de la quantité d'espace qui sera libérée si vous supprimez les deux sous-volumes.
Je me demande aussi pourquoi ils disent que ce serait si lent?
Cela est dû à la nature de copie sur écriture des btrfs avec des instantanés. Si vous créez un instantané dans btrfs (normalement), toutes les données réelles du sous-volume nouvellement créé qui contient l'instantané sont partagées avec la source de l'instantané. Ce n'est que lorsqu'un fichier est modifié ou remplacé dans la source qu'il pointe vers un contenu différent (étendues). Il est donc très difficile d'évaluer la quantité d'espace qui serait réellement libérée si un sous-volume est supprimé car vous devez tenir compte de tout l'espace partagé avec d'autres sous-volumes.