Ext4 - это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов.

Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций.

1. Совместимость

Любая имеющаяся файловая система типа Ext3 может быть конвертирована в Ext4 путём простой процедуры, состоящей из запуска пары команд в режиме «только чтение». Это означает, что вы можете повысить производительность и вместимость и улучшить возможности вашей имеющейся файловой системы без переформатирования и без переустановки ОС и программ. Если вы хотите получить преимущества Ext4 в production-системе, вы также можете обновить файловую систему. Эта процедура безопасна и не подвергает риску ваши данные (при этом, само собой, рекомендуется сделать резервную копию важных данных. Впрочем, это нужно делать, даже если вы не собираетесь менять файловую систему).

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

Также имеется возможность смонтировать файловую систему Ext3 как Ext4 без использования нового формата данных, что позволит впоследствии смонтировать её опять как Ext3. При этом, само собой, вы не сможете воспользоваться многочисленными преимуществами Ext4.

2. Больший размер файлов и файловой системы

На сегодняшний день максимальный размер файловой системы Ext3 равен 16 терабайтам, а размер файла ограничен 2 терабайтами. В Ext4 добавлена 48-битная адресация блоков, что означает, что максимальный размер этой файловой системы равен одному экзабайту, и файлы могут быть размером до 16 терабайт. 1 EB (экзабайт) = 1,048,576 TB (терабайт), 1 EB = 1024 PB (петабайт), 1 PB = 1024 TB, 1 TB = 1024 GB. Почему 48-битная, а не 64-битная? Имелся ряд ограничений, которые необходимо было бы снять, чтобы сделать Ext4 полностью 64-битной, и такой задачи перед Ext4 не ставилось. Структуры данных в Ext4 проектировались с учётом требуемых изменений, поэтому однажды в будущем поддержка 64 бит в Ext4 появится. Пока же придётся довольствоваться одним экзабайтом.

Примечание: код для создания файловых систем размером более 16 терабайт на момент написания этой статьи не содержится ни в одном из стабильных релизов e2fsprogs. В будущем он будет добавлен.

3. Масштабируемость подкаталогов

В настоящий момент один каталог Ext3 не может содержать более, чем 32000 подкаталогов. Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.

4. Экстенты

Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно.

В современных файловых системах применяется иной подход, основанный на так называемых экстентах. Экстент - это в общем-то набор последовательных физических блоков. Он как бы говорит нам: «Эти данные находятся в следующих n блоках». Например, файл размером в 100 мегабайт может храниться в единственном экстенте такого же размера, вместо того, чтобы быть разбитым на 25600 4-килобайтных блоков, адресуемых путём непрямого отображения. Огромные файлы можно разделить на несколько экстентов.

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

5. Многоблочное распределение

Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет в один присест только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, ранее упомянутые 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз (речь идёт о каких-то 100 мегабайтах!). Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.

Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении (см. ниже) с использованием экстентов. Эта возможность никак не влияет на формат данных.

6. Отложенное распределение

Отложенное распределение представляет собой способ повышения производительности, не влияющий на формат данных и представленный в современных файловых системах, таких как XFS, ZFS, btrfs и Reiser 4.

Суть этого метода состоит в отсрочке выделения блоков насколько это возможно - по контрасту с подходом, применямым в традиционных файловых системах (таких как Ext3, reiser3 и т. д.): распределять блоки сразу, при первой возможности. Например, если процесс осуществляет запись вызовом write(), файловая система распределит блоки под запись немедленно - даже если данные пока не будут записываться на диск, а будут находиться какое-то время в кэше. Недостатки такого подхода, например, в том, что, если процесс непрерывно осуществляет запись в растущий файл, последовательные вызовы write() постоянно распределяют блоки данных, и при этом неизвестно, будет ли файл расти далее.

При использовании отложенного распределения блоки сразу не выделяются при обращении к write(). Вместо этого распределение откладывается до момента, когда файл будет записан из кэша на диск. Благодаря этому механизм получает возможность оптимизировать процесс распределения. Наибольший выигрыш получается при использовании двух ранее упомянутых возможностей - экстентов и многоблочного распределения, поскольку часто встречается ситуация, когда окончательный файл пишется на диск в виде экстентов, распределённых с помощью mballoc. Это даёт существенный прирост производительности, и иногда сильно снижает фрагментированность данных.

7. Быстрый fsck

Fsck - это очень медленная операция, особенно это касается её первой стадии, проверки всех inodes в файловой системе.

