FAT16 neden 2 GB'tan daha fazla depolayamıyor?


25

FAT16 ile ilgili bilgileri aramaya başladığım tüm siteler sadece 2 GB'tan fazla tahsis edemediğini açıkça beyan ediyor. TAMAM. Harika. Sana inanıyorum. Fakat bu sonuca nasıl geldiniz (sadece test etmekten başka)?

Bir FAT16 sisteminin ne kadar tutabileceğini belirlemek için kullanılabilecek bir formül var mı?


21
FAT16'nın adında "16" bulunmasının bir nedeni var. :-)
Eric Lippert,

28
@EricLippert, dürüst olmak gerekirse, 16 ile 2 GiB arasındaki bağlantı FS'nin nasıl çalıştığını bilmeden hemen belli değil.
Joey,

18
% 100 bu sorunun gerçekten bu site için konuyla ilgili olduğuna ikna olmadım. Belki de retrocomputing.stackexchange.com adresine taşınmalıdır?
Jules

3
2GB sınırının, MS-DOS ve erken Windows'un FAT16 ile işleme biçiminde pratik bir sınırlama olduğuna dikkat etmek önemlidir. Kavramsal olarak 2GB'ı aşmak mümkündür, ancak Microsoft uyumlu bir biçimde değildir.
phyrfox 16

3
@ LưuVĩnhPhúc Yorum doğru. "MS-DOS ve erken Windows" dedim. Modern sistemler FAT16'da 2GB'tan fazla kullanabilir. Örneğin, 4 GB'lık bir FAT16 bölümü eski MS-DOS / Win3.1 sistemlerinde çalışmaz. 2GB'nin sınır olduğunu belirten pek çok kaynak, ya bu sınırın bir gerçek olduğu zaman yazıldığından ya da kısa bir süre sonra, biraz daha eski sistemler bunun üstesinden gelemediği için tavsiye edilmeyeceğiniz zaman olduğu için olduğunu söyledi. Daha sonra sistemler bunun üstesinden gelebilir ancak 2GB sınırı, yaklaşık 2000 yıl öncesinden önceki kurallardı ve bundan sonraki birkaç yıl boyunca eski, eski olan sınırlardan alıntı yapmıştı.
phyrfox

Yanıtlar:


66

FAT16 kümeleri tanımlamak için 16 bit kullanır. Bu nedenle, tanımlayıcıları tükenmeden önce maksimum 65536 küme vardır ve bazı tanımlayıcılar dosya dışı kullanımlara ayrılmıştır. Her dosya en az bir kümeyi kaplar. Daha büyük kümeler, dosya başına minimum tahsisi arttırır ve küçük dosyaların ek yükünü arttırır.

Küme boyutu daha sonra tanımlanabilir maksimum hacmi size söyler. 32KiB kümeleri için, bu 32 * 1024 * 65536 B = 2GiB'dir.

Sen olabilir senin Disktekiler sektörlerin boyutunu artırarak, süresiz küme boyutunu artırmak, ancak dosyaların sayısı sınırlıdır kalır. Ayrıca, varsayılan sektör boyutunu (512B) kabul eden yazılımlarla da karşılaşırsınız.

Fiziksel hacimlerin ~ 2GiB'nin hazır olduğu noktada, işlemciler ve işletim sistemleri 32bit'ti, bu nedenle FAT32'ye taşınması küçük kümelerde çok daha fazla dosyaya izin veren mantıklı bir seçimdi.


4
"ancak küçük dosyalar için ek yükü artırın" Bunun, herkes için net olup olmadığından emin değil, çünkü herkesin bu bağlamda "ek yük" ile ne kastedildiğini anlayacağından emin değilim. Bir örneğin yardımcı olacağını düşünüyorum: "Örneğin, içinde bir karakter bulunan bir dosya, çoğu tamamen boşa harcanan diskte 1 küme kaplar. Daha büyük küme boyutları daha fazla atık anlamına gelir."
Reginald Blue,

3
Birkaç açıklayıcı not: 32KiB, DOS ve Windows'un çeşitli sürümleri için maksimum küme boyutuydu, ancak Windows NT ailesi, NT 4.0'dan bu yana daha büyük küme boyutlarını destekledi (ve bu nedenle, Windows’un XP’den bu yana tüketici sürümleri de destekledi. NT çekirdeği dayalı yeniden). Bu, 16GiB'ye kadar olan boyutlara izin verir, ancak cevabında belirtilen verimsizlik nedeniyle, bunun faydalı olması muhtemel değildir. Sen olabilir akla yatkın sen ağırlıklı büyük dosyaları depolamak istiyorsa ... Kullanmak olurdu onlar 256KiB küme boyutunun katları olarak geldi, özellikle böyle bir sistemi kullanmak
Jules

