У меня есть две файловые системы ext3, которые очень стары и были заполнены на 99% в течение долгого времени, что привело к фрагментации. Кроме того, они использовались для запуска виртуальных машин с динамическими образами дисков и другими нагрузками, вызывающими фрагментацию.
Я недавно преобразовал файловые системы в ext4, используя инструкции здесь , в частности, запустив:
# tune2fs -O extents,uninit_bg,dir_index /dev/DEV
# e2fsck -fDC0 /dev/DEV
Однако файловые системы все еще не поддерживают e4defrag
:
Failed to defrag with EXT4_IOC_MOVE_EXT ioctl:Operation not supported [ NG ]
Полагаю, в команде tune2fs
отсутствует какая-либо опция, но поиск в Google не помог мне понять, что это может быть.
https://wiki.archlinux.org/index.php/Ext4#Migrating_files_to_extents
Предупреждение: НЕ используйте следующий метод с хранилищем Mercurial, которое было клонировано локально, так как это повредит хранилище. Это может также повредить другие жесткие ссылки в файловой системе.
Несмотря на то, что файловая система теперь преобразована в ext4, все файлы, которые были записаны до преобразования, еще не используют новые экстенты ext4, которые улучшат производительность больших файлов и сократят время фрагментации и проверки файловой системы. Чтобы в полной мере воспользоваться преимуществами ext4, все файлы должны быть перезаписаны на диск. Утилита под названием e4defrag
разрабатывается и позаботится об этой задаче; однако он еще не готов к производству.
К счастью, можно использовать программу chattr
, которая заставит ядро переписать файл, используя экстенты. Можно выполнить эту команду для всех файлов и каталогов одного раздела (например, если /home
находится на выделенном разделе): (Должен выполняться от имени root)
find /home -xdev -type f -print0 | xargs -0 chattr +e
find /home -xdev -type d -print0 | xargs -0 chattr +e
Рекомендуется проверить это сначала запустите небольшое количество файлов и проверьте, все ли в порядке. Также может быть полезно проверить файловую систему после преобразования.
Используя команду lsattr
, можно проверить, что файлы теперь используют экстенты. Буква 'e' должна появиться в списке атрибутов перечисленных файлов.
-
Примечание. Я предполагал, что e4defrag может конвертировать файлы для использования экстентов. Неудачный ioctl - это тот, который делает это на самом деле, поэтому я немного смущен тем, почему он не работает, но chattr +e
сработал для меня. Получив chattr +e
файлов, вы можете использовать e4defrag
для них. Очевидно, на всякий случай убедитесь, что у вас есть резервная копия и т. Д. (Я бы подумал, что это безопасно, но вы никогда не знаете - здесь есть предупреждение о жестких ссылках, но я не вижу другой ссылки на известные проблемы с жесткими ссылками).