В Ext4 после inode-таблицы каждой группы хранится список неиспользованных inodes (снабжённый для надёжности контрольной суммой), поэтому fsck такие inodes не будет проверять. Результатом является уменьшение времени проверки от 2 до 20 раз, что зависит от количества используемых inodes (см. http://kerneltrap.org/Linux/Improving_fsck_Speeds_in_Ext4).

То, что список неиспользуемых inodes составляется fsck, а не Ext4, будет хорошо заметно, если вы запустите fsck, чтобы он построил список неиспользуемых inodes, и когда только следующий запуск fsck пройдёт быстрее (запуск fsck всё равно необходим при конвертировании Ext3 в Ext4).

Кроме того, на ускорение fsck влияет и другая особенность - «гибкие группы блоков», также они ускоряют и другие файловые операции.

8. Контрольные суммы журнала

Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. У этого есть и ещё одно преимущество: благодаря контрольным суммам можно превратить систему двухфазной фиксации журнала Ext3 в однофазную, что ускоряет файловые операции в отдельных случаях до 20 %, таким образом, улучшаются одновременно и надёжность, и производительность.

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

9. Режим без журналирования

Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности .

10. Онлайн-дефрагментация

Эта функция пока в разработке и будет включена в один из будущих релизов.

Хотя отложенное и многоблочное распределение и экстенты помогают уменьшить фрагментированность файловой системы, со временем она всё-таки может вырасти.

Например: вы создаёте три файла в одном каталоге и они расположены на диске друг за другом. Потом, однажды вы решаете обновить второй файл, и при этом файл становится несколько больше - так, что места для него становится недостаточно. При этом нет никаких других решений, кроме как отделить не вмещающийся фрагмент файла и положить его на другое место диска или выделить файлу последовательную область диска большего размера в другом месте, вдалеке от первых двух файлов, что приведёт к перемещениям головки диска, если приложению потребуется считать все файлы в каталоге (скажем, менеджер файлов будет создавать эскизы для файлов изображений).

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

Также имеется утилита e4defrag, которая позволяет дефрагментировать как отдельные файлы, так и всю файловую систему.

11. Улучшения, связанные с inode

Бóльшие inodes, наносекундные временные метки, быстрые расширенные атрибуты, резервирование inodes…
  • Бóльшие inodes: Ext3 поддерживает inodes настраиваемого размера (путём указания mkfs параметра -I), однако размер inode по умолчанию - 128 байт. В Ext4 он будет 256 байт. Это потребовалось, чтобы вместить несколько дополнительных полей (таких как наносекундные временные метки и версии inode), а оставшееся в inode место будет использовано для хранения тех расширенных атрибутов, которые достаточно малы, чтобы там поместиться. Это позволит сделать доступ к таким атрибутам намного быстрее и улучшит производительность приложений, использующих их, в 3­-7 раз.
  • Суть резервирования inode состоит в выделении нескольких inodes при создании каталога в ожидании того, что они будут использованы в будущем. Это улучшает производительность, потому что вновь создаваемые в этом каталоге файлы смогут использовать зарезервированные inodes. Поэтому создание и удаление файлов производится более эффективно.
  • Наносекундные временные метки (nanosecond timestamps) означают, что такие поля inode как, например, время модификации получают наносекундную точность (в Ext3 она была равна секунде).

12. Устойчивое прераспределение

Эта возможность, доступная уже в Ext3 в последних версиях ядра и эмулируемая glibc в файловых системах, которые её не поддерживают, позволяет приложениям заранее распределять дисковое пространство, сообщая о своих потребностях файловой системе. Та, в свою очередь, выделяет необходимое количество блоков и структур данных, но они пусты до тех пор, пока приложение в реальности не осуществит в них запись.

Это именно то, что делают, например, P2P-приложения, выделяя место для данных, которые появятся там только спустя часы или дни. Однако реализовано это намного более эффективно - на уровне файловой системы и с универсальным API.

Применений этому несколько: во-первых, чтобы предотвратить выполнение того же самого приложениями (такими как P2P), неэффективно заполняющими файлы нулями - нужные блоки будут выделены разом.

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

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

Эта возможность доступна через интерфейс libc posix_fallocate().

13. Механизм «шлагбаумов» по умолчанию включен

Это опция, обеспечивающая целостность файловой системы ценой некоторой потери производительности (её можно отключить с помощью «mount -o barrier=0», рекомендуется сделать это при замерах производительности).

Выдержка из статьи LWN : «Код файловой системы обязан перед созданием записи фиксации [журнала] быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени».

Теги: Добавить метки

Почему смартфон может не запускать программы с карты памяти? Чем ext4 принципиально отличается от ext3? Почему флешка проживет дольше, если отформатировать ее в NTFS, а не в FAT? В чем главная проблема F2FS? Ответы кроются в особенностях строения файловых систем. О них мы и поговорим.

Введение

Файловые системы определяют способ хранения данных. От них зависит, с какими ограничениями столкнется пользователь, насколько быстрыми будут операции чтения и записи и как долго накопитель проработает без сбоев. Особенно это касается бюджетных SSD и их младших братьев - флешек. Зная эти особенности, можно выжать из любой системы максимум и оптимизировать ее использование для конкретных задач.

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

Увеличить срок безотказной эксплуатации помогают такие свойства современных файловых систем, как отложенная запись, дедупликация и другие продвинутые алгоритмы. Особенно актуальны они для дешевых SSD с чипами памяти TLC, флешек и карт памяти.

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

Черный ящик

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

У поклонников Windows все просто: NTFS на всех дисковых разделах и FAT32 (или та же NTFS) на флешках. Если же стоит NAS и в нем используется какая-то другая файловая система, то для большинства это остается за гранью восприятия. К нему просто подключаются по сети и качают файлы, как из черного ящика.

На мобильных гаджетах с Android чаще всего встречается ext4 во внутренней памяти и FAT32 на карточках microSD. Яблочникам же и вовсе без разницы, что у них за файловая система: HFS+, HFSX, APFS, WTFS… для них существуют только красивые значки папок и файлов, нарисованные лучшими дизайнерами. Богаче всего выбор у линуксоидов, но прикрутить поддержку неродных для операционки файловых систем можно и в Windows, и в macOS - об этом чуть позже.

Общие корни

Различных файловых систем создано свыше сотни, но актуальными можно назвать чуть больше десятка. Хотя все они разрабатывались для своих специфических применений, многие в итоге оказались родственными на концептуальном уровне. Они похожи, поскольку используют однотипную структуру представления (мета)данных - B-деревья («би-деревья»).

Как и любая иерархическая система, B-дерево начинается с корневой записи и далее ветвится вплоть до конечных элементов - отдельных записей о файлах и их атрибутах, или «листьев». Основной смысл создания такой логической структуры был в том, чтобы ускорить поиск объектов файловой системы на больших динамических массивах - вроде жестких дисков объемом в несколько терабайт или еще более внушительных RAID-массивов.

B-деревья требуют гораздо меньше обращений к диску, чем другие типы сбалансированных деревьев, при выполнении тех же операций. Достигается это за счет того, что конечные объекты в B-деревьях иерархически расположены на одной высоте, а скорость всех операций как раз пропорциональна высоте дерева.

Как и другие сбалансированные деревья, B-trees имеют одинаковую длину путей от корня до любого листа. Вместо роста ввысь они сильнее ветвятся и больше растут в ширину: все точки ветвления у B-дерева хранят множество ссылок на дочерние объекты, благодаря чему их легко отыскать за меньшее число обращений. Большое число указателей снижает количество самых длительных дисковых операций - позиционирования головок при чтении произвольных блоков.

Концепция B-деревьев была сформулирована еще в семидесятых годах и с тех пор подвергалась различным улучшениям. В том или ином виде она реализована в NTFS, BFS, XFS, JFS, ReiserFS и множестве СУБД. Все они - родственники с точки зрения базовых принципов организации данных. Отличия касаются деталей, зачастую довольно важных. Недостаток у родственных файловых систем тоже общий: все они создавались для работы именно с дисками еще до появления SSD.

Флеш-память как двигатель прогресса

Твердотельные накопители постепенно вытесняют дисковые, но пока вынуждены использовать чуждые им файловые системы, переданные по наследству. Они построены на массивах флеш-памяти, принципы работы которой отличаются от таковых у дисковых устройств. В частности, флеш-память должна стираться перед записью, а эта операция в чипах NAND не может выполняться на уровне отдельных ячеек. Она возможна только для крупных блоков целиком.

Связано это ограничение с тем, что в NAND-памяти все ячейки объединены в блоки, каждый из которых имеет только одно общее подключение к управляющей шине. Не будем вдаваться в детали страничной организации и расписывать полную иерархию. Важен сам принцип групповых операций с ячейками и тот факт, что размеры блоков флеш-памяти обычно больше, чем блоки, адресуемые в любой файловой системе. Поэтому все адреса и команды для накопителей с NAND flash надо транслировать через слой абстрагирования FTL (Flash Translation Layer).

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

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

Такой подход напоминает армейские будни: чтобы отдать приказ одному солдату, сержант делает общее построение, вызывает бедолагу из строя и командует остальным разойтись. В редкой ныне NOR-памяти организация была спецназовская: каждая ячейка управлялась независимо (у каждого транзистора был индивидуальный контакт).

Задач у контроллеров все прибавляется, поскольку с каждым поколением флеш-памяти техпроцесс ее изготовления уменьшается ради повышения плотности и удешевления стоимости хранения данных. Вместе с технологическими нормами уменьшается и расчетный срок эксплуатации чипов.

Модули с одноуровневыми ячейками SLC имели заявленный ресурс в 100 тысяч циклов перезаписи и даже больше. Многие из них до сих пор работают в старых флешках и карточках CF. У MLC корпоративного класса (eMLC) ресурс заявлялся в пределах от 10 до 20 тысяч, в то время как у обычной MLC потребительского уровня он оценивается в 3–5 тысяч. Память этого типа активно теснит еще более дешевая TLC, у которой ресурс едва дотягивает до тысячи циклов. Удерживать срок жизни флеш-памяти на приемлемом уровне приходится за счет программных ухищрений, и новые файловые системы становятся одним из них.

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

В корпоративных SSD встроенный контроллер - это маленький компьютер. У него есть огромный буфер памяти (полгига и больше), и он поддерживает множество методов повышения эффективности работы с данными, что позволяет избегать лишних циклов перезаписи. Чип упорядочивает все блоки в кеше, выполняет отложенную запись, производит дедупликацию на лету, резервирует одни блоки и очищает в фоне другие. Все это волшебство происходит абсолютно незаметно для ОС, программ и пользователя. С таким SSD действительно непринципиально, какая файловая система используется. Внутренние оптимизации оказывают гораздо большее влияние на производительность и ресурс, чем внешние.

В бюджетные SSD (и тем более - флешки) ставят куда менее умные контроллеры. Кеш в них урезан или отсутствует, а продвинутые серверные технологии не применяются вовсе. В картах памяти контроллеры настолько примитивные, что часто утверждается, будто их нет вовсе. Поэтому для дешевых устройств с флеш-памятью остаются актуальными внешние методы балансировки нагрузки - в первую очередь при помощи специализированных файловых систем.

От JFFS к F2FS

Одной из первых попыток написать файловую систему, которая бы учитывала принципы организации флеш-памяти, была JFFS - Journaling Flash File System. Изначально эта разработка шведской фирмы Axis Communications была ориентирована на повышение эффективности памяти сетевых устройств, которые Axis выпускала в девяностых. Первая версия JFFS поддерживала только NOR-память, но уже во второй версии подружилась с NAND.

Сейчас JFFS2 имеет ограниченное применение. В основном она все так же используется в дистрибутивах Linux для встраиваемых систем. Ее можно найти в маршрутизаторах, IP-камерах, NAS и прочих завсегдатаях интернета вещей. В общем, везде, где требуется небольшой объем надежной памяти.

Дальнейшей попыткой развития JFFS2 стала LogFS, у которой индексные дескрипторы хранились в отдельном файле. Авторы этой идеи - сотрудник немецкого подразделения IBM Йорн Энгель и преподаватель Оснабрюкского университета Роберт Мертенс. Исходный код LogFS выложен на GitHub . Судя по тому, что последнее изменение в нем было сделано четыре года назад, LogFS так и не обрела популярность.

Зато эти попытки подстегнули появление другой специализированной файловой системы - F2FS. Ее разработали в корпорации Samsung, на долю которой приходится немалая часть производимой в мире флеш-памяти. В Samsung делают чипы NAND Flash для собственных устройств и по заказу других компаний, а также разрабатывают SSD с принципиально новыми интерфейсами вместо унаследованных дисковых. Создание специализированной файловой системы с оптимизацией для флеш-памяти было с точки зрения Samsung давно назревшей необходимостью.

Четыре года назад, в 2012 году, в Samsung создали F2FS (Flash Friendly File System). Ее идея хороша, но реализация оказалась сыроватой. Ключевая задача при создании F2FS была проста: снизить число операций перезаписи ячеек и распределить нагрузку на них максимально равномерно. Для этого требуется выполнять операции с несколькими ячейками в пределах того же блока одновременно, а не насиловать их по одной. Значит, нужна не мгновенная перезапись имеющихся блоков по первому запросу ОС, а кеширование команд и данных, дозапись новых блоков на свободное место и отложенное стирание ячеек.

Сегодня поддержка F2FS уже официально реализована в Linux (а значит, и в Android), но особых преимуществ на практике она пока не дает. Основная особенность этой файловой системы (отложенная перезапись) привела к преждевременным выводам о ее эффективности. Старый трюк с кешированием даже одурачивал ранние версии бенчмарков, где F2FS демонстрировала мнимое преимущество не на несколько процентов (как ожидалось) и даже не в разы, а на порядки. Просто драйвер F2FS рапортовал о выполнении операции, которую контроллер только планировал сделать. Впрочем, если реальный прирост производительности у F2FS и невелик, то износ ячеек определенно будет меньше, чем при использовании той же ext4. Те оптимизации, которые не сможет сделать дешевый контроллер, будут выполнены на уровне самой файловой системы.

Экстенты и битовые карты

Пока F2FS воспринимается как экзотика для гиков. Даже в собственных смартфонах Samsung все еще применяется ext4. Многие считают ее дальнейшим развитием ext3, но это не совсем так. Речь идет скорее о революции, чем о преодолении барьера в 2 Тбайт на файл и простом увеличении других количественных показателей.

Когда компьютеры были большими, а файлы - маленькими, адресация не представляла сложностей. Каждому файлу выделялось энное количество блоков, адреса которых заносились в таблицу соответствия. Так работала и файловая система ext3, остающаяся в строю до сих пор. А вот в ext4 появился принципиально другой способ адресации - экстенты.

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

Поменялся в ext4 и сам механизм записи. Теперь распределение блоков происходит сразу за один запрос. И не заранее, а непосредственно перед записью данных на диск. Отложенное многоблочное распределение позволяет избавиться от лишних операций, которыми грешила ext3: в ней блоки для нового файла выделялись сразу, даже если он целиком умещался в кеше и планировался к удалению как временный.


Диета с ограничением FAT

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

Загадка

Отгадай загадку: в двенадцать она начала полнеть, к шестнадцати была глуповатой толстушкой, а к тридцати двум стала жирной, так и оставшись простушкой. Кто она?

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

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

Зачем же FAT32 нужна в наши дни? Все так же исключительно для обеспечения совместимости. Производители справедливо полагают, что раздел с FAT32 сможет прочитать любая ОС. Поэтому именно его они создают на внешних жестких дисках, USB Flash и картах памяти.

Как освободить флеш-память смартфона

Карточки microSD(HC), используемые в смартфонах, по умолчанию отформатированы в FAT32. Это основное препятствие для установки на них приложений и переноса данных из внутренней памяти. Чтобы его преодолеть, нужно создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), поэтому любое приложение сможет работать так, словно запустилось из внутренней памяти.

