Bagaimana saya menampilkan berapa ukuran file sebenarnya diisi dengan data? Sukai vmtouch
menunjukkan berapa banyak file saat ini dalam memori ...
Saya berharap alur kerjanya menjadi seperti ini:
$ fallocate -l 1000000 data
$ measure_sparseness data
100%
$ fallocate -p -o 250000 -l 500000 data
$ measure_sparseness
50%
Solusi: penggunaan du -bsh
dan du -sh
dan membandingkannya.
files
sparse-files
Vi.
sumber
sumber
filefrag
untuk sistem file apa pun danxfs_bmap -vpl
untuk XFS adalah alat utama untuk menunjukkan di mana data berada (dan di mana luasan tidak tertulis yang dialokasikan sebelumnya) saat bermain-main dengan file jarang dan lubang-meninju.filefrag data
-> beberapaFIBMAP: Invalid argument
->data: 1 extent found
...filefrag -e
bekerja dengan baik pada XFS dan ext4 setidaknya. Saya belum menguji yang lain. Ini menggunakan FIEMAP (peta tingkat), dengan fallback ke FIBMAP. Jika ituioctl
tidak berhasil, maka itu tidak akan berguna.filefrag
tidak ada-e
.e2fsprogs
? Saya cukup yakin ini bukan fitur terbaru. Ada juga-v
opsi yang mencetak info verbose yang sama (ditambah beberapa baris header tambahan). Mungkin Andafilefrag
akan memilikinya. Tidak sepertixfs_bmap
, meskipun, itu tidak secara eksplisit menunjukkan lubang dengan garis yang terpisah, itu hanya memiliki diskontinuitas dalam posisi file. Bagaimanapun, saya tidak terkejut bahwatmpfs
tidak mendukung FIEMAP, karena tidak ada perangkat blok sebagai backing store, jadi tidak ada nilai yang masuk akal untuk lokasi luasan.Jawaban:
find
memiliki%S
penentu format yang bahkan dinamai "sparseness"sumber
ln -s foo link
:, "sparseness" darilink
: 0. Soket dan FIFO memiliki panjang nol, jadifind
menunjukkan sparseness 1.Jika Anda
find
tidak memiliki opsi itu, metode yang dapat digunakan di UNIX sejak tahun 70-an adalah:Yang akan mencetak jumlah sebenarnya blok yang digunakan dan byte tertinggi yang pernah ditulis. Dari sana Anda dapat dengan mudah menghitung berapa banyak blok yang sebenarnya belum dialokasikan.
sumber
Sementara
find
's%S
akan mencetak output singkat, untuk lebih detail Anda mungkin ingin melihatsparsetest
yang saya tulis - open source, dan di github sini . Jangan ragu untuk memodifikasinya jika Anda ingin mencetak (misalnya) setiap lubang.Artikel blog menunjukkan masalah dengan alokasi yang jarang di sini gunakan
sparsetest
untuk men-debug masalah.sumber
vmtouch -v
mencetak peta area yang di-cache dalam file?lseek
denganSEEK_HOLE
danSEEK_DATA
. Mudah untuk dilakukan.