Mengapa ukuran file "dot" "." melebihi 4096?

10

Hari ini saya menemukan direktori "kosong" dengan ukuran 4MB.

Tidak ada konten yang terlihat, jadi saya mencoba ls -lah. Ini menunjukkan kepada saya beberapa file tersembunyi (tidak terlalu besar). Mencari alasan mengapa direktori itu sangat besar saya menemukan bahwa file dot ( .) memiliki ukuran 3,9MB.

Apa yang disimpan dalam file itu? Bukankah itu hanya semacam tautan ke direktori yang sama?

Berikut ini adalah keluaran shell (dianonimkan):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 ([email protected]) (gcc version 4.1.1 20070105 (Red Hat 4.1.1-52)) #1 SMP Mon Oct 22 08:32:04 EDT 2007
-bash# pwd
/data/foo/bar/tmp
-bash# ls -lah
total 4.1M
drwxrwxrwx  3 nobody nobody 3.9M Nov 21 10:02 .
drwxrwxrwx 16 nobody nobody 4.0K Aug 27 17:26 ..
-rw-------  1 root   root    20K Oct 25 14:06 .bash_history
...
Martin Hennings
sumber

Jawaban:

14

File dot, seperti setiap direktori, berisi daftar nama untuk file dalam direktori ini dan nomor inode mereka. Jadi, jika Anda pernah memiliki banyak file di direktori itu (bukan tidak mungkin untuk direktori "tmp") yang akan membuat entri direktori tumbuh ke ukuran ini.

Setelah file hilang, sistem file tidak secara otomatis mengecilkan file direktori lagi.

Anda dapat bereksperimen dengan ini sendiri dengan membuat direktori kosong baru, lakukan ls -ladi dalamnya untuk melihat ukuran awal (4096 pada mesin saya) kemudian touchmemasukkan banyak file, yang akan membuat ukuran direktori bertambah.

(Ya, saya tahu bahwa saya menyembunyikan / tidak akurat tentang banyak detail di sini. Tetapi OP tidak meminta penjelasan lengkap tentang cara kerja sistem file EXT *.)

Bristol
sumber
2
Terima kasih, ini sepertinya menjelaskan fenomena itu. Dua pertanyaan karena penasaran: Kapan file direktori menyusut lagi? Dan adakah cara untuk menunjukkan isi file itu?
Martin Hennings
3
(1) Lihat juga unix.stackexchange.com/questions/38639/… - jawaban singkat, hapus direktori dan buat ulang.
Bristol
2
(2) Sedihnya, tidak lagi. Ini digunakan untuk versi UNIX lama.
Bristol
Anda juga dapat berjalan e2fsck -Ddi sistem file, tapi itu mengharuskannya tidak di-mount.
psusi
@Bristol debugfsmungkin berwawasan luas
Volker Siegel