null

The rake of the 32k subdirectory limit или переходим на ext4

The rakeВ очередной раз при выполнении простейшей задачи наступил на ГРАБЛИ, на этот раз в ограничения ext3 (впрочем как и ufs, veritas file system) в 32000 подкаталогов в одном каталоге (сопровождается ошибкой вида mkdir: cannot create directory `...': Too many links ).
На мой взгляд, наиболее простой путь решения данной проблемы - перейти на ext4 (в ext3 могло быть максимум 32 000 подкаталогов в одном каталоге, в ext4 количество каталогов не ограничивается).

Есть несколько вариантов перехода с ext3 на ext4:
Начиная с ядра 2.6.28 можно монтировать ext3 файловые системы как ext4 (без какой-либо конвертации). Этот метод даст возможность использовать новые оптимизированные фичи нового драйвера (например delayed allocation, multi-block allocation, inode большего размера), и при этом физически на диске ничего не изменится, оставив возможность вернутся обратно на драйвер ext3.
Для этого необходимо просто изменить опции монтирования (например в /etc/fstab ext3 заменить на ext4 или mount -t ext4 /dev/имя_устройства /точка_монтирования).

Но, если вы хотите использовать новые возможности ext4 которые меняют физический формат хранения данных (например такие как extents), то необходимо сконвертировать в ext4.
Нижеперечисленные команды необходимо выполнять на размонтированном устройстве.
Если вы используете ext2, то первоначально необходимо включить журналирование (tune2fs -j /dev/имя_устройства).

Чтобы включить новые возможности ext4 на имеющейся файловой системе ext3, необходимо выполнить:

# tune2fs -O extents,uninit_bg,dir_index /dev/имя_устройства



После этого необходимо проверить файловую систему с помощью fsck:

# e2fsck -pDf /dev/{нужный раздел}



Если раздел автоматически монтируется через /etc/fstab, то необходимо исправить файловую систему на ext4.

Стоит так же отметить, что есть некоторые новые возможности, которые можно получить, только заново отформатировав раздел, например, flex_bg и поддержка разделов размером больше 16 терабайт. Так же после включения экстентов, новые файлы будут создаваться с использованием их, но с имеющимися файлами ничего не произойдет, они останутся в "старом формате". Есть утилита defrag2fs, которая все старые файлы переводит в "новый формат".

Сравнение ext3 и ext4
1) Увеличенный размер файла и файловой системы (Для ext3 максимальный размер файловой системы составляет 32 Тбайт, а файла - 2 Тбайт, но на практике ограничения были более жесткими. Так, в зависимости от архитектуры, максимальный размер тома составлял до 2 Тбайт, а максимальный размер файла -до 16 Гбайт.
В случае с ext4 максимальный размер одного раздела диска до 1 эксабайта (260 байт) при размере блока 4Kb. Максимальный размер файла составляет 16 Тбайт.


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

3) Отложенное выделение пространства (Файловая система ext4 может отложить выделение дискового пространства до последнего момента, что увеличивает производительность системы)

4) Контрольные суммы журналов (Контрольные суммы журналов повышают надежность файловой системы)

5) Большее количество каталогов (В ext3 могло быть максимум 32 000 каталогов, в ext4 количество каталогов не ограничивается)

6) Дефрагментация "налету" (Файловая система ext3 не особо склонна к фрагментации, но все же такое неприятное явление имеется. В ext4 производится дефрагментация "на лету", что позволяет повысить производительность системы в целом)

7) Наносекундные временные метки (В большинстве файловых систем временные метки (timestamp) устанавливаются с точностью до секунды, в ext4 точность повышена до наносекунды. Также ext4 поддерживает временные метки до 25 апреля 2514 года, в отличие от ext3 (18 января 2038 г.))