Как удалить файлы после ошибки EXT4-fs: дыра в каталоге найдена

У меня есть определенный каталог, где я не могу удалить файлы или каталог. Каталог находится в файловой системе ext4, использующей RAID5 на трех дисках в QNAP NAS.

С помощью rm -f дает мне:

rm: unable to stat `file.jpg': Input/output error

А также показывает следующее на dmesg:

EXT4-fs error (device dm-0): dx_probe:933: inode #55050534: block 3591: comm rm: Directory hole found

Поскольку "ошибка ввода / вывода" обычно означает аппаратное обеспечение, я провел несколько тестов, например, то, что я предполагаю, является версией QNAP fsck, badblocks, а также быстрые и длительные тесты SMART на отдельных дисках, плюс рейдовая очистка все равно периодически запускается - и все возвращаются без ошибок.

В папке много файлов, так как это черная дыра для тысяч файлов, добавляемых ежедневно / ежечасно (не в состоянии считать их как ls | wc страдает от ошибок "Ошибка ввода / вывода" и "Ошибка дыры в каталоге") - поэтому, основываясь на аналогичном сообщении о черной дыре) Я предполагаю, что я уничтожил каталог, а не оборудование.

К сожалению, версия find на QNAP не поддерживает -exec аргумент, и поэтому я не могу попробовать то, что было предложено в этом посте.

Вопросы:

  1. Что именно является "дырой в каталоге",
  2. Как я могу удалить каталог и файлы внутри отверстия каталога.

2 ответа

На самом деле дыры в каталогах являются функцией ext4 с 2013 года, но ядро ​​Linux не было исправлено для ее поддержки до конца 2019 года. Однако дыры в каталогах могут образовываться только в результате запуска fsck, поэтому это может быть косвенно вызвано ошибками данных, которые заставил вас запустить fsck.

Следующая опция fsck должна удалить все дыры в каталогах:

      fsck.ext4 -Df dm-0

Обязательно запускайте в несмонтированной файловой системе (также будет работать и в смонтированной файловой системе только для чтения, но существует небольшой риск того, что любой, читающий файлы во время работы fsck, получит мусор).

Имейте в виду, что это займет как минимум столько же времени, сколько и полная fsck (например,fsck.ext4 -f dm-0), и в течение этого периода файловая система не будет доступна для использования.

Запустите команду ниже в этом каталоге. По сути, это замена -exec rm {}. Он создаст список файлов внутри dir и создаст несколько команд rm с ограничением аргументов за один запуск, равным 10

find ./ -type f|xargs -n 10 rm

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

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