Windows не умеет делать на флешках больше одного раздела, но для этого можно запустить Linux (хотя бы в виртуалке) или продвинутую утилиту для работы с логической разметкой - например, MiniTool Partition Wizard Free . Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Link2SD и аналогичные ему предложат куда больше вариантов, чем в случае с одним разделом FAT32.


Как еще один аргумент в пользу выбора FAT32 часто называют отсутствие в ней журналирования, а значит, более быстрые операции записи и меньший износ ячеек памяти NAND Flash. На практике же использование FAT32 приводит к обратному и порождает множество других проблем.

Флешки и карты памяти как раз быстро умирают из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов, где расположены две цепочки файловых таблиц. Сохранил веб-страничку целиком, и она перезаписалась раз сто - с каждым добавлением на флешку очередной мелкой гифки. Запустил портейбл-софт? Он насоздавал временных файлов и постоянно меняет их во время работы. Поэтому гораздо лучше использовать на флешках NTFS с ее устойчивой к сбоям таблицей $MFT. Мелкие файлы могут храниться прямо в главной файловой таблице, а ее расширения и копии записываются в разные области флеш-памяти. Вдобавок благодаря индексации на NTFS поиск выполняется быстрее.

INFO

Для FAT32 и NTFS теоретические ограничения по уровню вложенности не указаны, но на практике они одинаковые: в каталоге первого уровня можно создать только 7707 подкаталогов. Любители поиграть в матрешки оценят.

