Фатальные проблемы

Автор: Андрей Васильков
Опубликовано в журнале "Компьютерра" №05 от 03 февраля 2009 года

С 60-х годов прошлого века и по наши дни изобретательное человечество придумало почти две сотни разных файловых систем. Большая часть из них представляет лишь исторический интерес или используется в специфических устройствах. Однако и простые пользователи нет-нет да и натыкаются на файловые системы, накладывающие на оборудование те или иные ограничения. Не зная о них, можно порой попасть в затруднительную ситуацию.

Сам факт наличия практически значимых лимитов в файловых системах уходит корнями в 16-битную эпоху вычислений и отчасти связан с реализацией поддержки FAT16 в MS-DOS1. В то время как FAT16 теоретически позволяет создавать дисковые разделы до 4 Гбайт (216 кластеров по 64 Кбайт), DOS ограничивает предельный размер раздела двумя гигабайтами из-за использования кластеров размером 32 Кбайт. Поскольку Windows 95/98 были основаны на MS-DOS, а от NT-версий требовалась обратная совместимость, лимит в 2 Гбайт на FAT16 актуален до сих пор.

Аналогичная ситуация и с другими файловыми системами. Особенности их поддержки в конкретной версии ОС существенно ограничивают максимально допустимый размер дискового раздела; размера, количества и взаимного расположения файлов на нем и допустимый вид присваиваемых имен. Прошло уже двадцать лет, а пользователи до сих пор наступают на "грабли" образца 1988 года.

До сих пор для переноса данных кое-где пользуются дискетами. Применяемая на них FAT12 не даст соскучиться любителям длинных имен. Если при соблюдении формата имен "8.3"2 на дискету теоретически можно записать четыре с лишним тысячи файлов, то использование длинных имен резко сокращает адресуемое пространство. В моем тесте на чистую дискету без битых блоков удалось записать только двадцать файлов объемом по 2 байта, но с длиной имени у каждого по 128 символов. Двадцать первый уже не записывался - появлялось сообщение об ошибке и просьба снять защиту от записи, которой, естественно, не было.

Часто доводилось видеть, как при достаточном количестве свободного места файл не копировался и на куда более современные носители - например, на флэшку. Дело в том, что флэш-накопители емкостью до 2 Гбайт включительно обычно используют FAT16. В цепочках FAT16 может храниться информация не более чем о 512 записях, относящихся к корню раздела. Если вы попытаетесь записать 513-й файл или создать каталог при уже имеющихся 512 записях, то получите сообщение об ошибке.

В смоделированной и отображенной на скриншотах ситуации использовалась карта памяти SD емкостью 2 Гбайт, на которой цифровой фотоаппарат создал раздел FAT16. Записанные 512 файлов хоть и занимали суммарно всего 16 Мбайт, не позволяли записать следующий файл или создать пустую папку.

Если же записывать файлы не в корень раздела, а в созданный там каталог, то ограничение в 512 файлов уже не действует и устанавливается общий предел в 65536 файлов/каталогов. Именно поэтому ЦФК при форматировании карт памяти создают собственную папку и сохраняют фотографии в ней, а не прямо в корне раздела.

Разочарование может постигнуть и желающих создать мультизагрузочную флэшку. BIOS некоторых материнок и операционные системы с 16-битными компонентами ядра (включая, кстати, не только клоны MS-DOS, но и Windows NT до 4.0 включительно) не поддерживают загрузку с томов FAT32. Корректно работать они могут только с разделом FAT 16 объемом не более 2 Гбайт. Поэтому если вы хотите создать гарантированно загрузочную флэшку, нет смысла покупать экземпляр на 4 Гбайт - лучше возьмите две по 2 Гбайт и разместите на них весь желаемый набор ОС с утилитами, помня о пределе элементов в корне раздела.

Флэшки и мобильные винчестеры емкостью от 4 Гбайт обычно размечаются производителями как один раздел FAT 32. Считается, что с этой файловой системой у пользователя возникает меньше проблем. Мол, ее все операционки видят, права доступа она не записывает и вообще - самая простая. Из приводимой таблицы понятно, почему образ полного DVD-5 на раздел FAT32 не запишется в принципе. Будь то хоть флэшка на 8 Гбайт, хоть винчестер на 80 гигов, при попытке записать любой файл объемом больше 4 Гбайт на раздел FAT32 появится сообщение об ошибке.

Решается проблема двумя способами. Если большой файл нужно записать один-единственный раз, проще разбить его на части. Это встроенная функция файловых менеджеров (например, Total Commander) и опция создания многотомных архивов (WinRAR, 7-ZIP). Если же потребность переписывать большие файлы возникает часто, лучше переформатировать сменный носитель под другую файловую систему (как вариант - под NTFS). На винчестере это можно сделать массой программ, включая встроенный в Windows XP диспетчер дисков, а переформатировать флэшку поможет утилита Hewlett-Packard USB Disk Storage Format Tool.

