Огромный каталог, не файлы внутри, а сам каталог

Огромный каталог, не файлы внутри, а сам каталог

Я пытаюсь удалить каталог с сервера Centos, используя rm -Rf /root/FFDCпоследние 15 часов, и у меня большие трудности. Я не могу сделать список каталогов, потому что это подвешивает систему (слишком много файлов?), но я вижу, что размер каталога не обычный 4096 байт, а 488 МБ!

[root@IS-11034 ~]# ls -al
total 11760008
drwxr-x--- 31 root root        4096 Aug 10 18:28 .
drwxr-xr-x 25 root root        4096 Aug 10 16:50 ..
drwxr-xr-x  2 root root   488701952 Aug 11 12:20 FFDC

Я проверил inodes, и все выглядит нормально. Я проверил top, и rmон все еще использует процессор после 15 часов на 0,7%. Тип файловой системы — ext3.

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

решение1

Даже ls -1f /root/FFDCмедленно? При -1f вывод не будет отсортирован, а сведения о файле будут пропущены.

Если ls выше работает быстро, возможно, что-то вроде find /root/FFDC | xargs rm -vfбудет быстрее? Обычный rm -rfможет делать все виды рекурсии, которые findМОЖЕТ быть в состоянии пропустить. Или нет.

Ваша файловая система смонтирована с помощьюсинхронизироватьвариант? Если это так, то производительность записи/удаления будет ужасно медленнее, чем могла бы быть сасинхронный. Если вы сомневаетесь, вы можете попробовать mount -o remount,async /(или mount -o remount,async /rootесли это отдельная файловая система для вас).

решение2

Вы рассматривали возможность размонтирования файловой системы и последующего запуска e2fsck для проверки файловой системы на наличие ошибок? Я бы попробовал это перед резервным копированием, форматированием и восстановлением.

решение3

запуск fsck в файловой системе устранит проблему. Обычно это происходит, когда каталог раньше содержал много файлов, а теперь их больше нет. Размер каталога указан как огромное число, и производительность страдает.

решение4

Я не уверен, fsck(8)что это реорганизует каталоги, вы можете попробовать флаг -D(как описано в e2fsck(8)). Если это не так, и если в этом каталоге действительно нет миллионов файлов, возможно, что-то вроде следующего даст каталог разумного размера:

cd /root mv FFDC FFCD-old mkdir FFCD # Настроить права доступа для FFDC mv FFDC-old/* FFDC # Проверить/переместить все файлы/каталоги .xxx в FFDC-old rmdir FFCD-old

По крайней мере, несколько версий bash получают такие шаблоны, как .a[^.]*неправильный и include .и ..так далее, в противном случае вы можете попробовать предпоследний шаг, какmv FFDC-old/.* FFDC

Файловые системы, такие как ext3/ext4, по сути обрабатывают каталоги как связанные списки неперемещаемых узлов с пространством для имени файла + номер инода, когда файл отсоединяется, пространство для имени освобождается (и должно объединяться со свободными соседними записями, если таковые имеются). Поэтому такой гигантский каталог с несколькими файламиможетбыть создано, но это нелегко. Возможно, создание миллионов жестких ссылок на одни и те же несколько файлов? Создание/удаление миллионов ссылок с тщательно продуманными именами? Что бы ни случилось, чтобы создать это, заслуживает расследования; это розыгрыш, какой-то сбой файловой системы, ...?

Связанный контент