5
... ancak daha sonra hem FAT16 hem de FAT32 için bir sorun olan bir sonraki sınıra ulaşırsınız: maksimum dosya boyutu, depolamak için ayrılan yalnızca 4 bayt olması nedeniyle 4GiB’nin 1 baytı kısa ile sınırlıdır. Dizin girişleri. OTOH, iki adede kadar büyüklüğüyle 2 GB'a kadar yaklaşık 256KiB boyutunda, çok büyük sayıda dosya kaydetme gereksiniminiz varsa ve toplam boyut <16GiB ise, FAT16 bunlar için en verimli formattır.
Jules

@Jules: Sadece potansiyel olarak. Küme başına bir tepe olduğunu unutmayın. Çok az parçalanma varsa, depolamaya izin veren dosya sistemleri daha verimlidir.
Deduplicator

12

Aslında, aslında farklı limitlere sahip yıllar boyunca birkaç "FAT16" çeşidi vardı, ancak "compaq DOS 3.31" den windows 95'e kadar süren versiyonu düşünelim.

FAT hacimleri kümelere ayrılır. Her küme iki sektör kesiminin gücünden oluşur. FAT16'daki küme başına düşen sektör sayısı, 8 bit işaretli sayı olarak saklanır. Bu yüzden küme başına maksimum olası sektör 64'tür.

Küme numaraları, 16 bit işaretsiz bir değer olarak kaydedildi. Toplam kümeleri 65536 ile sınırlandırın. Küme başına düşen maksimum sektör sayısı ile çarpın ve 4194304 sektörden bir limit alın.

Sabit sürücülerin (mantıksal) sektör boyutu 512 bayttır. Yukarıda belirtilen sektör sayısındaki sınırla çarpın ve 2GiB limitinizi alın. İlke olarak daha büyük sektör boyutlarına sahip bir ortam daha büyük bir FAT16 hacmini destekleyebilir, ancak bunun pratikte olduğunu sanmıyorum.

Windows NT, "küme başına sektörler" alanının yorumlanmasını işaretsiz 8 bit olarak değiştirdi. Bu, 512 bayt sektöre sahip bir 4GiB FAT16 bölmesine izin verdi (ve daha büyük sektörlere sahip sürücülerde teorik olarak daha büyük). AIUI windows 98, bu bölümleri okumak ve yazmak için destek ekledi ancak bunları oluşturamadı ve disk yardımcı programları bunları onaramadı.


Daha büyük kümeleri ve dolayısıyla daha büyük hacimleri desteklemek için dosya sistemi biçiminde nispeten küçük değişiklikler yapmak kesinlikle mümkün olabilirdi. Ancak MS, Windows 95 OSR2'de FAT32 üreten 32 bitlik bir küme endeksine geçme konusunda daha radikal bir seçenek seçmeye karar verdi.

Daha radikal bir seçeneğe geçmenin sebebinin alan verimliliği olduğuna inanıyorum. O zamanki tipik dosya boyutları göz önüne alındığında, 32kiB kümeleri zaten oldukça boşa gitmekteydi ve daha büyükleri bile öyle hareket ederdi.


4
Bunu elde edene kadar "küme başına maksimum sektör sayısı 64'tür" konusunda çok düşünmek zorunda kaldım: 64, imzalı bir baytta temsil edebileceğiniz en büyük güç 2'dir. bayt değeri 127'dir.
Ralf Kleberhoff

3
@RalfKleberhoff Bu, doğal olarak bir takip sorusuna yol açar, ancak: iki iktidarı saklıyorsanız, neden bu ikinin üslerinden ziyade bu sayıyı saklıyorsunuz?
Daniel Wagner

@DanielWagner Kesinlikle katılıyorum. Özellikle FAT16'nın yaratıldığı günlerde, vites değiştirme kesinlikle çoğalmaktan daha ucuz bir işlemdi. Ama muhtemelen onu çalıştırdıkları için mutlu oldular ve onlarca yıl boyunca geleceğe yazılım mühendisliği
yapmıyorlardı
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.