sudo rm -rf retorna “não é possível remover o diretório” no diretório vazio de propriedade do root

8

Eu tenho um diretório no meu sistema Debian. O diretório é:

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: -

O diretório está vazio:

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 ..

Mas meu sistema não pensa assim:

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

Não sei por que isso aconteceria nem consigo encontrar uma maneira de seguir em frente. Alguém pode fornecer assistência?

Nenhuma das perguntas anteriores que eu consegui localizar resolveu esse problema específico. Mas, para abordar algumas das perguntas que eu já vi em posts semelhantes:

a.) A pasta foi criada por um processo em execução, que criou muitas pastas antes e essas pastas foram removidas várias vezes antes. Este específico está preso no limbo.

b.) Não deve haver nada escrito neste diretório agora. Eu verifiquei muitas vezes e a ls -alsaída sempre não retorna nada.

c.) Verifiquei lsof e não há nada aberto para este diretório:

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

d.) rmnão tem alias para mais nada. É bem parecido com o Debian ... nada de especial feito com nenhum dos principais programas do Bash, como rmetc.

e.) Renomear é permitido, mas ainda não é possível excluir:

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 ..

** Observe, a partir de agora referido como "delete_me" desde que eu o renomeei e vou apenas seguir o fluxo.

f.) Este é o único diretório retornado quando eu o executo find.

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

g.) lsattr não mostra nada:

root@debian:/3/20150626# lsattr
---------------- ./delete_me
Harperville
fonte
1
É possível renomear o diretório?
21715 Jenny D
2
A parte "Links: 3" salta para mim; parece que você pode ter um subdiretório. O que "encontrar 00" retorna?
Jeff Schaller
Atualizado minha pergunta com uma resposta ao seu, @JennyD
harperville
1
Você verificou lsattrse existem atributos especiais atribuídos a ele?
Caja
2
Parece-me cada vez mais provável que esse processo em execução do item (a) esteja mantendo um subdiretório "delete_me" de alguma forma. Você pode interromper esse processo em execução e verificar novamente a statsaída (e / ou tentar novamente o rmdir)?
Jeff Schaller

Respostas:

1

Encontrei a resposta. Algo estava errado com a ligação, como sugeriu @JeffSchaller. A solução é executar xfs_check para verificar se os links estão incorretos e, em seguida, xfs_repair para corrigi-los.

  1. execute mountpara visualizar o nome do dispositivo. O meu é/dev/mapper/vg3-lv3
  2. umount /3
  3. xfs_check /dev/mapper/vg3-lv3 que retornou o seguinte:

    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 que indicava que os links foram corrigidos:

    resetting inode 4392587948 nlinks from 3 to 2

    resetting inode 12983188890 nlinks from 1 to 2

Acontece que eu tinha outro inode que estava vinculado incorretamente.

Obrigado por toda a ajuda, mas usando a magia negra do xfs_repair, meu problema está resolvido.

Harperville
fonte
-1

Você tentou verificar se os atributos da pasta / diretório possuem o atributo " i " - imutável está ativo! Verifique com o comando lsattr para verificar se a pasta / diretório tem o atributo " i " ativado se você desativá-lo com "*

chattr -i ' pasta '

* "Com isso, você pode executar a tarefa que deseja.

Joke Sr. OK
fonte
1
O -iatributo em um arquivo / pasta não impede que ele apareça, no entanto, onde você vê que -iestá definido? A saída do OP está indicando o oposto
kos 07/07