Bir dizin boyutunu ne belirler?


10

Bir dizinin kendisinin büyüklüğünün içindeki dosyaların boyutlarından farklı olduğunu biliyorum.

Bir dizini içindeki dizinlerin ve dosyaların bir listesi olarak düşünüyorum, bu nedenle bir dizinin boyutu, blok boyutu kısıtlaması nedeniyle en az 4096 bayt ile dosya / dizin sayısı ile ilgili olmalıdır.

Ancak sistemimde, 4096 bayt ile çok sayıda iyi dizinlere ve yaklaşık 10 megabayt olan daha az nüfuslu bazı dizinlere sahibim. Lütfen bunun neden olduğunu açıklayabilir misiniz?


1
Daha fazla okumak için, bu oldukça bilgilendiricidir: askubuntu.com/a/404716/380067
kos

3
Sadece dizindeki girişlerin sayısı değil, aynı zamanda isimlerinin uzunluğu ile de ilgilidir.
kasperd

Yanıtlar:


13

Kullanılan dosya sistemi ve herhangi bir zamanda o dizindeki maksimum varlık sayısı boyutu belirler. Dizin için ayrılan varsayılan boyut tükendikten sonra, dizin için daha fazla alan ayrılır. Ancak, varlık sayısı azaldığında, ayrılan alan otomatik olarak serbest bırakılmaz. Dolayısıyla, bir noktada bir dizinde 10 milyon varlık varsa, bunların 9.999.999'u silinirse aynı boyutta kalır. Bu, bu Unix ve Linux gönderisinde olduğu gibi ilginç durumlara yol açar .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Bu, diğer dosya sistemleri için geçerli değildir. ext{2,3,4}Dosya sistemleri etkilenir. NTFS daha azdır. tmpfsve btrfs değildir. ZFS oldukça tutucu, 2ikinci statkomut için çıktı aldım .

İlişkili:


Harika! Hala bunun nasıl olabileceğini merak ediyordum.
kos

XFS etkilenmez! eklemeli
Edward Torvalds
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.