Другая проблема, с которой сталкивается большинство пользователей, - на раздел с FAT32 невозможно записать файл больше 4 Гбайт. Причина заключается в том, что в FAT32 размер файла описывается 32 битами в таблице размещения файлов, а 2^32 (минус единица, если быть точным) как раз дают четыре гига. Получается, что на свежекупленную флешку нельзя записать ни фильм в нормальном качестве, ни образ DVD.

Копирование больших файлов еще полбеды: при попытке сделать это ошибка хотя бы видна сразу. В других ситуациях FAT32 выступает в роли бомбы замедленного действия. Например, ты скопировал на флешку портейбл-софт и на первых порах пользуешься им без проблем. Спустя длительное время у одной из программ (допустим, бухгалтерской или почтовой) база данных раздувается, и… она просто перестает обновляться. Файл не может быть перезаписан, поскольку достиг лимита в 4 Гбайт.

Менее очевидная проблема заключается в том, что в FAT32 дата создания файла или каталога может быть задана с точностью до двух секунд. Этого недостаточно для многих криптографических приложений, использующих временные метки. Низкая точность атрибута «дата» - еще одна причина того, почему FAT32 не рассматривается как полноценная файловая система с точки зрения безопасности. Однако ее слабые стороны можно использовать и в своих целях. Например, если скопировать на том FAT32 любые файлы с раздела NTFS, то они очистятся от всех метаданных, а также унаследованных и специально заданных разрешений. FAT просто не поддерживает их.

