Neden her dizinde 4096 bayt (4 K) var?


33

Konunun dediği gibi; 4K'dan büyük dosyalar içeriyor olsa bile neden her dizinin 4K'ye eşit olduğunu bilmek istiyorum.

Lütfen aşağıdakilere bir göz atın: -

$ 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

Not: du -shKomut satırı yardımcı programının farkındayım .

Düzenleme: Dizini dosyalar için bir kapsayıcı olarak kabul ediyorum.


Bu, dizinin meta-verileridir
Tachyons 12.01.2012

Yanıtlar:


34
  • Çok teknik olmadan, bir dizin girişini, sadece "içerdiği" dosyaların bulunduğu listeye bir "bağlantı" olarak düşünün .
  • Sonra, her şeyde olduğu gibi , dizinin içeriğinin kapladığı alanı değil, o bağlantınınls boyutunu gösterir .
  • Bir dosya veya dizin girişinin / bağlantısının kaplaması gereken asgari boyut, çoğu ext3 / 4 dosya sisteminde genellikle 4096 bayt / 4K olan bir bloktur.

7
"Bir dosya veya dizin girişinin / bağlantısının asgari boyutu bir blok olmalıdır" diyorsunuz, ancak dosya boyutunun 4K'dan küçük olduğunu gördüm.
Lakshay Garg,

1
@LakshayGarg her ne kadar dosya 4K'dan az olsa da, küçük dosyayı saklamak için bloğun sadece birkaç baytının kullanıldığı "iç parçalanma" denilen şeye neden olur.
phyloflash

@phyloflash bazı dosya sistemlerini (örneğin NTFS) küçük dosyaları dosya girişlerinde saklar (NTFS için bu MFT girişindedir). Bu şekilde içerikleri sıfır tahsis blokları işgal eder ve iç parçalanma azalır.
Ruslan

26

Bunu anlamak için aşağıdakilerle ilgili temel bilgilere sahip olsanız iyi olur (dosya sistemi):

  • inode (dosya özelliklerini, dosyanın meta verilerini, işaretçi yapısını içerir)
  • dosya (2 sütunlu bir tablo olarak kabul edilebilir, dosya adı ve inode, inode blok cihazındaki ham veri bloklarına işaret eder)
  • dizin (yalnızca özel bir dosya, diğer dosya adları için bir kapsayıcı. Her dosya adı için bir dosya adı dizisi ve inode numaraları içerir. Ayrıca, ebeveyn ile çocuklar arasındaki ilişkiyi de açıklar.)
  • sembolik bağlantı VS sabit bağlantı
  • dentry (dizin girişleri)
  • ...

Tipik bir ext4dosya sisteminde (çoğu insanın kullandığı), varsayılan inodeboyut 256 bayttır, blok boyutu 4096 bayttır.

Bir dizin sadece bir dosya isimleri dizisi ve inode numaraları içeren özel bir dosyadır. Dizin oluşturulduğunda, dosya sistemi "dosya adı" (aslında dir adı) ile dizine 1 inode atadı. Inode, 4096 bayt olan tek bir veri bloğuna (minimum ek yük) işaret eder. Bu yüzden kullanırken 4096 / 4.0K görüyorsunuz ls.

Ayrıntıları tune2fs& kullanarak alabilirsiniz dumpe2fs.

Örnek

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

7

Bir dosyada herhangi bir veri varsa (tek bir bayt bile olsa), diskte bir blok yer alır (bu günlerde genellikle 4k olur). Bir blok dosyalar arasında paylaşılamaz. Bu, tüm bloğun boşluğunun diğer dosyalar için uygun olmayacağı anlamına gelir, bu nedenle "kullanılmış" olarak kabul edilir.

Kaynak

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.