Atualizando o tamanho sem disco sem reiniciar o host

23

Eu uso RHEL4 com LVM2 nele. Às vezes, mesmo após a remoção de arquivos grandes com mais de um GB, o tamanho da partição não é atualizado ao usar o dfcomando

-bash-3.00$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/sys-root  3.9G  1.4G  2.3G  39% /
/dev/cciss/c0d0p1     251M   19M  219M   8% /boot
/dev/mapper/sys-home  250G  125G  113G  53% /home
/dev/mapper/sys-tmp   3.9G   41M  3.7G   2% /tmp
/dev/mapper/sys-var   3.9G  3.6G   98M  98% /var

Mas quando eu verifico usando du, ele mostra o tamanho adequado

-bash-3.00$ sudo du -sh /var/
 179M   /var/

você pode ver lá que a saída df mostra que a partição / var deve ser usada em 3,6 Gb, mas o du mostra que são apenas 179 Mb.

Agora, o problema é que nem o sync nem o partprobe não estão atualizando as informações. Mas certamente a reinicialização do host resolverá o problema. Mas como este é um servidor de produção, não consigo reiniciá-lo. Existe alguma maneira de atualizar as informações do disco manualmente sem reiniciar o host?

Kannan Mohan
fonte
1
Você provavelmente tem arquivos excluídos abertos (ou seja, processos que estão mantendo arquivos excluídos). Tente algo como lsofdescobrir. Used / avail não está armazenado na tabela de partições, o partprobe (ou qualquer tipo de releitura de partição) não ajuda em nada.
Mat

Respostas:

28

Quando um arquivo é removido / excluído / desvinculado, se ele ainda é mantido aberto por qualquer processo, apenas a entrada de diretório do arquivo é apagada, e não os dados do arquivo. Quando o arquivo é completamente fechado por todos os processos, os dados são retornados ao pool de espaço livre. É um recurso, pois você pode ter arquivos anônimos dessa maneira.

Para verificar se você possui algum arquivo excluído aberto em um sistema de arquivos, execute um destes comandos, onde /mount/pointestá o ponto de montagem ( /varno seu caso):

lsof +L1 /mount/point

Este artigo sobre arquivos abertos e desvinculados deve ajudar a explicar isso um pouco mais.

Nuno Pereira
fonte
2
Eu estava excluindo logs, mas dfnão mostrava espaço livre até reiniciar os processos do servidor. Obrigado!
FET
Melhor chamar lsof com 'lsof + L1', que mostra os arquivos excluídos. Fez uma sugestão de edição
Nuno Pereira
Então, como fechá-los?
faressoft 18/10/19