Neden “nokta” dosyasının boyutu “.” 4096'yı aşar mı?


10

Bugün 4 MB boyutunda "boş" bir dizin buldum.

Görünür içeriği yoktu, bu yüzden denedim ls -lah. Bu bana bazı gizli dosyaları gösterdi (çok büyük değil). Dizinin bu kadar büyük olmasının nedenini bulmak için nokta dosyasının ( .) boyutu 3.9MB idi.

O dosyada ne saklanıyor? Bu aynı dizine sadece bir tür bağlantı değil mi?

Kabuk çıktı (anonim):

-bash# more /proc/version
Linux version 2.6.18-8.1.15.el5 (mockbuild@builder6.centos.org) (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
...

Yanıtlar:


14

Nokta dosyası, her dizin gibi, bu dizindeki dosyaların adlarını ve inode numaralarını içerir. Bir zamanlar bu dizinde çok sayıda dosya varsa ("tmp" dizini için olası değildir) dizin girişinin bu boyuta ulaşmasını sağlardı.

Dosyalar kaybolduktan sonra, dosya sistemi otomatik olarak dizin dosyasını küçültmez.

Yeni bir boş dizin oluşturarak kendiniz deneyebilirsiniz ls -la, başlangıç ​​boyutunu (makinemde 4096) görmek için touchyapın, ardından dizin boyutunu büyütecek çok sayıda dosya yerleştirin.

(Evet, burada çok fazla ayrıntı hakkında göz ardı ettiğimi / hatalı olduğumu biliyorum. Ancak OP, EXT * dosya sistemlerinin nasıl çalıştığının tam bir açıklamasını istemedi.)


2
Teşekkürler, bu fenomeni açıklıyor gibi görünüyor. Sadece meraktan iki soru: Dizin dosyası tekrar ne zaman küçülür? Bu dosyanın içeriğini göstermenin bir yolu var mı?
Martin Hennings

3
(1) Ayrıca bkz. Unix.stackexchange.com/questions/38639/… - kısa cevap, dizini silin ve yeniden oluşturun.
Bristol

2
(2) Ne yazık ki, artık değil. Bu eski UNIX sürümlerinde mümkün olmuştu.
Bristol

e2fsck -DDosya sisteminde de çalışabilirsiniz , ancak bunun kaldırılması gerekir.
psusi

@Bristol debugfsanlayışlı olabilir
Volker Siegel
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.