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

Я пытался удалить каталог с сервера 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

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

Я не знаю, куда идти, кроме резервного копирования и форматирования.

4 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам