Bandingkan (misalnya) du -bm
ke du -m
.
-b
menetapkan --apparent-size --block-size=1
, tetapi kemudian m
mengganti ukuran blok menjadi 1M
.
Mirip dengan -bh
versus -h
:-bh
berarti --apparent-size --block-size=1 --human-readable
, dan lagi h
menimpa ukuran blok itu.
Ukuran yang terlihat adalah jumlah byte yang menurut aplikasi Anda ada di dalam file. Ini adalah jumlah data yang akan ditransfer melalui jaringan (tidak termasuk header protokol) jika Anda memutuskan untuk mengirim file melalui FTP atau HTTP. Ini juga merupakan hasil dari cat theFile | wc -c
, dan jumlah ruang alamat yang akan digunakan file jika Anda memuat semuanya menggunakan mmap
.
Penggunaan disk adalah jumlah ruang yang tidak dapat digunakan untuk hal lain karena file Anda menempati ruang tersebut.
Dalam kebanyakan kasus, ukuran yang terlihat lebih kecil daripada penggunaan disk karena penggunaan disk menghitung ukuran penuh dari blok terakhir (sebagian) file, dan ukuran yang terlihat hanya menghitung data yang ada di blok terakhir itu. Namun, ukuran yang terlihat lebih besar ketika Anda memiliki file jarang (file jarang dibuat ketika Anda mencari di suatu tempat melewati akhir file, dan kemudian menulis sesuatu di sana - OS tidak repot-repot membuat banyak blok yang diisi dengan nol - - itu hanya membuat blok untuk bagian dari file yang Anda putuskan untuk menulis).
Contoh perincian blok minimal
Mari bermain sedikit untuk melihat apa yang terjadi.
mount
memberi tahu saya bahwa saya menggunakan partisi ext4 yang dipasang di /
.
Saya menemukan ukuran bloknya dengan:
stat -fc %s .
yang memberikan:
4096
Sekarang mari buat beberapa file dengan ukuran 1 4095 4096 4097
:
#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
dd if=/dev/zero of=f bs=1 count="${size}" status=none
echo "size ${size}"
echo "real $(du --block-size=1 f)"
echo "apparent $(du --block-size=1 --apparent-size f)"
echo
done
dan hasilnya adalah:
size 1
real 4096 f
apparent 1 f
size 4095
real 4096 f
apparent 4095 f
size 4096
real 4096 f
apparent 4096 f
size 4097
real 8192 f
apparent 4097 f
Jadi kita melihat bahwa apa pun di bawah atau sama dengan 4096
menggunakan 4096
sebenarnya byte.
Lalu, segera setelah kita melewati 4097
, naik menjadi 8192
yaitu 2 * 4096
.
Maka jelaslah bahwa disk selalu menyimpan data pada batas blok 4096
byte.
Apa yang terjadi pada file jarang?
Saya belum menyelidiki apa sebenarnya representasi itu, tetapi jelas bahwa --apparent
tidak mempertimbangkannya.
Hal ini dapat menyebabkan ukuran yang terlihat lebih besar dari penggunaan disk yang sebenarnya.
Misalnya:
dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f
memberikan:
8192 f
1073741825 f
Terkait:Cara menguji apakah file jarang didukung
Apa yang harus dilakukan jika saya ingin menyimpan banyak file kecil?
Beberapa kemungkinannya adalah:
- gunakan database sebagai ganti sistem file:Database vs Penyimpanan sistem file
- gunakan sistem file yang mendukung suballokasi blok
Bibliografi:
- https://serverfault.com/questions/565966/which-block-sizes-for-millions-of-small-files
- https://askubuntu.com/questions/641900/how-file-system-block-size-works
Diuji di Ubuntu 16.04.