Уменьшить / сбросить размер каталога?


11

Есть ли способ уменьшить запись каталога?

Мои директории dovecot maildir увеличились в размерах с 4096 по умолчанию до нескольких мегабайт, и это портит дисковые квоты.

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

Изменить: Для потомков, чтобы найти директивы> 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

Ответы:


6

Смотрите также rm о каталоге с миллионами файлов ; касательно, но мы обсуждаем это там.

Насколько я знаю, по крайней мере в ext2 / 3 нет, нет (онлайн) способа уменьшить их до удаления + повторного создания. Несмонтированный, некоторые источники предполагают, что e2fsck -Dможет работать, хотя я не могу требовать никакого личного опыта с этой опцией.

Некоторые ссылки для дальнейшего чтения:


1
Первая ссылка была особенно полезна: она касалась моей проблемы именно (почтовые серверы), и тот факт, что Тед Тсо взвешивал диалоги, довольно крутой;)
mikewaters

3

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

Поскольку нам требовалось время простоя для выполнения этой операции во время нашего окна обслуживания, для нас было важно сделать доступным перестроенный каталог как можно скорее. Если для вас важнее простота, измените первую команду перемещения на «rm -rf» в исходном каталоге и пропустите другую команду «rm -rf».

Я извлек эти команды из более крупного процесса и абстрагировал имена каталогов, поэтому извиняюсь за ошибку в этом переводе.

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

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

rm -rf /tmp/deleteme/

2

Я бы сделал это так

cp -aloldir NEWDIR && mvolddir tempname && mvNEWDIR olddir && rm -rtempname

где olddir - это каталог, который вы хотите сжать. newdir, а tempname - временные имена файлов.

cp -alсоздает ссылки на содержимое olddir в newdir, а следующие три команды меняют их на newdir и очищают.


скользкий. никогда не знал о cp -l
Кевин
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.