Зменшити / скинути розмір каталогу?


11

Чи є спосіб зменшити запис каталогу?

Мої каталоги maveld dovecot збільшилися в розмірі з 4096 за замовчуванням до кількох мегів, і це возиться з дисковими квотами.

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

Редагувати: для нащадків знайти батьків> 4096:

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

Також дивіться stackoverflow.com/questions/4303008/…
oliver

Відповіді:


6

Дивіться також rm у каталозі з мільйонами файлів ; тангенціально пов'язані, але ми це обговорюємо там.

Наскільки я знаю, щонайменше, на ext2 / 3, немає, немає в Інтернеті способу зменшити їх до видалення + відтворення. Демонтовані декілька джерел e2fsck -Dможуть сказати, що це може спрацювати, хоча я не можу претендувати на відсутність особистого досвіду з цим варіантом.

Деякі посилання для подальшого читання:


1
Перше посилання було особливо корисним: воно спеціально
вирішило

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.