Огромный каталог, не файлы внутри, а сам каталог
Я пытался удалить каталог с сервера 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, обрабатывают каталоги по существу как связанные списки неподвижных узлов с пространством для имени файла + номера индекса, когда файл не связан, пространство для имени освобождается (и должно объединяться со свободными соседними записями, если таковые имеются). Таким образом, такой гигантский каталог с несколькими файлами может быть создан, но это не легко. Возможно, создавая миллионы жестких ссылок на одни и те же файлы? Создание / удаление миллионов ссылок с тщательно созданными именами? Что бы ни случилось, чтобы создать это заслуживает расследования; это шутка, какая-то неисправность файловой системы, ...?