Mengapa FAT16 tidak dapat menyimpan lebih dari 2 GB?

25

Semua situs yang saya kunjungi untuk mencari informasi tentang FAT16 hanya menyatakan secara deklaratif bahwa ia tidak dapat mengalokasikan lebih dari 2 GB. BAIK. Besar. Aku percaya kamu. Tetapi bagaimana Anda sampai pada kesimpulan itu (selain hanya mengujinya)?

Apakah ada semacam rumus yang dapat digunakan untuk menentukan seberapa banyak sistem FAT16 dapat bertahan?

SangoProductions
sumber
21
Ada alasan mengapa FAT16 memiliki "16" dalam namanya. :-)
Eric Lippert
28
@EricLippert, jujur ​​saja, hubungan antara 16 dan 2 GiB itu tidak segera jelas tanpa mengetahui cara kerja FS.
Joey
18
Saya tidak 100% yakin bahwa pertanyaan ini sebenarnya sesuai topik untuk situs ini. Mungkin itu harus dipindahkan ke retrocomputing.stackexchange.com?
Jules
3
Perlu dicatat bahwa batas 2GB adalah batasan praktis tentang bagaimana MS-DOS dan Windows awal menangani FAT16. Secara konsep dimungkinkan untuk melebihi 2GB, tetapi tidak dengan cara yang kompatibel dengan Microsoft.
phyrfox
3
@ LưuVĩnhPhúc Komentarnya benar. Saya memang mengatakan "MS-DOS dan Windows awal." Sistem modern dapat menggunakan lebih dari 2GB dalam FAT16. Partisi FAT16 4GB tidak akan berfungsi di sistem MS-DOS / Win3.1 lama, misalnya. Dan banyak sumber yang menyatakan bahwa 2GB adalah batasnya adalah baik karena ditulis ketika batas itu adalah kenyataan, atau waktu tidak lama setelah itu, di mana Anda disarankan untuk tidak melakukannya karena sistem yang sedikit lebih tua tidak dapat mengatasinya. Sistem kemudian dapat menanganinya dengan baik, tetapi batas 2GB adalah aturan praktis sebelum sekitar 2000 atau lebih, dan beberapa tahun berikutnya setelah itu mengutip batas lama yang sudah usang.
phyrfox

Jawaban:

66

FAT16 menggunakan 16 bit untuk mengidentifikasi cluster. Dengan demikian ada maksimum 65536 cluster sebelum Anda kehabisan pengidentifikasi, dan beberapa pengidentifikasi dicadangkan untuk penggunaan non-file. Setiap file menempati setidaknya satu cluster. Cluster yang lebih besar meningkatkan alokasi minimum per file, meningkatkan overhead file kecil.

Ukuran cluster kemudian memberi tahu Anda volume maksimum yang dapat diidentifikasi. Untuk kelompok 32KiB, yaitu 32 * 1024 * 65536 B = 2GiB.

Anda dapat meningkatkan ukuran cluster tanpa batas, dengan meningkatkan ukuran sektor pada disk Anda, tetapi Anda tetap terbatas pada jumlah file maksimum. Anda juga akan mengalami masalah dengan perangkat lunak yang diasumsikan ukuran sektor default (512B)

Pada titik di mana ada volume fisik ~ 2GiB tersedia, prosesor dan OS 32bit, jadi pindah ke FAT32 adalah pilihan yang masuk akal, memungkinkan jauh lebih banyak file dalam kelompok kecil

