Mengapa ukuran direktori selalu 4096 byte di unix?

26

Saya yakin file direktori memiliki informasi jauh lebih sedikit daripada 4096 byte. Saya tahu ukuran sektor adalah 4.096 byte. Tetapi file normal lebih kecil dari yang ada.

Mengapa Unix memesan 4096 byte untuk setiap folder?

Lazer
sumber

Jawaban:

30

Ini adalah ukuran awal yang diperlukan untuk menyimpan meta-data tentang file yang terkandung dalam direktori tersebut (termasuk nama). Alokasi awal sama dengan ukuran satu sektor, tetapi dapat tumbuh di atas itu jika perlu. Setelah dialokasikan, ruang tidak dibebaskan jika file dihapus, untuk mengurangi fragmentasi.

Sebagai contoh:

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

sumber

harrymc
sumber
3
Terima kasih untuk bagian "ruang tidak dibebaskan jika file dihapus". Saya memulihkan cadangan dan tidak yakin mengapa dua direktori yang identik memiliki ukuran yang berbeda.
Tomasz Zieliński
11

Terkadang 4096 byte adalah unit alokasi terkecil untuk beberapa sistem file. Itu sebabnya direktori memiliki 4096.

Hal yang sama berlaku untuk file. Meskipun beberapa file mungkin melaporkan kurang dari 4096, mereka sebenarnya mengambil setidaknya 4096 penyimpanan dari disk.

Pablo Santa Cruz
sumber
4
Yup, seperti kata Pablo. Ukuran yang Anda lihat dengan file adalah ukuran konten file, bukan file pada ukuran disk. Ukuran disk pada file-file kecil itu sebenarnya 4096, sama seperti direktori karena hanya dapat mengalokasikan ruang disk dalam blok sebesar itu
Dan McGrath
1
Ini tidak ada hubungannya dengan pertanyaan.
harrymc
Ini salah. Lihat jawaban yang diterima.
Duncan X Simpson
Salah? Bukankah itu kombinasi dari kedua jawaban? 4096 adalah ukuran halaman, lihat sistem paging memori untuk info lebih lanjut.
Harrichael
5

4096 dicadangkan untuk mengurangi fragmentasi, karena seringkali ukuran sebenarnya dari metadata yang terkandung akan berfluktuasi berdasarkan pada isi direktori. Jika terus tumbuh dan menyusut (katakanlah itu berisi file log atau konten dinamis) dari waktu ke waktu dapat merusak kinerja. Ini kemungkinan tidak akan terjadi dengan satu folder, tetapi di seluruh sistem file itu akan bertambah dengan cepat.

MDMarra
sumber
3

Itu tergantung pada sistem file. Pada ext2 / 3/4 itu "adalah" 4096. Pada reiserfs itu bisa 9608 (saya $HOME) 1032 ( /tmp) atau 48 (beberapa dir /tmp).

Secara default pada blok ext2 / 3/4 adalah 4096 - dan file tidak bisa kurang dari itu. Jika file lebih kecil, tetap dibutuhkan seluruh blok. Karena tidak ada gunanya bertanya tentang ukuran logis dari direktori dan informasi ini mungkin tidak pada disk pula dan harus melaporkan sesuatu itu melaporkan ukuran blok kali jumlah blok yang diambil yaitu ruang fisik yang telah diambil.

Maciej Piechotka
sumber
Saya yakin ukuran file juga tidak disimpan bersama file-file tersebut. Itu dihitung ketika diperlukan. Tetapi untuk file, ini melaporkan actualukuran file.
Lazer
1
Ukuran file disimpan dengan inode. Untuk yakin ext2 inode berisi ukuran dalam byte di dalamnya. Kalau tidak, tidak mungkin untuk menemukan di mana file berakhir seperti \0karakter hukum dalam file biner. PS. Dimungkinkan untuk membuat FS yang tidak menyimpannya - tetapi tidak ext familly (dan mungkin tidak populer lainnya).
Maciej Piechotka