Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

Недавно мне пришлось удалить и воссоздать каталог 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/

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

cp -alOldirnewdir&& mvOlddirвременное имя&& mvnewdirOlddir&& rm -rвременное имя

где Olddir это каталог, который вы хотите сжать newdir и временное имя временные имена файлов

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