Mengapa setiap direktori memiliki ukuran 4096 byte (4 K)?

33

Seperti yang dikatakan subjek; Saya ingin tahu mengapa setiap direktori memiliki ukuran sama dengan 4K bahkan jika mereka berisi file dengan ukuran lebih besar dari 4K.

Silakan lihat di bawah ini: -

$ ls -lh
total 2.0M
drwxr-xr-x 4 ankit ankit 4.0K Sep 11 07:28 Desktop

$ ls -lrh Desktop/
-rw-rw-r-- 1 ankit ankit 9.1M Aug 4 11:15 sophosthreatsaurusaz.pdf
-rw------- 1 ankit ankit 107K Dec 27 2010 KP 3 0.pdf
drwxrwsr-x 9 ankit ankit 4.0K Sep 10 19:26 eclipse

PS: Saya tahu du -shutilitas baris perintah.

Sunting: Saya mengasumsikan direktori sebagai wadah untuk file.

Ankit
sumber
Ini adalah meta-data dari direktori
Tachyons

Jawaban:

34
  • Tanpa terlalu teknis, pikirkan entri direktori hanya sebagai "tautan" ke daftar file yang berisi direktori "."
  • Kemudian, seperti halnya segalanya, lsmenunjukkan ukuran tautan itu , bukan total ruang yang ditempati oleh isi direktori.
  • Ukuran minimum yang harus ditempati oleh entri / tautan file atau direktori adalah satu blok, yang biasanya 4096 bytes / 4K pada kebanyakan filesystem ext3 / 4.
ish
sumber
7
Anda mengatakan bahwa "Ukuran minimum yang harus ditempati entri atau tautan file atau direktori adalah satu blok" tetapi saya yakin bahwa saya telah melihat ukuran file kurang dari 4K.
Lakshay Garg
1
@LakshayGarg walaupun file bisa kurang dari 4K, maka itu akan menyebabkan apa yang disebut "fragmentasi internal", di mana hanya beberapa byte dari blok yang telah digunakan untuk menyimpan file kecil.
phyloflash
@ phyloflash beberapa sistem file (misalnya NTFS) menyimpan file kecil dalam entri file sendiri (untuk NTFS itu ada di entri MFT). Dengan cara ini isinya menempati blok alokasi nol, dan fragmentasi internal berkurang.
Ruslan
26

Untuk memahami ini, Anda sebaiknya memiliki pengetahuan dasar tentang hal berikut (sistem file):

  • inode (berisi atribut file, metadata file, struktur pointer)
  • file (dapat dianggap sebagai tabel dengan 2 kolom, nama file dan inode-nya, inode menunjuk ke blok data mentah pada perangkat blok)
  • direktori (hanya file khusus, wadah untuk nama file lain. Ini berisi array nama file dan nomor inode untuk setiap nama file. Juga menggambarkan hubungan antara orang tua dan anak-anak.)
  • tautan simbolis VS tautan keras
  • dentry (entri direktori)
  • ...

Pada ext4sistem file tipikal (apa yang kebanyakan orang gunakan), inodeukuran default adalah 256 byte, ukuran blok 4096 byte.

Direktori hanyalah file khusus yang berisi array nama file dan nomor inode. Ketika direktori dibuat, sistem file mengalokasikan 1 inode ke direktori dengan "nama file" (sebenarnya nama dir). Inode menunjuk ke satu blok data tunggal (overhead minimum), yaitu 4096 byte. Itu sebabnya Anda melihat 4096 / 4.0K saat menggunakan ls.

Anda bisa mendapatkan detailnya dengan menggunakan tune2fs& dumpe2fs.

Contoh

root@ubuntu:~# tune2fs -l /dev/ubuntu/root 
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2fca4cbb-22f1-4328-ab13-cacedb360930
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              967680
Block count:              3931136
Reserved block count:     0
Free blocks:              2537341
Free inodes:              517736
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      416
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8064
Inode blocks per group:   504
RAID stride:              35637
Flex block group size:    16
Filesystem created:       Thu Mar 15 14:31:04 2012
Last mount time:          Sat Oct 20 20:28:04 2012
Last write time:          Sat Oct 20 20:23:32 2012
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Oct 20 20:22:57 2012
Check interval:           0 (<none>)
Lifetime writes:          54 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       272350
Default directory hash:   half_md4
Directory Hash Seed:      d582ad79-75a0-4964-9a48-33ddba04df5c
Journal backup:           inode blocks
Terry Wang
sumber
7

Jika suatu file berisi data apa pun (bahkan satu byte), ia akan menempati satu blok pada disk (yang biasanya 4k hari ini). Satu blok tidak dapat dibagi antar file. Ini berarti bahwa ruang seluruh blok itu tidak akan tersedia untuk file lain, sehingga dianggap "digunakan".

Sumber

ThiagoPonte
sumber