exFAT

В отличие от FAT12/16/32, exFAT разрабатывалась специально для USB Flash и карт памяти большого (≥ 32 Гбайт) объема. Extended FAT устраняет упомянутый выше недостаток FAT32 - перезаписывание одних и тех же секторов при любом изменении. Как у 64-разрядной системы, у нее нет практически значимых лимитов на размер одного файла. Теоретически он может иметь длину в 2^64 байт (16 Эбайт), а карточки такого объема появятся нескоро.

Еще одно принципиальное отличие exFAT - поддержка списков контроля доступа (ACL). Это уже не та простушка из девяностых, однако внедрению exFAT мешает закрытость формата. Поддержка exFAT полноценно и легально реализована только в Windows (начиная с XP SP2) и OS X (начиная с 10.6.5). В Linux и *BSD она поддерживается либо с ограничениями, либо не вполне законно. Microsoft требует лицензировать использование exFAT, и в этой области много правовых споров.

Btrfs

Еще один яркий представитель файловых систем на основе B-деревьев называется Btrfs. Эта ФС появилась в 2007 году и изначально создавалась в Oracle с прицелом на работу с SSD и RAID. Например, ее можно динамически масштабировать: создавать новые индексные дескрипторы прямо в работающей системе или разделять том на подтома без выделения им свободного места.

Реализованный в Btrfs механизм копирования при записи и полная интеграция с модулем ядра Device mapper позволяют делать практически мгновенные снапшоты через виртуальные блочные устройства. Предварительное сжатие данных (zlib или lzo) и дедупликация ускоряют основные операции, заодно продлевая время жизни флеш-памяти. Особенно это заметно при работе с базами данных (достигается сжатие в 2–4 раза) и мелкими файлами (они записываются упорядоченно крупными блоками и могут храниться непосредственно в «листьях»).

Также Btrfs поддерживает режим полного журналирования (данных и метаданных), проверку тома без размонтирования и множество других современных фич. Код Btrfs опубликован под лицензией GPL. Эта файловая система поддерживается в Linux как стабильная начиная с версии ядра 4.3.1.

Бортовые журналы

Практически все более-менее современные файловые системы (ext3/ext4, NTFS, HFSX, Btrfs и другие) относят к общей группе журналируемых, поскольку они ведут учет вносимых изменений в отдельном логе (журнале) и сверяются с ним в случае сбоя при выполнении дисковых операций. Однако степень подробности ведения журналов и отказоустойчивость у этих файловых систем разные.

Еxt3 поддерживает три режима ведения журнала: с обратной связью, упорядоченный и полное журналирование. Первый режим подразумевает запись только общих изменений (метаданных), выполняемую асинхронно по отношению к изменениям самих данных. Во втором режиме выполняется та же запись метаданных, но строго перед внесением любых изменений. Третий режим эквивалентен полному журналированию (изменений как в метаданных, так и в самих файлах).

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

Журналирование в NTFS похоже на второй режим ведения лога в ext3. В журнал записываются только изменения в метаданных, а сами данные в случае сбоя могут быть утеряны. Такой метод ведения журнала в NTFS задумывался не как способ достижения максимальной надежности, а лишь как компромисс между быстродействием и отказоустойчивостью. Именно поэтому люди, привыкшие к работе с полностью журналируемыми системами, считают NTFS псевдожурналируемой.