Caleth
sumber
4
"tetapi tambah overhead untuk file kecil" Tidak yakin apakah itu akan jelas untuk semua orang, karena saya tidak yakin semua orang akan mengerti apa yang dimaksud dengan "overhead" dalam konteks ini. Saya pikir contoh akan membantu: "Misalnya, file dengan satu karakter di dalamnya memakan 1 cluster pada disk, sebagian besar benar-benar terbuang. Ukuran cluster yang lebih besar berarti lebih banyak pemborosan."
Reginald Blue
3
Beberapa catatan klarifikasi: 32KiB adalah ukuran cluster maksimum untuk berbagai versi DOS dan Windows, Tetapi keluarga Windows NT telah mendukung ukuran cluster yang lebih besar sejak NT 4.0 (dan oleh karena itu versi konsumen Windows sejak XP juga telah mendukungnya, karena mereka ' didasarkan pada kernel NT). Ini memungkinkan ukuran hingga 16GiB, meskipun karena inefisiensi seperti yang disebutkan dalam jawaban ini tidak mungkin berguna. Anda dapat menggunakan sistem seperti itu secara masuk akal jika Anda ingin menyimpan sebagian besar file berukuran besar, terutama jika mereka datang dalam kelipatan ukuran kluster 256KiB yang harus Anda gunakan ...
Jules
5
... tetapi kemudian Anda mungkin mencapai batas berikutnya, yang merupakan masalah bagi FAT16 dan FAT32: ukuran file maksimum dibatasi hingga 1 byte pendek dari 4GiB oleh fakta bahwa hanya ada 4 byte yang dialokasikan untuk menyimpannya di entri direktori. OTOH, jika Anda memiliki kebutuhan untuk menyimpan sejumlah besar file dalam ukuran sekitar 256KiB hingga 2GiB dengan kekuatan dua ukuran, dan ukuran total <16GiB, FAT16 berpotensi merupakan format yang paling efisien bagi mereka.
Jules
@ Jules: Hanya berpotensi. Ingat bahwa ada overhead per-cluster. Sistem file yang memungkinkan penyimpanan berjalan lebih efisien jika ada sedikit fragmentasi.
Deduplicator
12

Sebenarnya ada beberapa varian "FAT16" selama bertahun-tahun dengan batas yang berbeda tetapi mari kita pertimbangkan versi yang bertahan dari "compaq DOS 3.31" hingga windows 95.

Volume FAT dibagi menjadi beberapa kelompok. Setiap cluster terdiri dari kekuatan dua sektor. Jumlah sektor per cluster pada FAT16 disimpan sebagai angka yang ditandatangani 8 bit. Jadi sektor maksimum yang mungkin per klaster adalah 64.

Nomor cluster disimpan sebagai nilai unsigned 16 bit. Membatasi total kluster menjadi 65536. Lipat gandakan dengan sektor maksimum per kluster dan Anda mendapatkan batas 4.194.304 sektor.

Ukuran sektor (logis) dari hard drive adalah 512 byte. Lipat gandakan dengan batas jumlah sektor yang disebutkan di atas dan Anda mendapatkan batas 2GiB Anda. Pada prinsipnya media dengan ukuran sektor yang lebih besar dapat mendukung volume FAT16 yang lebih besar tetapi saya tidak berpikir ini terjadi dalam praktik.

Windows NT mengubah interpretasi bidang "sektor per klaster" menjadi 8 bit yang tidak ditandai. Hal ini memungkinkan partisi FAT16 4GiB dengan sektor 512 byte (dan secara teoritis lebih besar pada drive dengan sektor yang lebih besar). AIUI windows 98 menambahkan dukungan untuk membaca dan menulis partisi seperti itu tetapi tidak dapat membuatnya dan utilitas disk tidak dapat memperbaikinya.


Tentunya mungkin untuk melakukan sedikit perubahan kecil pada format sistem file untuk mendukung kluster yang lebih besar dan karenanya volume yang lebih besar. Namun MS memutuskan untuk memilih opsi yang lebih radikal untuk pindah ke indeks cluster 32-bit dengan windows 95 OSR2 yang menghasilkan FAT32.

Saya percaya alasan untuk memilih opsi yang lebih radikal adalah efisiensi ruang. Mengingat filesizes khas pada saat 32kiB cluster sudah cukup boros dan yang lebih besar bahkan akan pindah begitu.

Peter Green
sumber
4
Saya harus berpikir keras pada "sektor maksimum yang mungkin per klaster adalah 64", sampai saya mendapatkannya: 64 memang kekuatan terbesar dari 2 yang dapat Anda wakili dalam byte yang ditandatangani: 128 tidak mungkin sebagai maksimum positif yang ditandatangani nilai byte adalah 127.
Ralf Kleberhoff
3
@RalfKleberhoff Itu tentu saja mengarah ke pertanyaan lanjutan: jika Anda menyimpan kekuatan dua, mengapa menyimpan nomor itu sendiri daripada eksponen pada keduanya?
Daniel Wagner
@DanielWagner Saya sangat setuju. Terutama karena saat itu ketika FAT16 dibuat, pergeseran jelas merupakan operasi yang lebih murah daripada mengalikan. Tapi mungkin mereka hanya senang menjalankannya, dan tidak rekayasa perangkat lunak selama beberapa dekade ke depan ...
Ralf Kleberhoff