
Existe uma maneira de dizer ao kernel para devolver o espaço livre em disco agora? Como escrever algo em /proc/ ? Usando Ubuntu 11.10 com ext4.
Este é provavelmente umvelhoe tema muito repetido. Depois de atingir 0 espaço, notei apenas que meu editor não conseguiu salvar os arquivos de código-fonte que abri, que para meu horror agora têm tamanho de 0 byte na listagem de pastas, comecei uma farra de exclusão.
Excluí centenas de MB de arquivos grandes, tanto do usuário quanto do root, e fiz alguns links físicos também.
Pouco antes de mim 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 depois ainda não há espaço livre e não consigo salvar meus preciosos arquivos 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? Desliguei alguns serviços/processos, mas não sei como verificar quem pode estar consumindo ativamente 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
Responder1
Verifique com lsof
para ver se há arquivos mantidos abertos. O espaço não será liberado até que sejam fechados.
sudo /usr/sbin/lsof | grep deleted
informará quais arquivos excluídos ainda estão abertos.
Responder2
Use lsof
para localizar o arquivo excluído, 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 /proc/<pid>/fd/
que corresponde ao identificador de arquivo:
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
Observe que o inode ainda está aberto, mas agora tem comprimento 0
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Responder3
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
...
Como alterar a “porcentagem de bloqueio reservado”
Reduza o espaço reservado para 4%
# tune2fs -m4 /dev/sda4
df -h
agora mostrou 45M grátis.
- Salvei meus arquivos rapidamente
Coloque de volta para 5%
# tune2fs -m5 /dev/sda4
Responder4
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done
Explicação: Saída
do Grep lsof
para extrair apenas arquivos excluídos. Sed extraia o ID do processo e o ID do descritor de arquivo de cada linha e crie uma string no formato {pid}/fd/{fid}
. Enquanto faz um loop e não gera nada para cada arquivo, configurando-os como vazios.