Сам я впервые столкнулся с ограничением на максимальный размер файла много лет назад во время конвертирования видео на разделе FAT 32. Недавно же отметил, что по аналогичной причине у любителей портейбл-софта, использующего базы данных, со временем перестают добавляться новые записи.

На оптических дисках используются другие файловые системы (ISO 9660, UDF), однако принципиальные ограничения на них сходны с рассмотренными выше.

Самым частым препятствием является невозможность записать на DVD в режиме ISO файл размером больше 2 Гбайт. Обычно программы записи предупреждают о необходимости использовать для таких целей UDF, вот только редко кто читает (а еще реже - понимает) подобные сообщения.

Если все файлы заведомо меньше 2 Гбайт, а DVD-ISO-проект все равно не желает записываться, проверьте формат имен. Мне доводилось видеть (чаще, чем хотелось бы), насколько сильна бывает тяга к длинным именам файлов. Сохранит человек веб-страницу с названием по умолчанию (вроде "СНиП 2-04-01-85 (2000). Внутренний водопровод и канализация зданий.html"), а потом тщетно пытается прожечь его на болванку. Даже либеральный формат Joliet отказывается воспринимать семь лишних знаков в этом имени. Особый шарм ситуации придают такие файлы, лежащие среди тысяч других в разных подкаталогах. Кстати, если подкаталоги созданы друг в друге "матрешкой" в количестве больше восьми или их названия тоже избыточно длинные, DVD вновь не запишется. Полный путь для каждого файла на диске во всех используемых ныне вариантах ISO 9660 должен укладываться в 255 знаков.

Кардинальным образом обойти все перечисленные ограничения можно, отказавшись (в ущерб совместимости) от ISO-формата в пользу UDF. Эта файловая система поддерживает создание физических, логических и резервных (sparable) разделов. Единственным ограничением, с которым изредка сталкиваются пользователи при записи дисков в UDF, является максимальная длина имени файла в 254 знака. Зато имя может представлять собой любые печатные символы юникода. Максимально адресуемое пространство на одном разделе составляет 8 Тбайт блоками по 2 Кбайт. Начиная с версии 2.50 поддерживается работа с метаданными. Это улучшает контроль целостности данных, однако существенно усложняет файловую систему.

Изначально в структуру UDF заложены принципы кроссплатформности (возможности работы во всех современных ОС) и универсальности (поддержка всех типов оптических носителей + жестких дисков). На сегодня UDF может быть использована на любых CD/DVD, включая Blu-ray. За ней - будущее, но из-за проблем совместимости с устаревшим оборудованием - пока что не настоящее.

Не всегда в ограничениях файловых систем виноваты их разработчики. Зачастую архитектурные лимиты ужесточаются недобросовестностью создателей драйверов и дисковых утилит. Зная об этих тонкостях, можно без проблем работать даже в (морально) устаревших файловых системах, умело лавируя между "подводными камнями". Хочется верить, что файловые системы будущего качественно превзойдут своих предшественниц. Можно сколько угодно отдалять количественные ограничения путем увеличения разрядности и совершенствования ОС - это приносит лишь временное облегчение. За последние двадцать лет максимальный объем серийно выпускаемых жестких дисков возрос с 20 Мбайт до 1,5 Тбайт. Появление RAID-массивов и внешних винчестеров в домашних условиях еще больше ускорило количественный рост.

Вместе с тем возможности файловых систем мало отличаются от изначального набора, которым они обзавелись в конце 80-х годов. Частично исправляет ситуацию поддержка управления правами доступа и ведение журнала действий (NTFS, ext3 и др.), но раздражает необходимость всякий раз думать о совместимости, угадывать требуемый объем раздела на этапе его создания и помнить об ограничениях.

В новых 64-битных файловых системах JFS и XFS устранены все описанные выше лимиты и, что более важно, добавлены уникальные свойства. Первым из них является масштабируемость разделов. В обеих системах можно увеличить размер раздела "на лету" за счет того, что блоки адресного пространства описываются в экстентах, а элементы i-node выделяются динамически. В качестве другой особенности можно назвать структуру B+ деревьев, ускоряющую поиск в объемных каталогах. Для XFS третьим новшеством является снижение частоты записи на диск. Данные накапливаются в оперативной памяти (благо ныне ее размер измеряется гигабайтами) и по мере необходимости упорядоченно переписываются на жесткий диск большими порциями. С одной стороны, это снижает частоту обращений к винчестеру, его энергопотребление и нагрев, с другой - повышает риск потери данных (в случае критической ошибки ОС или отсутствия ИБП).

При разработке файловых систем нужно одновременно учитывать подчас противоречивые требования совместимости, скорости, удобства, надежности, масштабируемости и прозрачности архитектуры. Поиск "золотой середины" продолжается, но поскольку новый дом глупо строить на старом фундаменте, обратную совместимость, видимо, придется принести в жертву.


<<Железный поток
Все материалы номера
Периферия >>