Verifique com lsof
para ver se existem arquivos abertos. O espaço não será liberado até que eles sejam fechados.
sudo /usr/sbin/lsof | grep deleted
informará quais arquivos excluídos ainda estão em aberto.
Existe uma maneira de dizer ao kernel para devolver o espaço livre agora? Como escrever para algo em / proc /? Usando o Ubuntu 11.10 com ext4.
Este é provavelmente um tema antigo e muito repetido. Depois de bater 0 espaço só percebi quando o meu editor não pôde salvar os arquivos de código-fonte que tenho aberto, que para o meu horror agora tem tamanho de 0 byte na lista de pastas, eu fui em uma onda de exclusão.
Eu deletei 100 MB de arquivos grandes tanto do usuário quanto do root, e fiz alguns hardlinking também.
Pouco antes de eu ter apt-get clean
, havia mais de 900 MB em / var / cache / apt / archives, agora há apenas 108 KB:
# du
108 /var/cache/apt/archives
Uma hora mais tarde ainda sem espaço livre e não é possível salvar meus arquivos preciosos abertos no editor, mas observe a disparidade abaixo:
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
Alguma sugestão? Eu desliguei alguns serviços / processos, mas não tenho certeza de como verificar quem está comendo ativamente o espaço em disco.
Mais informações
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
Use lsof
para encontrar o espaço deletado, mas aberto, que ainda consome espaço:
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Encontre a entrada em /proc/<pid>/fd/
que cooresponds para o filehandle:
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Agora, apenas cat /dev/null
no fd:
cat /dev/null > /proc/3446/fd/128
Note que o inode ainda está aberto, mas agora é 0 length
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
df
não mostrará o espaço reservado para root
(mesmo quando executado como root
):
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
Reduza o espaço reservado para 4%
# tune2fs -m4 /dev/sda4
df -h
agora mostrou 45 milhões gratuitos.
Coloque de volta para 5%
# tune2fs -m5 /dev/sda4
No Ubuntu, se você apagou arquivos usando sua lixeira, é mais do que provável que seus arquivos não sejam completamente removidos.
Mesmo depois de esvaziar a lixeira, seus arquivos permanecerão em ~/.local/share/Trash/expunged
até depois da reinicialização e talvez até mais.
Não encontrei um bom motivo para isso, mas se ficar sem espaço, sempre manualmente rm
os arquivos da lixeira expurgados.
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\/fd\//' | while read file; do sudo bash -c ": > /proc/$file"; done
Explicação:
Grep lsof
output para extrair apenas os arquivos excluídos. Sed extrai o ID do processo e o id do filedescriptor de cada linha e cria uma string no formato {pid}/fd/{fid}
. Enquanto loop e saída nada para cada arquivo, definindo-os para vazio.
Gostaria de saber se sync
é de alguma ajuda aqui - mas não deveria ser, como o IIRC na maioria ("muitos"?) sistemas, os sistemas de arquivos são sincronizados a cada 30 segundos.
Eu verificaria o log do kernel (assim dmesg
) para descobrir se algo estava acontecendo e execute lsof
para ver se algum arquivo grande e excluído ainda está aberto (na verdade, acho que arquivos apagados serão marcados como assim na saída lsof
).
Duas razões (uma delas apontada na pergunta que você vincula) que podem fazer com que arquivos excluídos não sejam liberados são
unlink()
edou um arquivo com mais de um link) Mas eu não sei de uma razão específica porque isso pode acontecer com tantos arquivos ...
O CentOS 6.3 também faz a coisa que não é realmente esvaziar-lixo-quando-você-vazio-lata-lixo. Não consegui encontrar uma maneira de recuperar o espaço até que executei apenas rm -rf ~/.local/share/Trash/expunged/
. Causou muito arranhão na cabeça.
Tags ext4 disk-usage ext3 proc df