Реализованный в NTFS подход в чем-то даже лучше используемого по умолчанию в ext3. В NTFS дополнительно периодически создаются контрольные точки, которые гарантируют выполнение всех отложенных ранее дисковых операций. Контрольные точки не имеют ничего общего с точками восстановления в \System Volume Infromation\ . Это просто служебные записи в логе.

Практика показывает, что такого частичного журналирования NTFS в большинстве случаев хватает для беспроблемной работы. Ведь даже при резком отключении питания дисковые устройства не обесточиваются мгновенно. Блок питания и многочисленные конденсаторы в самих накопителях обеспечивают как раз тот минимальный запас энергии, которого хватает на завершение текущей операции записи. Современным SSD при их быстродействии и экономичности такого же количества энергии обычно хватает и на выполнение отложенных операций. Попытка же перейти на полное журналирование снизила бы скорость большинства операций в разы.

Подключаем сторонние ФС в Windows

Использование файловых систем лимитировано их поддержкой на уровне ОС. Например, Windows не понимает ext2/3/4 и HFS+, а использовать их порой надо. Сделать это можно, добавив соответствующий драйвер.

WARNING

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

Открытый драйвер для чтения и записи на разделы ext2/3 с частичной поддержкой ext4. В последней версии поддерживаются экстенты и разделы объемом до 16 Тбайт. Не поддерживаются LVM, списки контроля доступа и расширенные атрибуты.


Существует бесплатный плагин для Total Commander. Поддерживает чтение разделов ext2/3/4.


coLinux - открытый и бесплатный порт ядра Linux. Вместе с 32-битным драйвером он позволяет запускать Linux в среде Windows с 2000 по 7 без использования технологий виртуализации. Поддерживает только 32-битные версии. Разработка 64-битной модификации была отменена. сoLinux позволяет в том числе организовать из Windows доступ к разделам ext2/3/4. Поддержка проекта приостановлена в 2014 году.

Возможно, в Windows 10 уже есть встроенная поддержка характерных для Linux файловых систем, просто она скрыта. На эти мысли наводит драйвер уровня ядра Lxcore.sys и сервис LxssManager, который загружается как библиотека процессом Svchost.exe. Подробнее об этом смотри в докладе Алекса Ионеску «Ядро Линукс, скрытое внутри Windows 10», с которым он выступил на Black Hat 2016.


ExtFS for Windows - платный драйвер, выпускаемый компанией Paragon. Он работает в Windows с 7 по 10, поддерживает доступ к томам ext2/3/4 в режиме чтения и записи. Обеспечивает почти полную поддержку ext4 в Windows.

HFS+ for Windows 10 - еще один проприетарный драйвер производства Paragon Software. Несмотря на название, работает во всех версиях Windows начиная с XP. Предоставляет полный доступ к файловым системам HFS+/HFSX на дисках с любой разметкой (MBR/GPT).

WinBtrfs - ранняя разработка драйвера Btrfs для Windows. Уже в версии 0.6 поддерживает доступ к томам Btrfs как на чтение, так и на запись. Умеет обрабатывать жесткие и символьные ссылки, поддерживает альтернативные потоки данных, ACL, два вида компрессии и режим асинхронного чтения/записи. Пока WinBtrfs не умеет использовать mkfs.btrfs, btrfs-balance и другие утилиты для обслуживания этой файловой системы.

Возможности и ограничения файловых систем: сводная таблица

Фай-ло-вая сис-те-ма Мак-си-маль-ный раз-мер тома Пре-дель-ный раз-мер одного файла Дли-на собст-вен-ного имени файла Дли-на пол-но-го имени файла (вклю-чая путь от корня) Пре-дель-ное число файлов и/или ката-ло-гов Точ-ность ука-за-ния даты файла/ката-ло-га Права дос-ту-па Жёсткие ссылки Сим-воль-ные ссылки Мгно-вен-ные снимки (snap-shots) Сжа-тие дан-ных в фоне Шиф-ро-ва-ние дан-ных в фоне Деду-пли-ка-ция дан-ных
FAT16 2 ГБ секторами по 512 байт или 4 ГБ кластерами по 64 КБ 2 ГБ 255 байт с LFN
FAT32 8 ТБ секторами по 2 КБ 4 ГБ (2^32 — 1 байт) 255 байт с LFN до 32 подкаталогов с CDS 65460 10 мс (создание) / 2 с (изменение) нет нет нет нет нет нет нет
exFAT ≈ 128 ПБ (2^32-1 кластеров по 2^25-1 байт) теоретически / 512 ТБ из-за сторонних ограничений 16 ЭБ (2^64 — 1 байт) 2796202 в каталоге 10 мс ACL нет нет нет нет нет нет
NTFS 256 ТБ кластерами по 64 КБ или 16 ТБ кластерами по 4 КБ 16 ТБ (Win 7) / 256 ТБ (Win 8) 255 символов Unicode (UTF-16) 32760 символов Unicode, но не более 255 символов в каждом элементе 2^32-1 100 нс ACL да да да да да да
HFS+ 8 ЭБ (2^63 байт) 8 ЭБ 255 символов Unicode (UTF-16) отдельно не ограничивается 2^32-1 1 с Unix, ACL да да нет да да нет
APFS 8 ЭБ (2^63 байт) 8 ЭБ 255 символов Unicode (UTF-16) отдельно не ограничивается 2^63 1 нс Unix, ACL да да да да да да
Ext3 32 ТБ (теоретически) / 16 ТБ кластерами по 4 КБ (из-за ограничений утилит e2fs programs) 2 ТБ (теоретически) / 16 ГБ у старых программ 255 символов Unicode (UTF-16) отдельно не ограничивается 1 с Unix, ACL да да нет нет нет нет
Ext4 1 ЭБ (теоретически) / 16 ТБ кластерами по 4 КБ (из-за ограничений утилит e2fs programs) 16 ТБ 255 символов Unicode (UTF-16) отдельно не ограничивается 4 млрд. 1 нс POSIX да да нет нет да нет
F2FS 16 ТБ 3,94 ТБ 255 байт отдельно не ограничивается 1 нс POSIX, ACL да да нет нет да нет
BTRFS 16 ЭБ (2^64 — 1 байт) 16 ЭБ 255 символов ASCII 2^17 байт 1 нс POSIX, ACL да да да да да да

