Neden metin dosyaları 4kB?


47

Nedense, OS X'te bir metin dosyası oluştururken boş olmadığı sürece her zaman en az 4kB olur. Bu neden? Yaklaşık 1 bayt düz metin için 4.000 bayt meta veri olabilir mi?

görüntü tanımını buraya girin


16
4096 byte, 4000 değil.
Mekanik salyangoz

8
@Mechanicalsnail 4095. Gerçek verilerin bir baytını unuttun
Tobias Kienzler,

5
@Mekanik salyangoz artık bir yıl değil mi? xkcd.com/394 :P
tkbx

Yanıtlar:


52

Dosya sisteminin blok boyutu 4 kB olmalıdır. Veriler bir dosya sisteminde bulunan bir dosyaya yazıldığında, işletim sistemi dosyaya yazılacak verileri içermek için depolama blokları ayırmalıdır.

Tipik olarak, bir dosya sistemi oluşturulduğunda, bu dosya sistemindeki depolama alanı sabit boyutlu bloklara bölünür. Bu Wikipedia makalesi kısaca bu süreci açıklıyor.

Bu dosyanın dosya sisteminin temel blok büyüklüğü 4K bayt blok büyüklüğünde olmalıdır. Bu dosya 1 4K blok kullanıyor ve bu blok içindeki sadece bir bayt gerçek veri içeriyor.


10
Yorum: Windows'ta, gerçek dosya boyutu varsayılan olarak ve diskteki boyut Seçenekler panelinde görüntülenir.
Joe Z.

yani bir blok farklı dosyalar barındırabilir mi?
sudeepdino008

@ sudeepdino008 hayır, her bir dosya için bir blok (en az) (Linux 'ext dosya sistemi (?) bir bloğa birden fazla dosya koymak için bir seçeneğe sahipti / vardı (ancak bu kuralın bir istisnasıdır)
Ro-ee

13

Tüm dosya sistemlerinin bir küme veya blok boyutu veya bir dosyayı tutmak için tahsis edilebilecek en küçük disk alanı vardır. Gerçek dosya boyutu küme / blok boyutundan küçük olsa bile, dosya sisteminizde bir küme veya 4K tüketecektir. Küme boyutu, dosya sistemine ve dosya sistemi seçeneklerine bağlıdır.

Gilles'un belirttiği gibi, sıfır bayt içeriyorsa , sıfır blok / küme kullanır, ancak tipik * nix dosya sistemlerinde bir inode kullanır, bu uyarıları "boş olmadığı sürece" daha iyi yanıtlar.


6
“Bir dosya boyutu sıfır bayt olsa bile, yine de bir kümeyi tüketir.” Aslında, hayır: tipik unix dosya sistemlerinde, boş bir dosya bir inode ve sıfır blok tüketir ve bloklardan farklı bir küme kavramı yoktur.
Gilles 'SO- kötülük'

8

Bunu göstermek için küçük bir deney:

İlk önce, root ext4 (LVM) bölümünün gerçek blok boyutunun ne olduğunu görelim:

[root@fedora17 blocksize]# dumpe2fs /dev/mapper/vg_fedora17-lv_root | grep -i "block size"
dumpe2fs 1.42.3 (14-May-2012)
Block size:               4096

Beklendiği gibi, 4096'dır (4 KiB). Şimdi üç dosya oluşturalım: Birincisi sıfır bayt, ikincisi sadece bir bayt ve üçüncüsü 4 KiB (blok büyüklüğü):

[root@fedora17 blocksize]# touch 0_bytes.bin
[root@fedora17 blocksize]# dd if=/dev/zero of=1_byte.bin bs=1 count=1
[root@fedora17 blocksize]# dd if=/dev/zero of=4096_bytes.bin bs=1 count=4096


Şimdi, biz lsdizin. 1024 baytlık "bloklar" şeklinde ayrılmış boyutu (en soldaki sütunu) -sgörmek için bu seçeneği kullanıyoruz . (ls gerçek blok boyutunun 4096 olduğunu bilmiyor - belirleyebiliriz ancak bu her şeyi bu değere göre ölçeklendirir ve gerçek dosya boyutunu da bayt olarak görmek istiyoruz ) .
--block-size

[root@fedora17 blocksize]# ls -ls
total 8
0 -rw-r--r--. 1 root root    0 Jan 21 23:56 0_bytes.bin
4 -rw-r--r--. 1 root root    1 Jan 21 23:38 1_byte.bin
4 -rw-r--r--. 1 root root 4096 Jan 21 23:38 4096_bytes.bin

Burada iki şey not edilebilir:

  • Sıfır bayt dosya dosya sisteminde sıfır blokları alır ve Giles'ın söylediklerini onaylar .
  • Diğer iki dosyanın farklı dosya boyutları olsa da, ikisi de 4 * 1024 = bir 4KiB ext4 bloğu alır.

Seyrek dosyalar

Seyrek dosyalar, büyük sıfır bloklara sahip dosyalardır. Verilerin sıfır olduğu bilindiğinden, diske kaydedilmesinin bir anlamı yoktur. Bu şekilde, bir dosyanın görünen boyutu aslında disk üzerindeki boyuttan daha büyük olabilir .

Satır içi veri

Bazı dosya sistemlerinin, içeriğin çok küçük dosyaların inode'da saklanmasına izin verdiğini unutmayın . Bkz Bir Unix / Linux dosya sistemi üzerinde bir inode'un içinde doğrudan veri depolamak mümkün mü? .


Evet, 4k dosyasının, dosya sisteminin dosya sistemi içinde depolanmasıyla ilgili bilgileri depolamak için kullandığı boyuttur. Bir bloğun başlangıcından itibaren dosyanın indeksi, bloğun indeksi ve dosyanın kullandığı hafıza boyutu gibi şeyler 4k yiyen depolanır. Bu bilgi, metin dosyasına dosya sisteminden başvuruda bulunmak için kullanılır.
pvn

2
Bu yanlış. Bahsettiğiniz gibi dosya meta verileri 4KiB'den hiçbirini "yemez". Bu yapılar ek yükü dosya sisteminin bir parçası. Kanıt için yukarıdaki cevabımı gör. Söyledikleriniz doğruysa, 4096 baytlık dosyamın birden fazla bloğa ihtiyacı olacaktı.
Jonathon Reinhart,

Dosya sisteminde işaretçiler (segment no, blk no) dosya sisteminde saklanması gereken ve bir blok atanması gereken şeylerdir. Metin dosyası zaten kendisine atanmış ilk bloğa sığabilecek çok az içeriğe sahipse, ikinci blok tahsisi gerektirmez. 4k'nin bütününün meta veriler için kullanılmadığını ve bazı içsel parçalanmanın ortaya çıktığını kabul ediyorum.
pvn

2
4 KiB blok boyutundan hiçbirinin meta veriler için kullanılmadığını söylüyorum . Benim örneğimin bunu kanıtladığını düşünüyorum.
Jonathon Reinhart

2
@pvn: Jonathon haklı. Meta veriler, dosya verilerini depolamak için kullanılan bloktan ayrı olan dosya için inode'da saklanır.
Mekanik salyangoz,
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.