Di Linux, (mungkin sebagai fungsi dari ukuran blok filesystem), ketika saya membuat direktori dan stat
itu, ia mengembalikan ukuran 4096. Saya dapat membuat file di direktori ini, sampai suatu titik, tanpa meningkatkan ukuran yang dirasakan dari direktori (sebagaimana dilaporkan oleh stat
).
Pada titik tertentu, ketika direktori diisi dengan banyak file, ukuran balon direktori (saya tidak berbicara tentang isi direktori, saya berbicara tentang blok yang dikonsumsi untuk mewakili direktori itu sendiri). Jika file dihapus, ukuran direktori tetap sama.
Ini contoh singkatnya:
[root@uxlabtest:/]$ mkdir test
[root@uxlabtest:/]$ stat test
File: `test'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:04.000000000 -0400
Change: 2011-07-26 14:06:04.000000000 -0400
Kemudian sentuh banyak file:
[root@uxlabtest:/]$ for i in `seq 1 10000`; do touch /test/$i; done
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:56.000000000 -0400
Change: 2011-07-26 14:06:56.000000000 -0400
Kemudian hapus file:
[root@uxlabtest:/]$ rm -rf /test/*
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:07:11.000000000 -0400
Modify: 2011-07-26 14:07:12.000000000 -0400
Change: 2011-07-26 14:07:12.000000000 -0400
Pertanyaan saya adalah:
- Mengapa ukuran / jumlah blok suatu direktori meningkat secara monoton?
- Apakah ini fungsi dari sistem file yang mendasarinya atau Linux VFS?
- Apakah ukuran direktori dapat dikurangi tanpa menghapus dan menciptakan kembali direktori?
- Poin bonus: Tunjukkan saya di kode sumber kernel tempat perilaku ini diterapkan.
Jawaban:
Inilah jawaban yang benar untuk ext2 / ext3 / ext4. Jika mereka benar untuk sistem file lain tergantung pada implementasinya.
Tapi kamu beruntung. Saat Anda membuat ulang jumlah file yang sama dengan yang sudah Anda hapus, ukuran direktori akan tetap sama. Hanya ketika Anda menambahkan lebih banyak file, itu akan meningkat.
sumber
Peningkatan blok yang Anda lihat disebabkan oleh bagaimana sistem file mengelola penyimpanan file dan informasi manajemen file terkait. Dalam situasi yang Anda gambarkan, itu akan tampak peningkatan 4K, sehingga setiap entri "baru" / "unik" ke dalam sistem file akan mencadangkan 4K, apakah ukuran data aktual mengisi seluruh 4K. Jika data terkait mengambil seluruh 4K, maka blok 4K lainnya dicadangkan dan diisi sesuai kebutuhan untuk menyimpan seluruh aliran data / urutan yang terkait.
Bergantung pada penghapusan "keras" versus "lunak" yang dikelola oleh sistem file, penghapusan mungkin tidak (biasanya bukan untuk fungsi "hapus") segera membebaskan blokir yang dipesan. Beberapa sistem file dapat membedakan berbagai jenis "penghapusan" dan menyediakan kemampuan manajemen blok penyimpanan yang sesuai.
Bagaimana manajemen penyimpanan didekati dan diimplementasikan berbeda dengan sistem file, sehingga pada OS yang mendukung sistem file multi-modular, OS biasanya hanya akan menyediakan "kait" untuk diintegrasikan dengan sistem file.
sumber
Menambahkan beberapa komentar bertele-tele ke jawaban yang baik user48838:
Semuanya adalah file, termasuk direktori. Untuk menyimpan semua informasi file itu, Anda memerlukan ruang.
Itu juga akan valid untuk menunjukkan, katakanlah, '64B digunakan' untuk direktori kecil dan benar-benar menunjukkan jumlah ruang yang digunakan, tapi kami akan menggunakan banyak dari 4K pada disk, jadi itu adalah keputusan desain untuk hanya menunjukkan jumlah ruang yang digunakan.
Dari perspektif desain FS, mengapa Anda repot-repot melalui kesulitan menghitung apa yang digunakan? Tidak perlu. Dan kemudian Anda harus memindahkan entri untuk menghindari meninggalkan lubang ... ick.
Ketika penghapusan terjadi dan ukuran dir turun sehingga Anda bisa membebaskan blok, semua manajemen itu perlu terjadi sebelum Anda benar-benar bisa melakukannya. Mengapa repot-repot menyimpan beberapa KB? Kemungkinan Anda harus mengembangkannya nanti.
Ditinggalkan sebagai latihan untuk pembaca: Pikirkan mengapa direktori / lost + found Anda dibuat kosong tetapi membutuhkan 16K (setidaknya pada ext3).
sumber