Как в среде Windows сделать возможным доступ к разделу диска или съёмному носителю с файловыми системами Ext2/3/4 ? Если, к примеру, на компьютере есть ещё и вторая система Linux . И с её данными необходимо поработать из среды Windows . Или другой пример – когда внутри Windows смонтированы виртуальные диски с установленными на виртуальные машины системами Linux или Android . С Ext2/3/4 Windows нативно не умеет работать, ей для этого нужны сторонние средства. Что это за средства? Рассмотрим ниже таковые.


***
Тройка первых средств сделает возможным только чтение устройств информации с Ext2/3/4 . Последнее решение позволит и читать, и записывать данные. Все рассмотренные ниже средства бесплатны.

1. Программа DiskInternals Linux Reader

Простенькая программка – это примитивный файловый менеджер, сделанный по типу штатного проводника Windows, с поддержкой файловых систем Ext 2/3/4 , Reiser4 , HFS , UFS2 . В окне программы увидим разделы и устройства с Linux или Android .

Для копирования необходимо выделить папку или файл, нажать кнопку «Save» .

Затем указать путь копирования.

2. Плагин для Total Commander DiskInternals Reader

Любители популярного могут извлекать данные Linux или Android внутри Windows с помощью этого файлового менеджера. Но предварительно установив в него специальный плагин. Один из таких плагинов — , он умеет подключать и читать устройства информации, форматированные в Ext2/3/4 , Fat/exFAT , HFS/HFS+ , ReiserFS . Загружаем плагин, распаковываем его архив внутри , подтверждаем установку.

Запускаем (важно) от имени администратора. Заходим в раздел . Нажимаем .

Здесь, наряду с прочими разделами диска и носителями, будет отображаться тот, что с Ext2/3/4 .

Данные копируются традиционным для способом – клавишей F5 на вторую панель.

3. Плагин для Total Commander ext4tc

Упрощённая альтернатива предыдущему решению – ext4tc , ещё один плагин для . Он может подключать для чтения устройства информации, форматированные только в Ext2/3/4 . Скачиваем плагин, распаковываем его архив внутри файлового менеджера, запускаем установку.

Запускаем (важно) от имени администратора. Кликаем . Заходим в .

При необходимости копирования данных используем обычный способ с клавишей F5 .

4. Драйвер поддержки Ext2Fsd

Программа Ext2Fsd – это драйвер Ext2/3/4 , он реализует поддержку этих файловых систем на уровне операционной системы. С разделами диска и накопителями, форматированными в эти файловые системы, можно работать как с обычными, поддерживаемыми Windows устройствами информации в окне проводника или сторонних программ. Драйвер позволяет и считывать, и записывать данные.

Скачиваем последнюю актуальную версию Ext2Fsd .

При установке активируем (если для длительной работы) три предлагаемых чекбокса:

1 — Автозапуск драйвера вместе с Windows;
2 — Поддержка записи для Ext2 ;
3 — Поддержка форматирования для Ext3 .

На предфинишном этапе активируем опцию запуска окошка диспетчера драйвера — — с попутным присвоением устройствам информации с Ext2/3/4 буквы диска.

В окошке открывшегося увидим носитель с уже присвоенной буквой. Например, в нашем случае носителю с Ext4 задана первая свободная буква F .

Теперь можем работать с диском F в окне проводника.

Присвоить букву новым подключаемым устройствам с Ext2/3/4 можно с помощью контекстного меню, вызываемого на каждом из отображаемых в окне устройств. Но просто при присвоении буквы диска такое устройство не будет отображаться после перезагрузки Windows, это решение только для одного сеанса работы с компьютером. Чтобы сделать новое устройство с Ext2/3/4 постоянно видимым в среде Windows, необходимо двойным кликом по нему открыть настроечное окошко и установить постоянные параметры подключения. Во второй графе нужно:

Для съёмных носителей активировать чекбокс, обозначенный на скриншоте цифрой 1, и указать букву диска;
Для внутренних дисков и разделов активировать чекбокс, обозначенный на скриншоте ниже цифрой 2, и также указать букву диска.

Файловая система EXT3

В отличие от EXT2, EXT3 является журналируемой файловой системой, т.е. не попадет в противоречивое состояние после сбоев. Но она полностью совместима с EXT2.

Разработанная в Red Hat

В данный момент является основной для LINUX.

