Neden bir dizinin boyutu unix'de her zaman 4096 bayt?


26

Bir dizin dosyasının 4096 bayttan çok daha az bilgiye sahip olduğundan eminim. Sektör boyutunun 4096 bayt olduğunu biliyorum. Fakat ondan daha küçük normal dosyalar var.

Unix neden her klasör için 4096 bayt ayırıyor?

Yanıtlar:


30

Bu, bu dizinde bulunan (isimler dahil) dosyalar hakkında meta verileri depolamak için gereken ilk boyuttur. İlk tahsis bir sektörün büyüklüğüne eşittir, ancak gerekirse bunun üzerinde büyüyebilir. Tahsis edildikten sonra, parçalanmayı azaltmak için dosyalar kaldırılırsa alan boşaltılmaz.

Örneğin:

$ 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/

kaynak


3
Teşekkürler, "dosyalar kaldırılırsa alan boşaltılmaz" bölümü için teşekkürler. Bir yedeği geri yükledim ve iki farklı dizinin neden farklı boyutlara sahip olduğundan emin değildim.
Tomasz Zieliński

11

Bazen 4096 bayt, bazı dosya sistemleri için en küçük tahsisat birimidir. Bu yüzden dizinde 4096 var.

Aynı şey dosyalar için de geçerlidir. Bazı dosyalar 4096'dan daha azını rapor edebilse de, diskten en az 4096 depolama alanı alıyorlar.


4
Yup, Pablo'nun dediği gibi. Dosyayla aradığınız boyut, disk boyutundaki dosyalar değil, dosya içeriği boyutudur. Bu küçük dosyaların disk boyutu aslında 4096'dır, tıpkı bu boyuttaki bloklarda yalnızca disk alanı ayırabildiği gibi
Dan McGrath

1
Bunun soru ile ilgisi yok.
harrymc

Bu yanlış. Kabul edilen cevaba bakınız.
Duncan X Simpson,

Yanlış? Her iki cevabın bir kombinasyonu değil mi? 4096, sayfanın boyutudur, daha fazla bilgi için bellek çağrı sistemlerine bakın.
Harrichael

5

4096, parçalanmayı azaltmak için ayrılmıştır, çünkü içerilen meta verinin gerçek boyutu genellikle dizin içeriğine bağlı olarak değişecektir. Zaman içinde sürekli büyüyor ve daralıyorsa (günlük dosyalarını veya dinamik içeriği içerdiğini söyleyin) performansa zarar verebilir. Bu muhtemelen bir klasörde gerçekleşmez, ancak tüm dosya sisteminde hızlı bir şekilde toplanır.


3

Bu dosya sistemine bağlıdır. Ext2 / 3 / 4'te "4096" dır. Reiserfs'de 9608 (my $HOME) 1032 ( /tmp) veya 48 (bazı dir /tmp) olabilir.

Ext2 / 3/4 bloğunda varsayılan olarak 4096'dır ve dosya bundan daha azını alamaz. Dosya daha küçükse, yine de bütün bir bloğu alır. Dizinin mantıksal büyüklüğünü sormak anlamsız olduğundan ve bu bilgi muhtemelen diskte bulunmadığından ve alınan blokların, yani alınan fiziksel alanın bir kaç katı büyüklükte olduğunu bildirmesi gerekir.


Dosya boyutu da dosyaları ile saklanmadığından eminim. Gerektiğinde hesaplanır. Ancak dosyalar için actualdosya boyutunu bildirir .
Lazer

1
Dosya boyutu inode ile birlikte saklanır. Elbette ext2 inode, içindeki bayt cinsinden boyutu içerir. Aksi takdirde, dosyanın nerede bittiğini \0ikili dosyalarda yasal karakter olarak bulmak mümkün olmaz . PS. Saklamaması için FS oluşturmak mümkündür - ama sadece familly (ve muhtemelen başka hiçbir popüler olmayan) değil.
Maciej Piechotka
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.