Você tem alguns registros fora de controle. Em vez de deletar todos os dias, encontre arquivos ou arquivos em rápido crescimento, e olhe para investigar o que pode estar causando isso. Talvez algum programa esteja girando em um loop registrando alguma condição. Desabilite esse programa, desabilite seu registro ou tente consertar a condição de que está reclamando.
Se um arquivo está crescendo diante de seus olhos, e você não tem idéia de qual programa está escrevendo, você pode descobrir isso facilmente. Aqui está um exemplo. Quem tem /var/log/syslog
aberto? Nós usamos o comando fuser
:
# fuser /var/log/syslog
/var/log/syslog: 602
Apenas um processo tem /var/log/syslog
aberto. É o processo 602. O que é isso? Não nos preocupemos com ps
e grep
, mas olhe diretamente para o sistema de arquivos /proc
:
# ls -l /proc/602/exe
lrwxrwxrwx 1 root root 0 Mar 29 17:45 /proc/602/exe -> /usr/sbin/rsyslogd
Aha, é rsyslogd
. Não estamos surpresos que rsyslogd
tenha /var/log/syslog/
open.
Não é garantido que este método funcione. A razão é que os programas não precisam manter arquivos abertos para escrever para eles. Suponha que você tenha um processo que abra um arquivo, anexe-o e feche-o. Você terá uma investigação um pouco mais difícil. Você pode executar fuser
muitas vezes até que, por acaso, você perceba o processo "em flagrante". Esse processo em si pode entrar e sair da existência rapidamente. Outro problema é que vários processos podem ter o arquivo aberto, mas apenas um está aumentando. Nesse caso, você pode rastrear suas chamadas de sistema.
# fuser /var/log/huge-annoying-file
/var/log/huge-annoying-file: 1234 23459
Oops! Dois processos estão abertos: 1234 e 23459. Vamos ver o que eles estão fazendo:
# strace -p 1234
Process 1234 attached - interrupt to quit
select(1, NULL, NULL, NULL, {9, 922666}
Não está fazendo nada, apenas bloqueando uma chamada select
. Ctrl-C para quebrar o traço:
select(1, NULL, NULL, NULL, {9, 922666}^C <unfinished ...>
Verifique o próximo:
# strace -p 23459
write(5, "Useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
write(5, "More useless garbage ..."..., 512) = 512
^C
Opa, esse está escrevendo constantemente. Deve ser o mal. Podemos até verificar que o descritor de arquivo 5 para o qual o processo está gravando é, na verdade, o arquivo grande:
# ls -l /proc/23459/fd/5
lr-x------ 1 root root 64 Apr 3 23:39 /proc/23459/fd/5 -> /var/log/huge-annoying-file
Eu não suspeito que você tenha um sistema de arquivos corrompido, mas para forçar uma checagem completa, você não precisa inicializar um DVD.
Primeiramente, revise a configuração de contagem máxima de montagens do seu sistema de arquivos. Identifique sua partição usando o comando df. Exemplo em um sistema Ubuntu eu tenho aqui:
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 18062108 5499320 11645284 33% /
udev 392152 4 392148 1% /dev
tmpfs 159768 768 159000 1% /run
none 5120 0 5120 0% /run/lock
none 399416 200 399216 1% /run/shm
/dev/sr0 43668 43668 0 100% /media/VBOXADDITIONS_4.1.4_74291
Você pode ver que o sistema de arquivos /
está montado em /dev/sda1
. Então /dev/sda1
é o dispositivo de armazenamento da partição raiz (e a única partição neste sistema em particular).
Vamos dar uma olhada em alguns atributos desse sistema de arquivos. Isso é seguro, apesar de estar montado. O comando lança muita saída. Aqui está um trecho:
$ dumpe2fs /dev/sda1
dumpe2fs 1.42 (29-Nov-2011)
Filesystem volume name: <none>
Last mounted on: /
[ ... SNIP ... ]
Last mount time: Fri Mar 29 17:45:18 2013
Last write time: Tue Mar 5 09:08:03 2013
Mount count: 22
Maximum mount count: 22
[ ... SNIP ... ]
Hey, a contagem de montagens é igual à contagem máxima de montagens. Da próxima vez que eu reiniciar, haverá uma verificação do sistema de arquivos. O importante é que a contagem de montagens seja um valor positivo. Se o seu é zero, mude para algum valor positivo como 22 usando tune2fs -c 22 /dev/whatever
. Zero significa que uma verificação nunca é forçada, independentemente de quantas vezes a partição é montada. Sistemas raramente reinicializados devem ter valores baixos aqui. Um servidor que desce uma vez por ano provavelmente usaria um fsck toda vez que for reinicializado. Você também pode definir intervalos de verificação baseados em data.
Agora, para forçar uma verificação, você pode substituir a contagem atual para que seja maior ou igual ao máximo e, em seguida, reinicialize. Isso é feito com capital C
: tune2fs -C 1234 /dev/whatever
. Agora a partição parece ter sido montada 1234 vezes sem uma verificação, que é maior que o máximo de um ou dois dígitos.