Mengapa du -b menunjukkan hasil yang berbeda dari stat?


5

Saya baru-baru ini mengalami masalah ini:

find /tmp/tmp33hn25wv -type f -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'
10420224

du -bs /tmp/tmp33hn25wv
12198004    /tmp/tmp33hn25wv

Hasil berbeda secara konsisten. Semua file ditulis dalam beberapa byte ukuran blok.

Di mana du menemukan byte tambahan ini? Saya mengerti bahwa sistem file mungkin memerlukan lebih atau kurang ruang untuk menyimpan konten file, tetapi saya berharap -bopsi itu duberarti harus menghitung ukuran "nyata", bukan ukuran yang digunakan oleh sistem file ...

Jawaban:


3

dutermasuk ukuran direktori. Jika Anda menambahkan -type dke findkriteria Anda mungkin mendapatkan hasil yang Anda inginkan (saya lakukan pada pohon direktori yang hanya berisi file standar):

find /tmp/tmp33hn25wv \( -type f -o -type d \) -exec stat --format='%s' {} + |\
    awk '{s+=$1} END {print s}'

Namun, mungkin ada jenis file lain yang menghabiskan banyak ruang, jadi coba hapus semua jenis pemeriksaan ini:

find /tmp/tmp33hn25wv -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'

Ini menarik. Saya harus memeriksanya ketika saya kembali bekerja. Namun, apa ukuran direktori yang "jelas"? Saya mengerti bahwa, dalam hal sistem file, direktori memang membutuhkan ruang, tetapi apa yang diperhitungkan terhadap ruang itu, ketika dudiperhitungkan? Apakah ini struktur inode? Apakah seluruh daftar entri?
wvxvw

Direktori tampaknya dialokasikan dalam kelipatan 4096 byte (setidaknya pada disk saya dengan ukuran blok 4KiB). Tanpa memeriksa, saya berasumsi bahwa direktori diisi dengan entri kosong untuk mengisi blok yang dialokasikan.
AFH

Apa yang terjadi dengan findperintah alternatif saya ?
AFH

OK, sepertinya memang berasal dari direktori. Ketika saya menjalankan perintah yang sama, tetapi untuk direktori daripada file, saya mendapatkan angka yang sama duakan menghasilkan. Jadi, sekarang pertanyaannya bermuara pada apa yang dudiukur ketika mengukur direktori.
wvxvw

Setiap kali ls -ldaftar direktori, itu menunjukkan kelipatan dari ukuran blok: seperti yang saya katakan sebelumnya, saya menganggap ukuran yang dialokasikan diisi dengan entri kosong, sehingga ukuran yang dialokasikan dan jelas selalu sama. Perhatikan bahwa jenis file lainnya, seperti FIFO dan tautan simbolik, dapat menempati ruang disk, yang berarti bahwa perbedaannya tidak perlu kelipatan dari jumlah direktori.
AFH
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.