Драйвер Ext3 хранит полные точные копии модифицируемых блоков (1КБ, 2КБ или 4КБ) в памяти до завершения операции. Это может показаться расточительным. Полные блоки содержат не только изменившиеся данные, но и не модифицированные.

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

Типы журналирования поддерживаемые Ext3, которые могут быть активированы из файла /etc/fstab:

o data=journal (full data journaling mode) - все новые данные сначала пишутся в журнал и только после этого переносятся на свое постоянное место. В случае аварийного отказа журнал можно повторно перечитать, приведя данные и метаданные в непротиворечивое состояние.
Самый медленный, но самый надежный.

o data=ordered - записываются изменения только мета-данных файловой системы, но логически metadata и data блоки группируются в единый модуль, называемый transaction. Перед записью новых метаданных на диск, связанные data блоки записываются первыми. Этот режим журналирования ext3 установлен по умолчанию.
При добавлении данных в конец файла режим data=ordered гарантированно обеспечивает целостность (как при full data journaling mode). Однако если данные в файл пишутся поверх существующих, то есть вероятность перемешивания "оригинальных" блоков с модифицированными. Это результат того, что data=ordered не отслеживает записи, при которых новый блок ложится поверх существующего и не вызывает модификации метаданных.

o data=writeback (metadata only) - записываются только изменения мета-данных файловой системы. Самый быстрый метод журналирования. С подобным видом журналирования вы имеете дело в файловых системах XFS, JFS и ReiserFS.

3.3.3 Файловая системаXFS

XFS - журналируемая файловая система разработанная Silicon Graphics, но сейчас выпущенная открытым кодом (open source).

Официальная информация на http://oss.sgi.com/projects/xfs/

XFS была создана в начале 90ых (1992-1993) фирмой Silicon Grapgics (сейчас SGI) для мультимедийных компьютеров с ОС Irix. Файловая система была ориентирована на очень большие файлы и файловые системы. Особенностью этой файловой системы является устройство журнала - в журнал пишется часть метаданных самой файловой системы таким образом, что весь процесс восстановления сводится к копированию этих данных из журнала в файловую систему. Размер журнала задается при создании системы, он должен быть не меньше 32 мегабайт; а больше и не надо - такое количество незакрытых транзакций тяжело получить.

Некоторые особенности:

o Более эффективно работает с большими файлами.

o Имеет возможность выноса журнала на другой диск, для повышения производительности.

o Сохраняет данные кэша только при переполнении памяти, а не периодически как остальные.

o В журнал записываются только мета-данные.

o Используются B+ trees.

o Используется логическое журналирование

3.3.4 Файловая системаRFS

RFS (RaiserFS) - журналируемая файловая система разработанная Namesys.

Официальная информация на RaiserFS

Некоторые особенности:

o Более эффективно работает с большим количеством мелких файлов, в плане производительности и эффективности использования дискового пространства.

o Использует специально оптимизированные b* balanced tree (усовершенствованная версия B+ дерева)

o Динамически ассигнует i-узлы вместо их статического набора, образующегося при создании "традиционной" файловой системы.

o Динамические размеры блоков.

3.3.4 Файловая системаJFS

JFS (Journaled File System) - журналируемая файловая система разработанная IBM для ОС AIX, но сейчас выпущенная как открытый код.

Официальная информация на Journaled File System Technology for Linux

Некоторые особенности:

o Журналы JFS соответствуют классической модели транзакций, принятой в базах данных

o В журнал записываются только мета-данные

o Размер журнала не больше 32 мегабайт.

o Асинхронный режим записи в журнал - производится в моменты уменьшения трафика ввода/вывода

o Используется логическое журналирование.

3.4 Сравнительная таблица некоторых современных файловых систем

NTFS EXT4 RFS XFS JFS
Хранение информации о файлах MFT inode inode inode inode
Максимальный размер раздела 16 Эбайт (2 60) 1 Эбайт 4 гигаблоков (т.к. блоки динамические) 16 Эбайт 32 Пбайт
Размеры блоков от 512 байт до 64 Кбайт 1 Кбайт - 4 Кбайт До 64 Кбайт (сейчас фиксированы 4 Кбайт) от 512 байт до 64 Кбайт 512/1024/ 2048/4096 байт
Максимальное число блоков 2^48 2^32 2^32
Максимальный размер файла 2^64 16 Тбайт (для 4Кбайт блоков) 8 Тбайт 8 Эбайт 4 Пбайт (2 50)
Максимальная длина имени файла
Журналирование Да Да Да Да Да
Управление свободными блоками Нет На основе битовой карты B-деревья, индексированные по смещению и по размеру Дерево+ Binary Buddy
Экстенты для свободного пространства Нет Нет Да Нет
B-деревья для элементов каталогов Да Нет Как поддерево основного дерева файловой системы Да Да
B-деревья для адресации блоков файлов Нет Внутри основного дерева файловой системы Да Да
Экстенты для адресации блоков файлов Нет Да (с 4 версии) Да Да
Данные внутри inode (небольшие файлы) Нет Да Да Нет
Данные симво-льных ссылок внутри inode Нет Да Да Да
Элементы каталогов внутри inode (небольшие каталоги) Нет Да Да Да
Динамическое выделение inode/MFT Да Нет Да Да Да
Структуры управления динамически выделяемыми inode Нет Общее B*дерево B+дерево B+дерево с непрерывными областями inode
Поддержка разреженных файлов Да Нет Да Да Да