Как «дефрагментировать» каталог на ext3? - PullRequest
4 голосов
/ 29 ноября 2010

Я запускаю демон, который анализирует файлы в каталоге, а затем удаляет их. Если демон по какой-либо причине не работает, файлы там складываются. Сегодня у меня было 90 тыс. Файлов в этом каталоге. После повторного запуска демона он обработал все файлы.

Однако каталог остается большим; "ls -dh." возвращает размер 5.6M. Как я могу «дефрагментировать» этот каталог? Я уже понял, что переименование этого каталога и создание нового с тем же именем и разрешениями решает проблему. Однако, поскольку файлы записываются туда в любое время, кажется, что не существует безопасного способа переименовать каталог и создать новый, поскольку на данный момент целевой каталог не существует.

Итак, а) существует ли программа / a (оболочка), которая может дефрагментировать каталоги в файловой системе ext3? или б) есть ли способ создать блокировку для каталога, чтобы попытаться записать файлы в блоки до завершения переименования / создания?

Ответы [ 3 ]

1 голос
/ 04 декабря 2010

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

Конечно, это не следует делать в смонтированной файловой системе.

1 голос
/ 27 апреля 2015

Не совсем применимо для Ext3, но может быть полезно для пользователей других файловых систем:

  • в соответствии с https://wiki.archlinux.org/index.php/Btrfs#Defragmentation, с Btrfs это очевидно возможнодля дефрагментации метаданных каталога: btrfs filesystem defragment / будет дефрагментировать метаданные корневой папки.При этом используется онлайн-поддержка дефрагментации Btrfs.

  • , в то время как Ext4 поддерживает онлайн-дефрагментацию (с e4defrag), но это не относится к метаданным каталога(согласно http://sourceforge.net/p/e2fsprogs/bugs/326/).

Я не пробовал ни одно из этих решений.

0 голосов
/ 29 ноября 2010

Я не знаю, как вернуть свободное место из каталога.

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

Если вам отчаянно нужна возможность сжать каталог, вот вам (уродливый) взлом, который может сработать.

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

[Отредактировано, чтобы добавить: Оказывается, это не работает. Как указывает Бада в комментариях, вы не можете атомарно изменить символическую ссылку так, как я предлагал. Это оставляет меня с моей первоначальной точки зрения. Файловые системы, с которыми я знаком, не предоставляют механизма для восстановления свободного пространства внутри блоков каталогов.]

...