sudo rm -rf возвращает «не удается удалить каталог» в пустом каталоге, принадлежащем пользователю root

8

У меня есть каталог в моей системе Debian. Каталог:

root@debian:/3/20150626# stat 00
File: `00'
Size: 6             Blocks: 0          IO Block: 4096   directory
Device: fe00h/65024d    Inode: 4392587948  Links: 3
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-06-25 20:00:00.086150791 -0400
Modify: 2015-07-07 12:39:04.174903234 -0400
Change: 2015-07-07 12:39:04.174903234 -0400
Birth: -

Каталог пуст:

root@debian:/3/20150626# ls -al 00
total 0
drwxr-xr-x 3 root root  6 Jul  7 12:39 .
drwxr-xr-x 3 root root 23 Jul  7 12:56 ..

Но моя система так не считает:

root@debian:/3/20150626# rm -rf 00
rm: cannot remove `00': Directory not empty

Я не знаю, почему это произойдет, и я не могу найти способ двигаться вперед. Кто-нибудь может оказать помощь?

Ни один из предыдущих вопросов, которые я мог найти, не решил эту конкретную проблему. Но, чтобы ответить на некоторые из вопросов, которые я видел, задаваемые на аналогичных постах:

a.) Папка была создана запущенным процессом, который создал много папок ранее, и эти папки были удалены много раз прежде. Этот конкретный застрял в подвешенном состоянии.

б.) В этот каталог не должно быть ничего записано. Я проверял много раз и ls -alвывод всегда ничего не возвращает.

c.) Я проверил lsof, и для этого каталога ничего не открылось:

root@debian:/3/20150626# lsof 00
root@debian:/3/20150626# 

г) rmне псевдоним ни к чему другому. Он довольно близок к стандартному Debian ... ничего особенного не было сделано ни с одной из основных программ Bash, таких как rmи т. Д.

e.) Переименование разрешено, но все еще невозможно удалить:

root@debian:/3/20150626# mv 00 delete_me
root@debian:/3/20150626# ls -al
total 0
drwxr-xr-x 3 root root  30 Jul  7 13:45 .
drwxr-xr-x 7 root root 105 Jul  7 12:57 ..
drwxr-xr-x 3 root root   6 Jul  7 12:39 delete_me
root@debian:/3/20150626# rm -rf delete_me
rm: cannot remove `delete_me': Directory not empty
root@debian:/3/20150626# ls -al delete_me/
total 0
drwxr-xr-x 3 root root  6 Jul  7 12:39 .
drwxr-xr-x 3 root root 30 Jul  7 13:45 ..

** Обратите внимание, здесь и далее упоминается как "delete_me", так как я переименовал его, и я просто собираюсь идти по течению.

е.) Это единственный каталог, который возвращается при запуске findна нем.

root@debian:/3/20150626# find / -type d -name delete_me
/3/20150626/delete_me
root@debian:/3/20150626# find delete_me
delete_me

ж.) lsattr ничего не показывает:

root@debian:/3/20150626# lsattr
---------------- ./delete_me
harperville
источник
1
Можно ли переименовать каталог?
Дженни Д
2
Часть «Ссылки: 3» выскакивает передо мной; кажется, что у вас может быть подкаталог. Что возвращает «find 00»?
Джефф Шаллер
Обновил мой вопрос ответом на ваш, @JennyD
harperville
1
Вы проверили lsattr, есть ли какие-либо специальные атрибуты, назначенные ему?
Каха
2
Мне кажется все более вероятным, что этот запущенный процесс из элемента (a) каким-то образом удерживается в подкаталоге «delete_me». Можете ли вы остановить этот запущенный процесс, а затем повторно проверить statвывод (и / или повторить попытку rmdir)?
Джефф Шаллер

Ответы:

1

Нашел ответ. Что-то не так с этой связью, как предложил @JeffSchaller. Решение состоит в том, чтобы запустить xfs_check, чтобы увидеть, что ссылки были неправильными, а затем xfs_repair, чтобы исправить их.

  1. запустить, mountчтобы просмотреть имя устройства. Мой/dev/mapper/vg3-lv3
  2. umount /3
  3. xfs_check /dev/mapper/vg3-lv3 который вернул следующее:

    link count mismatch for inode 4392587948 (name ?), nlink 3, counted 2

    link count mismatch for inode 12983188890 (name ?), nlink 1, counted 2

  4. xfs_repair /dev/mapper/vg3-lv3 который указал, что ссылки были исправлены:

    resetting inode 4392587948 nlinks from 3 to 2

    resetting inode 12983188890 nlinks from 1 to 2

Оказывается, у меня был другой индекс, который был неправильно связан.

Спасибо за помощь, но с помощью черной магии xfs_repair моя проблема решена.

harperville
источник
-1

Вы пытались проверить, что атрибуты папки / каталога имеют атрибут " i " - imutable is active! Проверьте с помощью команды lsattr, что папка / каталог имеет атрибут « i », если вы выключите его с помощью «*

chattr -i ' папка '

* «С этим вы можете выполнить задачу, которую вы хотите.

Шутка старший ок
источник
1
-iАтрибут файла / папки , не мешает ему показывать вверх, однако , где вы видите , что -iэто множество? На выходе ОП говорится об обратном
Кос