Eu tenho servidores de arquivos que são usados para armazenar arquivos. Os arquivos podem residir lá por uma semana ou por um ano. Infelizmente, quando removo arquivos do servidor, o df
comando não reflete o espaço liberado. Então, eventualmente, o servidor fica cheio ( df
mostra 99%) e meu script não envia mais arquivos para lá, exceto que pode haver algumas dezenas de GB de espaço livre lá.
Eu tenho noatime
sinalizador nas partições montadas, se isso fizer alguma diferença.
A exclusão do nome do arquivo não exclui realmente o arquivo. Algum outro processo está mantendo o arquivo aberto, fazendo com que ele não seja excluído; reinicie ou mate esse processo para liberar o arquivo.
Usar
para descobrir qual processo está usando um arquivo excluído (desvinculado).
como Ignacio menciona, excluir o arquivo não liberará espaço até que você exclua os processos que têm alças abertas nesse arquivo.
No entanto, você pode recuperar o espaço sem matar os processos. Tudo que você precisa fazer é remover os descritores de arquivo.
Primeiro execute lsof | grep excluído para identificar o processo que contém o arquivo
Em seguida, execute:
então
O "1" será o descritor do arquivo. Agora digite "> FD" para recuperar esse espaço
Pode ser necessário repetir a operação se houver outros processos mantendo o arquivo.
Se a partição tiver sido configurada para reservar determinada parte do espaço em disco apenas para uso raiz,
df
não incluirá esse espaço como disponível.Mesmo depois que o espaço for recuperado pela exclusão de arquivos/diretórios, o usuário não root não poderá gravar em uma partição específica.
Você pode verificar facilmente se esse é o seu caso tentando criar um arquivo em um dispositivo como usuário root e não root.
Além disso, você pode verificar a configuração do sistema de arquivos executando
e calculando a % real por conta própria.
Para alterar a % do disco reservada para uso somente root, execute
Uma possibilidade é que os arquivos que você excluiu tenham mais referências no sistema de arquivos. Se você criou hardlinks, vários nomes de arquivos apontarão para os mesmos dados, e os dados (o conteúdo real) não serão marcados como livres/utilizáveis até que todas as referências a eles sejam removidas. Antes de excluir arquivos, stat-los (Entry nomeado Links) ou ls -l neles (deve ser a segunda coluna).
Se os arquivos forem referenciados em outro lugar, acho que você terá que ls -i o(s) arquivo(s) para encontrar o número do inode e, em seguida, fazer uma busca com -inum <inode-number> para encontrar o outras referências a esse arquivo (você provavelmente também deseja usar -mount para permanecer no mesmo sistema de arquivos).
O arquivo ainda está bloqueado pelo processo de abri-lo. Para liberar espaço, siga estas etapas:
Execute
sudo lsof | grep deleted
e veja qual processo está segurando o arquivo. Exemplo de resultado:Mate o processo usando
sudo kill -9 {PID}
. Na amostra acima, o PID é 1623.Corra
df
para verificar se o espaço já está liberado. Se ainda estiver cheio, talvez seja necessário aguardar alguns segundos e verificar novamente.Como eu sei que muitos de vocês estão fazendo isso para redhat
/var
e gzipping arquivos esperando que o FS diminua, mas em vez disso ele cresce, apenas certifique-se de reiniciar o syslog do serviço. emostraria isso de qualquer maneira.
Uma razão para a falta de espaço em disco (um cenário que acabei de encontrar porque obviamente não fiz como normalmente faço ao criar uma nova matriz) é isso ...
Normalmente eu libero todo o espaço disponível em disco, também os 5% reservados para root (tune2fs -m0), já que é um sistema de servidor de arquivos de usuário único. No entanto, de repente fiquei preso com 0 bytes livres de acordo com df, mas a diferença entre o espaço total e o usado disse outra coisa.
Como eu tinha certeza de ter liberado aqueles 5% reservados como padrão pelo menos no Fedora (e ter algumas pastas vazias em vez de ter os arquivos que eu tinha acabado de copiar... ou pensei que tinha), comecei a suar e procurar desesperadamente por uma maneira de corrigir esse problema, reinicializando, tentando "lsof" e esse tipo de coisa.
Então, finalmente, decidi executar tune2fs -m0 no sistema de arquivos, embora tivesse certeza de que não era a causa - mas era! Um pouco mais de 400G ficou disponível como deveria ser. Sim, eu sei... meu erro, mas mesmo assim meu comentário pode ser útil para outras pessoas que esquecem esse espaço reservado ou acreditam fortemente que o liberaram. c",)
As outras respostas estão corretas: se você excluir um arquivo e o espaço não for liberado, geralmente é porque o arquivo ainda está aberto ou há outros links físicos para ele.
Para ajudar na solução de problemas, use uma ferramenta que informa onde o espaço em disco está sendo gasto: Você pode usar
du
para obter uma visão geral de onde o espaço está indo. Melhor ainda, use uma ferramenta gráfica como o xdiskusage (existem muitos como este) para caçar o culpado. O xdiskusage e seus amigos permitem que você se aprofunde nos maiores porcos do espaço para descobrir para onde o espaço está indo.Dessa forma, você encontrará rapidamente arquivos que ainda ocupam espaço por causa de um segundo hardlink. Ele também mostrará o espaço ocupado por arquivos excluídos, mas abertos (como (permissão negada), acredito, pois não pode ler o nome do arquivo).
Mais uma opção: o disco pode estar cheio devido a um processo que cria dados continuamente: logs, núcleos e similares. É possível que o espaço esteja realmente sendo liberado, mas imediatamente preenchido. Na verdade, eu já vi um caso assim.
df
neste caso simplesmente não dá a imagem do buraco. Usedu
para saber mais.Estou usando EXT2, o FSCK me ajudou nessa situação. Tente shudown -F agora , depois de algumas reinicializações e fscks, vejo metade do espaço usado.