Diga ao fs para liberar espaço dos arquivos excluídos AGORA

69

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
    
por Marcos 14.03.2012 / 11:28

7 respostas

111

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.

    
por 14.03.2012 / 12:09
36

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)
    
por 14.02.2013 / 00:24
12

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 blocos reservados"

  1. Reduza o espaço reservado para 4%

    # tune2fs -m4 /dev/sda4

df -h agora mostrou 45 milhões gratuitos.

  1. salvou meus arquivos rapidamente
  2. Coloque de volta para 5%

    # tune2fs -m5 /dev/sda4

por 14.03.2012 / 11:56
7

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.

    
por 14.03.2012 / 18:43
6
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.

    
por 30.08.2013 / 01:07
5

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

  • arquivos que não foram realmente excluídos: você excluiu um arquivo com link físico em outro lugar (mais precisamente, você unlink() edou um arquivo com mais de um link)
  • arquivos que ainda estão abertos: arquivos abertos são bookkept usando, bem, arquivos, inodes eles mesmos, não entradas de diretório, se você excluir a entrada, o inode permanecerá lá contanto que ainda esteja aberto.

Mas eu não sei de uma razão específica porque isso pode acontecer com tantos arquivos ...

    
por 14.03.2012 / 11:57
1

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.

    
por 11.03.2013 / 12:54