Comment puis-je afficher la quantité de taille nominale de fichier réellement remplie de données? Comme vmtouch
montre la quantité de fichier actuellement en mémoire ...
Je m'attends à ce que le flux de travail soit comme ceci:
$ fallocate -l 1000000 data
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000 data
$ measure_sparseness
50%
Solution: utilisez du -bsh
-les du -sh
et comparez-les.
filefrag
pour tout système de fichiers etxfs_bmap -vpl
pour XFS sont des outils clés pour montrer où se trouvent les données (et où se trouvent les extensions non écrites pré-allouées) lors de la lecture avec des fichiers clairsemés et des perforations.filefrag data
-> multiplesFIBMAP: Invalid argument
->data: 1 extent found
...filefrag -e
fonctionne parfaitement sur XFS et ext4 au moins. Je n'ai pas testé sur d'autres. Il utilise FIEMAP (carte d'extension), avec un repli sur FIBMAP. Siioctl
cela ne fonctionne pas, cela ne sera pas utile.filefrag
n'a pas d'-e
option.e2fsprogs
? Je suis sûr que ce n'est pas une fonctionnalité récente. Il existe également une-v
option qui imprime les mêmes informations détaillées (plus quelques lignes d'en-tête supplémentaires). Peut-être que vous enfilefrag
aurez. Contrairement àxfs_bmap
, cependant, il n'indique pas explicitement les trous avec des lignes distinctes, il a juste des discontinuités dans la position du fichier. Quoi qu'il en soit, je ne suis pas surpris quetmpfs
cela ne prenne pas en charge FIEMAP, car il n'y a pas de périphérique de bloc en tant que magasin de sauvegarde, il n'y a donc pas de valeur raisonnable pour l'emplacement des extensions.Réponses:
find
a un%S
spécificateur de format qui est même nommé "parcimonie"la source
ln -s foo link
"parcimonie" delink
: 0. Les sockets et les FIFO ont une longueur nulle, doncfind
affiche la parcimonie 1.Si votre
find
n'a pas cette option, une méthode qui fonctionne sous UNIX depuis les années 70 est:Qui affichera le nombre réel de blocs utilisés et l'octet le plus élevé jamais écrit. À partir de cela, vous pouvez facilement calculer le nombre de blocs qui n'ont pas été alloués.
la source
Bien que
find
s%S
imprimera une brève sortie, pour plus de détails, vous voudrez peut-être regardersparsetest
ce que j'ai écrit - open source, et sur github ici . N'hésitez pas à le modifier si vous souhaitez imprimer (par exemple) chaque trou.Blog article montrant des problèmes avec les allocations clairsemées ici à l' aide
sparsetest
de déboguer la question.la source
vmtouch -v
imprime la carte des zones mises en cache dans le fichier?lseek
avecSEEK_HOLE
etSEEK_DATA
. Facile à faire.