Jak wyprowadzić, ile rozmiaru nominalnego pliku jest faktycznie wypełnione danymi? Podobnie vmtouch
jak pokazuje, ile plików jest aktualnie w pamięci ...
Oczekuję, że przepływ pracy będzie taki:
$ fallocate -l 1000000 data
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000 data
$ measure_sparseness
50%
Obejście: Redakcyjne du -bsh
i du -sh
i je porównać.
files
sparse-files
Vi.
źródło
źródło
filefrag
dla dowolnego systemu plików ixfs_bmap -vpl
dla XFS są kluczowymi narzędziami do pokazania, gdzie są dane (i gdzie są wstępnie przydzielone niepisane zakresy) podczas zabawy z rzadkimi plikami i dziurawieniem.filefrag data
-> wieleFIBMAP: Invalid argument
->data: 1 extent found
...filefrag -e
działa doskonale na przynajmniej XFS i ext4. Nie testowałem na innych. Wykorzystuje FIEMAP (mapa zasięgu), zastępując FIBMAP. Jeśli teioctl
nie działają, to nie będzie przydatne.filefrag
nie ma-e
opcji.e2fsprogs
? Jestem prawie pewien, że nie jest to ostatnia funkcja. Istnieje również-v
opcja, która drukuje te same pełne informacje (plus dodatkowe linie nagłówka). Może będzieszfilefrag
to miał.xfs_bmap
Jednak w przeciwieństwie do tego, nie wskazuje wyraźnie otworów z oddzielnymi liniami, po prostu ma nieciągłości w pozycji pliku. W każdym razie nie jestem zaskoczony, żetmpfs
nie obsługuje FIEMAP, ponieważ nie ma urządzenia blokowego jako sklepu z zapleczem, więc nie ma sensownej wartości dla lokalizacji zakresów.Odpowiedzi:
find
ma%S
specyfikator formatu, który jest nawet nazywany „rzadkością”źródło
ln -s foo link
:, „rzadkość”link
: 0. Gniazda i FIFO mają długość zero, więcfind
pokazuje rzadkość 1.Jeśli
find
nie masz tej opcji, metodą działającą w systemie UNIX od lat 70-tych jest:Które wydrukuje rzeczywistą liczbę użytych bloków i najwyższy bajt, jaki kiedykolwiek napisano. Na tej podstawie możesz łatwo obliczyć, ile bloków faktycznie nie zostało przydzielonych.
źródło
Chociaż
find
„s%S
wypisze wyjście krótkie, więcej szczegółów można zajrzeć dosparsetest
których pisałem - Open Source, a na github tutaj . Zmodyfikuj go, jeśli chcesz wydrukować (np.) Każdą dziurę.Artykuł na blogu pokazujący problemy z rzadkimi przydziałami tutaj przy użyciu
sparsetest
do debugowania problemu.źródło
vmtouch -v
drukuje mapę buforowanych obszarów w pliku?lseek
pomocąSEEK_HOLE
iSEEK_DATA
. Proste do zrobienia.