ext4 espaço em disco não recuperado após a exclusão de arquivos

2

Recentemente, recebi um aviso de "dispositivo cheio" para uma unidade ext4 externa de 2 Tb. Eu apaguei um monte de arquivos, cerca de 90-100 GB de backups antigos do sistema, e como eu não queria esvaziar toda a lixeira, eu apaguei as pastas da lixeira da unidade. Nenhum espaço em disco foi liberado, no entanto, e ainda estou mostrando apenas cerca de 5 Gb livres após a exclusão de 90-100Gb.

Primeiramente, tentei reinicializar para ter certeza de que os arquivos não estavam sendo abertos por algum motivo. Tentei executar sudo e2fsck -fp /dev/sde1 e sudo e2fsck -f -D -C0 -E discard /dev/sde1 , mas nenhum deles gerou espaço em disco. Eu verifiquei o uso do inode e estou usando algo como 0,3% do total. Quando eu executo sudo xdiskusage , ele diz que inodes estão usando até 93 Gb. man diz que esta é a sobrecarga usada pelo sistema de arquivos. 93 gb parece muita sobrecarga, e o fato de apagar quase a mesma quantidade de arquivos não resultou em nenhum espaço em disco liberado, eu estou supondo que eu estraguei alguma coisa quando apaguei as pastas do caminho. Existe alguma maneira que eu possa recuperar o espaço que eu pensei que iria conseguir excluir os arquivos?

    
por Richard Rath 22.04.2015 / 02:55

1 resposta

3

Parece haver duas possibilidades aqui:

  1. Você está sendo confundido pelo comportamento (reconhecidamente confuso) de df e espaço reservado para a raiz
  2. Você excluiu (desvinculou) um link para os arquivos, há mais.

Pessoalmente, suspeito que você esteja vendo o número 1. Detalhes abaixo, juntamente com algumas observações finais.

Confundindo o comportamento df

Se você preencher um sistema de arquivos completamente, como usuário não-root, será assim:

Filesystem      Size  Used Avail Use% Mounted on
/dev/md10       248M  236M  1.0K 100% /boot

mas há espaço reservado para raiz, normalmente 5%. Se o root encher, é assim que o df (no caso deste minúsculo sistema de arquivos, são outros 13 MB):

Filesystem      Size  Used Avail Use% Mounted on
/dev/md10       248M  248M     0 100% /boot

Note que passou de 100% usado para ... 100% usado. Apesar de ser mais 5% usado. O campo Used subiu conforme o esperado, mas o campo avail acabou de mudar de 1K para 0.

E o que acontece quando você remove os primeiros 13 MB de dados? Bem, você volta para a primeira saída - você liberou 5%, mas ainda está em 100% em uso e quase nenhum disponível.

Conclusão: quando você quiser ver quanto espaço está realmente liberando, veja a coluna Used - não Avail , não Use% .

Não foi o último hardlink

rm na verdade não exclui arquivos. Ele os desvincula, isto é, remove links de hardware para eles. Cada hardlink dá um nome ao arquivo, basicamente. Quando um arquivo não tem links deixados (e não está aberto, etc.) então, somente então, o arquivo é realmente deletado.

Um arquivo é realmente identificado de maneira única em um sistema de arquivos, independentemente do número de nomes que possui, pelo seu número de inode. Se você soubesse os números de inode para esses arquivos, você poderia usar find -inum para encontrar todos os hardlinks para eles, mas você provavelmente não o faria. Se você tiver alguns arquivos relacionados para limpar, poderá obter os números de inode daqueles usando stat . Você pode usar find /path/to/mount -inum NUMBER para encontrar todos os hardlinks para esse arquivo (incluindo o nome que você acabou de criar). Além disso, os números de inode podem ser reutilizados quando um arquivo é realmente excluído.

Lembre-se: os números de inode são por sistema de arquivos . Portanto, dois arquivos diferentes podem ser o inode 42 em dois sistemas de arquivos diferentes. Somente no mesmo sistema de arquivos é inode 42 garantido para sempre ser o mesmo arquivo. Além disso, os números de inodes nem sempre funcionam corretamente com sistemas de arquivos de rede ou sistemas de arquivos não-Unix. Mas você está usando ext4, onde definitivamente o faz.

Além disso, você terá que encontrar outros nomes para remover as formas normais (por exemplo, procurando por itens grandes com xdiskusage como você já está fazendo)

Observações gerais

Lixeiras são apenas diretórios. Se eles estivessem cheios de lixo eletrônico que você não conseguiu excluir, eles serão exibidos em xdiskusage .

Você deve considerar um sistema de backup que possa lidar melhor com a exclusão de backups antigos para você - fazer isso manualmente é propenso a erros. Pior, também pode ser esquecido, levando a falhas de backup - e as restaurações são geralmente de dados recentes (por exemplo, exclusão acidental, arquivo corrompido, falha de disco), não dados antigos ("ah sim, eu fiz Preciso daquela coisa que eu deletei no ano passado ... "), então" falha no backup total do disco "significa que você está realmente descartando os dados mais valiosos (o novo backup) para preservar o menos valioso data (aquele backup de dois anos atrás).

    
por 22.04.2015 / 05:02