Previous Entry Share Next Entry
Снова о файловых системах
рука
wertexan
Теперь немножечко о файловых системах. В первую очередь о FAT.

Итак, FAT появилась в 1977 году для 8-дюймовых дискет и имела 8-битную таблицу секторов. Эту версию иногда называют FAT8. Имела ряд недоделок, вроде отсутствия подкаталогов, короткого (6+3) имени файлов и т.д. Потому на данный момент абсолютно неактуальна. Максимальный размер раздела вроде бы — 16МБ (а может и меньше). Минимальный размер не ограничивается и фактически равен размеру служебной области. Добавлена для исторической справки.
FAT12 появилась в 1980 году. Как следует из названия, имеет 12-разрядную таблицу секторов. Уже имеет подкаталоги в корневом каталоге. Имена файлов в формате 8+3. Длинные имена реализованы за счет т.н. VFAT. Минимальный размер раздела фактически равен служебной области ФС и, видимо, составляет несколько кБ. Максимальный равен 32МБ при размере кластера 8кБ (16МБ при кластере 4кБ). 32МБ может быть превышено, но такой вариант уже вышел из употребления. Максимальный размер файла равен размеру раздела. Глубина подкаталогов (32 или 60 без CDS) и максимальное количество файлов ограничено (например, 4068 для кластеров 8кБ). Используется до сих пор для разделов менее 32МБ.
FAT16. Теперь часто просто FAT. Первая версия появилась в 1984 году. Окончательная (без VFAT) в 1987 (FAT16B). VFAT — надстройка, позволяющая делать длинные имена, появилась в 90-х и стала стандартом. Минимальный размер раздела также не ограничивается и, видимо, равен служебной области ФС. Тем не менее, в FAT16B при размере сектора 512Б, не может быть меньше 8МБ (256??МБ при 4кБ секторах, хотя наверное 64МБ) . Максимальный — 4ГБ (может быть и до 16ГБ, но только в некоторых устаревших ОС), но после 2ГБ могут начаться проблемы. Максимальный размер файла — 2ГБ (4ГБ с OPC, что уже, похоже, не используется). Считается, что после размера раздела 2ГБ уже очень неэкономно расходует дисковое пространство — размер кластера 64кБ. Максимальное количество файлов 65460 (65536?). Максимальная глубина вложений 32 (без CDS гораздо больше). Используется до сих пор.
FAT32. Понятное дело, что использует 32-разрядную (на самом деле 28-разрядную) адресацию кластеров. Минимальный размер 32МБ при 512Б секторах, или 256МБ при 4кБ секторах. Максимальный: 2ТБ при 512Б в секторе и до 16ТБ при секторе 4кБ. Тем не менее, Windows считает, что после 32ГБ размер кластера слишком большой и не дает отформатировать системными методами в FAT32 разделы размером больше 32ГБ.
На данный момент сложилась определенная практика выбора для разделов оптимальной файловой системы. И именно эти ФС и предлагают многие утилиты форматирования, нередко просто не позволяя выбрать неоптимальную ФС для данного раздела по мнению разработчика утилиты. До 16МБ это FAT12, до 2ГБ это FAT16, до 32ГБ это FAT32. При больших размерах большинство утилит уже рекомендуют NTFS или exFAT.
Все актуальные FAT унаследовали ограничения в количестве элементов в корневом каталоге, то есть фиксированное количество записей в с названиями в формате 8+3. Для FAT12 и FAT16 это число небольшое и составляет 512 записей. VFAT для использования длинных имен использует несколько записей в структуре корневого каталога. Количество символов, как известно, 256 (255 + конечный байт) для его поддержки нужно до 25 записей (элементов) FAT (1 для стандарта 8+3 и ещё 24 для всего имени). Поэтому длинные имена за счет именно имени резко ограничивают количество элементов в корневом каталоге. В крайнем варианте их может быть всего 21 (при этом 1 элемент не сможет иметь максимальную длину имени). В FAT32 эта проблема частично решена просто за счет увеличения количества записей в корневом каталоге.
Немного о структуре раздела.
Итак, FAT12/16 (упрощенно):
Загрузочный сектор (PDR)->FAT(Таблица размещения файлов /каталогов)->Копия FAT (для надежности) ->Корневой каталог (Root) ->Область данных.
Следует заметить, что размер корневого каталога в этих ФС имеет фиксированный размер и потому количество записей в нем ограничено.
В FAT32 (упрощенно):
Загрузочная запись (PDR), занимает больше 1 сектора->Структура FSInfo->Резерв->Копия загрузчика->Резерв-> FAT->Копия FAT (для надежности) ->Область данных.
Как нетрудно заметить, отдельно фиксированное место под корневой каталог не выделяется. FSInfo используется для ускорения работы ФС, ведь в ней находятся записи о свободных кластерах. Это позволяет быстрее начать запись информации без пересмотра всей таблицы.
Во всех случаях разбиение на кластеры начинается лишь с области данных.

Вследствие того, что ФС нуждается в определенном объеме для расположения своих служебных данных, доступный для ваших данных размер раздела всегда меньше полного размера раздела. Кроме того, каталог(директория/папка) тоже по сути специфический файл. И тоже занимает фактическое место.


С учетом стандартного размера сектора 512Б переход на сектор 4кБ встречает ту проблему, что многое программное обеспечение и в первую очередь ОС новый размер сектора не поддерживают. Чтобы обойти эту проблему используется режим эмуляции 512Б-сектора. Вот тут и выскакивают проблемы. Если происходит сдвиг первого виртуального сектора ФС по отношению к началу реального сектора, то получается, что сектор может быть поделен между разными логическим кластерами ФС. И такое происходит по всему разделу. Это приводит к тому, что в несколько раз увеличивается количество циклов чтения-записи при обращении к кластеру. Ведь винту требуется прочитать 1-й сектор и записать в его конец первую часть кластера, а потом прочитать второй сектор и записать в его начало конец кластера. Это отрицательно сказывается на производительности. Для устранения этой проблемы при разбивке винта следует произвести т.н. «выравнивание». При этом начало первого виртуального сектора раздела принудительно приводится к началу первого подходящего реального сектора. Конечно, при этом потеряется до 4кБ между разделами, но кого это сейчас волнует? Тем более, что и так мы теряем гораздо большее место между разделами, место под служебную информацию разделов и кучу места вследствие некратного кластерам размера файлов. Выравнивание при разбивке позволяют сделать Windows начиная от Vista SP1 и более-менее новые Linux. Так же это позволяют сделать многие сторонние программы для разбивки винтов. Производители винтов так же выпускают утилиты, позволяющие выполнить выравнивание уже разбитых разделов.
Как вы могли заметить, выше в описании ФС в ряде случаев указывались максимальные размеры разделов с учетом размера сектора в 4кБ. Это значит, что требование эмуляции секторов 512Б далеко не всегда обязательное. В принципе, при увеличении размера сектора, максимальный размер раздела может продолжать увеличиваться.

?

Log in

No account? Create an account