Введение
FAT в целом
FAT12 | FAT16 | FAT32 | FAT64 | |
Максимальный размер раздела | 16 MB | 2GB | 32 GB | 128 PB |
Максимальный размер файла | < 16 MB | 2GB | 4 GB | 16 EB |
Максимальный размер кластера | 4 KB | 64 KB | 32 KB | 32 MB |
VFAT
VFAT – это расширение FAT12 и FAT16.
Оно позволило решить основную проблему, с которой столкнулись FAT12 и FAT16, – ограничение на размер имени файла. FAT12 и FAT16 следовали соглашению 8.3 (или иногда называемому SFN) DOS об именовании файлов. Эта конвенция подразумевает, что имя файла может состоять не более чем из 8 символов, а также может иметь необязательное расширение имени файла, длина которого должна быть не более 3 символов.
Еще одна проблема заключалась в том, что имена файлов SFN, а также расширения могут состоять только из символов ASCII. В SFN было еще много тонкостей и ограничений, которые должна была решить VFAT.
Так, в VFAT было введено еще одно соглашение об именовании – LFN (или long-file-name). В LFN имя файла может состоять из 255 символов и пробелов.
Оно также может содержать несколько точек, что невозможно в чистых FAT12 и FAT16.
LFN также поддерживал кодировку имен файлов UTF-16. И последнее, но не менее важное: LFN и VFAT в целом разработаны с учетом обратной совместимости с файловыми системами FAT12 и FAT32.
Это означает, что VFAT может без проблем работать с дисками, разбитыми на разделы FAT16:
FAT12/FAT16 | VFAT | |
Имя файла | SFN (8.3 convention) | LFN |
Кодировки файлов | ASCII | ASCII, UTF-16 |
Но, кроме этого, VFAT имела те же ограничения, что и FAT16.
Об управлении кластерами и разделами на диске мы поговорим чуть позже.
FAT32
И все же основной проблемой FAT16 и VFAT были кластеры и управление разделами по мере их роста.
Чтобы объяснить это, нужно сначала понять, что сам диск делится на разделы, а разделы состоят из кластеров:
Это, конечно, очень высокий уровень.
Здесь мы видим, что диск состоит из 4 разделов, каждый из которых может иметь свою файловую систему, как в примере выше.
То, как файловая система структурирует данные на диске, сильно зависит от файловой системы; мы будем говорить о FAT, так что давайте продолжим.
Итак, допустим, у нас есть раздел на диске на 512 МБ.
Этот раздел изначально разбит на кластеры, по 8 Кбайт каждый в FAT16.
Проблема в том, что количество кластеров также фиксировано для разделов в FAT16 и VFAT.
Это означает, что если размер раздела увеличивается, то неизбежно должен увеличиться и размер кластеров.
Так, если размер раздела теперь составляет 1 ГБ, размер кластера становится 16 К.
Так почему же это вообще является проблемой?
Проблема в том, что FAT16 и VFAT считают кластер одним отдельным блоком.
И если нам нужно сохранить файл размером 10 байт, он займет весь кластер, несмотря ни на что.
Теперь этот файл занимает этот кластер, и никакие другие данные не могут быть записаны в этот конкретный кластер.
Таким образом, мы оказались в затруднительном положении, когда 99 % размера кластера было потрачено впустую.
Проблема становится еще хуже, если раздел увеличивается в размерах.
В этом случае на помощь приходит FAT32.
Для раздела размером менее 8 ГБ в FAT32 размер кластера по умолчанию остается 4 КБ.
Это, конечно, не полностью решает проблему потенциально пустого места, когда 1-байтовый файл занимает все 4 КБ раздела.
Тем не менее, FAT32, по крайней мере, не страдает от ухудшения условий на больших разделах. Это
Максимальный размер диска
Еще один момент, о котором стоит упомянуть, – это то, что у FAT16 и VFAT, в частности, была одна проблема.
Максимальный размер раздела, с которым может справиться файловая система, составлял 2 ГБ.
Это связано с тем, что в FAT16 каждый кластер идентифицируется 16 битами. В FAT32 такого ограничения нет, поскольку для адресации кластера используется 28 бит из 32 (последние 4 бита зарезервированы для возможного будущего использования).
Поэтому размер раздела теоретически может достигать 8 ТБ для FAT32.
На практике Windows ограничивает размер раздела 32 ГБ для FAT32.
В основном это произошло потому, что в свое время компания Microsft хотела продвигать NTFS вместо файловой системы FAT, но все же.
Это второе существенное различие между FAT32 и VFAT/FAT16.