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?
:P
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?
:P
Yanıtlar:
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.
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.
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 ls
dizin. 1024 baytlık "bloklar" şeklinde ayrılmış boyutu (en soldaki sütunu) -s
gö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:
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 .
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ü? .