Linux sem espaço em disco? Verifique seus logs!

Principais Considerações

  • Os arquivos de registro do sistema Linux podem consumir uma quantidade considerável de espaço em disco.
  • O sistema geralmente compacta logs mais antigos para otimizar o uso do espaço em disco.
  • Para analisar logs e identificar processos com problemas, utilize o comando journalctl ou tail -f.

Apesar da reputação de eficiência dos sistemas Linux, é possível que você se depare com a falta de espaço em disco. O que pode ter causado isso? A resposta mais provável, e o principal culpado, reside nos registros do sistema Linux.

Por que os Logs Consomem Tanto Espaço em Disco?

Os logs desempenham um papel crucial na administração do seu sistema Linux. Eles permitem monitorar a atividade da sua máquina e solucionar eventuais problemas. Os daemons de registro do Linux operam de forma semelhante ao Visualizador de Eventos do Windows. Normalmente, os logs não ocupam muito espaço, pois a maioria das distribuições gerencia automaticamente o espaço que eles utilizam no disco.

Tradicionalmente, os logs do Linux eram arquivos de texto simples. No entanto, com a migração de muitas distribuições importantes para o systemd, eles se tornaram arquivos binários gerenciados pelo journald, um serviço do systemd. Alternativamente, sua distribuição pode usar o rsyslog ou o syslog-ng.

Como os logs mais antigos perdem relevância e arquivos grandes podem consumir espaço, o sistema geralmente realiza a “rotação” dos logs, arquivando-os, compactando-os e, por fim, excluindo-os, para liberar espaço em disco para arquivos mais importantes.

Embora os logs não devam ocupar muito espaço, um processo com falhas pode sobrecarregar os logs mais rapidamente do que o sistema consegue rotacioná-los.

Se você perceber uma súbita falta de espaço em disco sem ter baixado arquivos grandes recentemente, o problema pode ser o excesso de logs do sistema Linux. Será necessário identificar o que está sobrecarregando os logs e corrigir a situação.

Você pode verificar o espaço em disco utilizado com o comando du -h:

du -h /var/log

Uma lista de cada subdiretório e o espaço total que ele ocupa será exibida:

Localizando seus Registros

Se você usa uma distribuição Linux moderna com systemd, utilize o programa journalctl para visualizar seus logs. O journald costuma armazenar logs nos diretórios /var/log/journal ou /run/log/journal, dependendo da distribuição.

Para visualizar os logs, digite o comando journalctl no prompt do shell. Existem outras opções úteis de linha de comando. Para visualizar as mensagens de inicialização, utilize a opção -b:

journalctl -b

Você pode acompanhar as mensagens de log do sistema em tempo real com a opção -f.

Se sua distribuição não usa o systemd, os logs estarão localizados no diretório /var/log. Mesmo com o systemd, alguns programas ainda armazenam seus logs neste diretório. São arquivos de texto comuns que podem ser visualizados com utilitários como o less.

Por exemplo, para ler o log do sistema:

less /var/log/syslog

O conteúdo completo do arquivo de log, que pode conter milhares de linhas, será exibido:

Você também pode monitorá-lo em tempo real com a opção -f do comando tail:

tail -f /var/log/syslog

Como o Linux Realiza a Rotação de Arquivos de Log

No diretório /var/log, você poderá observar arquivos com nomes terminados em “log.N.gz”, onde N é um número. Isso é o resultado da rotação de logs mais antigos realizada pelo sistema. A maioria das distribuições possui um utilitário que automatiza esse processo, chamado “logrotate”. O logrotate é configurado para ser executado como um cron job ou um timer do systemd.

Por padrão, a maioria das distribuições executa o logrotate diariamente. O logrotate compacta logs mais antigos utilizando o gzip, como indicam as extensões de arquivo “.gz”. Ele usa um limite, como idade ou tamanho do arquivo, para realizar essa compressão e outro limite para excluir arquivos de log mais antigos.

As opções padrão do logrotate são suficientes para a maioria dos usuários de desktop. É possível ajustar o comportamento do logrotate editando o arquivo /etc/logrotate.conf como superusuário, assim como os arquivos cron ou systemd timer do seu sistema. No entanto, essas operações são relevantes principalmente para administradores de servidor.

É mais indicado solucionar a causa do preenchimento dos logs do que ajustar os arquivos de configuração para economizar espaço em disco. Se for absolutamente necessário alterar a configuração, você pode consultar a página de manual do logrotate.

Quais Registros Podem Ser Excluídos com Segurança?

Se todas as outras opções falharem e você precisar desesperadamente liberar espaço em disco, você pode excluir manualmente os arquivos de log arquivados que terminam em “.gz” antes que o logrotate os remova. Você pode utilizar o comando rm, mas será necessário executá-lo como superusuário, pois esses arquivos pertencem ao sistema:

sudo rm /var/syslog/syslog.*gz

Este comando irá remover todos os arquivos que contêm “syslog” e terminam com “gz”.

Tenha sempre extremo cuidado ao executar comandos com sudo, especialmente comandos destrutivos como rm!

Em geral, você não deve excluir arquivos nos diretórios do sistema sem entender totalmente as implicações. No entanto, os logs arquivados não devem causar problemas se forem removidos. Em caso de problemas, você pode precisar consultar registros mais antigos.

Como Corrigir o Que Está Preenchendo Seus Registros

A melhor maneira de descobrir o que está sobrecarregando seus logs é monitorá-los com as opções journalctl ou tail -f. A ocorrência de mensagens de erro repetidas é um forte indicativo.

Você precisará lidar com o processo problemático para economizar espaço em disco. Se não souber a causa do erro, você pode pesquisar na web ou procurar ajuda nos canais de suporte da sua distribuição. Após corrigir o problema, você poderá excluir os logs mais antigos com segurança. Você deverá ter muito mais espaço em disco agora.