Les instantanés ZFS contiennent beaucoup de données cachées. En général, je vous renvoie à
zfs list -ro space
Ce qui montre une sortie similaire à :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
rootpool/export/home 6.37G 11.7G 2.80G 8.87G 0 0
rootpool/export/home@weekly.2 - 134M - - - -
rootpool/export/home@weekly.1 - 320M - - - -
rootpool/export/home@weekly.0 - 251M - - - -
rootpool/export/home@daily.6 - 1.02M - - - -
rootpool/export/home@daily.5 - 1.04M - - - -
rootpool/export/home@daily.4 - 850K - - - -
rootpool/export/home@daily.3 - 747K - - - -
rootpool/export/home@daily.2 - 326K - - - -
rootpool/export/home@daily.1 - 454K - - - -
rootpool/export/home@daily.0 - 319K - - - -
Cela vous indiquera que j'utilise un TOTAL de 11.7G sur cet ensemble de données particulier et que 2.8G est utilisé par les snapshots et 8.87 est utilisé par le système de fichiers réel (données actives). Cependant, la taille utilisée à côté de chaque snapshot est très trompeuse.
Si vous additionnez tous les chiffres de la colonne "utilisé" pour l'instantané, vous verrez qu'ils ne s'approchent pas du total de USEDSNAP. Cela s'explique par le fait que la valeur USED correspond à la quantité d'espace de stockage utilisé. unique l'espace que chaque instantané détient.
Par exemple :
Si j'ai un pool nommé "newpool" et qu'il contient 2 fichiers de 1G (fileA et fileB) :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
Maintenant, je le casse :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 0.00G 2.0G 0 0
newpool@snap1 11.0G 0.0G 0.00G 2.0G 0 0
Maintenant je supprime 1 des fichiers de 1G (fileA) :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
Maintenant, je crée un nouveau fichier de 1G (fichierC) :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
Maintenant, je le casse à nouveau.
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 1.00G 2.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
Maintenant, je supprime le fichier B (qui se trouve dans les deux instantanés) :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 10.0G 3.0G 2.00G 1.0G 0 0
newpool@snap1 - 1.0G - - - -
newpool@snap2 - 0.0G - - - -
Remarquez comment la colonne de l'instantané USED a fait no reflètent le changement ? C'est parce que le fichier B a été référencé par les deux snapshots et comme il n'est pas unique, il n'est pas indiqué dans le compte USED pour un snapshot particulier. La colonne USEDSNAP indique que l'espace a été utilisé par les instantanés, mais elle ne l'associe pas à un instantané particulier.
Maintenant, si vous retirez snap1 :
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
newpool 11.0G 2.0G 1.00G 1.0G 0 0
newpool@snap2 - 1.0G - - - -
snap2 montre maintenant qu'il a 1.0G utilisé car ces données sont maintenant uniques à cet instantané.
La colonne USED vous montre l'espace que vous pouvez récupérer si vous supprimez cet instantané individuel, mais ne vous montre pas vraiment l'espace que cet instantané réserve.
Maintenant que j'ai dit tout ça
Si vous prévoyez de ne conserver qu'un seul instantané d'un ensemble de données particulier, alors l'option zfs list -ro space devrait vous donner ce que vous recherchez.
Si vous avez plusieurs instantanés en même temps, ces données peuvent être trompeuses. Ne faites pas ce qui vous semble naturel et ne supposez pas que la colonne USED signifie quelque chose lorsque vous avez affaire à plusieurs instantanés. Aussi, du est un mauvais choix sur les répertoires d'instantanés puisque cela vous montre seulement ce qui est référencé par l'instantané, pas l'espace que l'instantané utilise réellement.
La page de manuel de zfs aborde certaines de ces questions, mais elle n'est pas très efficace pour montrer ces relations.