Disco Cheio no Mastodon por Cache de Mídia: Passos para Limpeza
🔍 WiseChecker

Disco Cheio no Mastodon por Cache de Mídia: Passos para Limpeza

Se sua instância do Mastodon parou de exibir imagens, vídeos ou novas postagens, um disco cheio causado pelo cache de mídia geralmente é o culpado. O cache de mídia armazena todas as imagens, vídeos e prévias que os usuários da sua instância visualizam de outras instâncias. Ao longo de semanas ou meses, esse cache pode crescer para dezenas de gigabytes, enchendo o disco do servidor e causando falhas em serviços críticos como PostgreSQL. Este artigo explica por que o cache de mídia cresce, como limpá-lo com segurança usando as ferramentas nativas do Mastodon e o que fazer se a limpeza não liberar espaço suficiente.

Principais Conclusões: Limpeza do Cache de Mídia do Mastodon

  • RAILS_ENV=production bin/tootctl media remove: Remove mídia em cache de instâncias remotas com mais de um número específico de dias.
  • RAILS_ENV=production bin/tootctl media remove-orphans: Exclui arquivos de mídia que não são mais referenciados por nenhum status no banco de dados.
  • RAILS_ENV=production bin/tootctl media usage: Mostra o espaço total em disco usado por arquivos de mídia e cartões de prévia.

Por que o Cache de Mídia Enche o Disco em uma Instância Mastodon

O Mastodon armazena arquivos de mídia de instâncias remotas em um cache local para que os usuários da sua instância possam visualizar imagens e vídeos sem precisar buscá-los repetidamente do servidor original. Toda vez que um usuário da sua instância visualiza uma postagem de outra instância que contém uma imagem ou vídeo, o Mastodon baixa esse arquivo e o armazena em public/system ou em um bucket de armazenamento de objetos. Com o tempo, esse cache acumula arquivos raramente ou nunca visualizados novamente. O problema é agravado pela política de retenção padrão do Mastodon: o cache nunca exclui arquivos antigos automaticamente, a menos que você configure uma programação de limpeza. Um único usuário ativo pode fazer o cache crescer vários gigabytes por mês. Quando o disco atinge 100% de capacidade, os jobs em segundo plano do Mastodon falham, novas postagens param de ser processadas e a interface web retorna erros 500.

Passos para Limpar o Cache de Mídia do Mastodon com Segurança

  1. Verifique o uso atual do disco e o tamanho do cache de mídia
    Execute df -h no servidor para ver o espaço disponível. Em seguida, execute RAILS_ENV=production bin/tootctl media usage a partir do diretório de instalação do Mastodon para obter um detalhamento dos tamanhos dos arquivos de mídia. Este comando mostra o tamanho total de anexos, cartões de prévia e avatares.
  2. Remova mídia em cache com mais de 7 dias
    Execute RAILS_ENV=production bin/tootctl media remove --days=7. Isso exclui toda a mídia em cache de instâncias remotas com mais de 7 dias. Ajuste o número de dias com base no nível de atividade da sua instância. Para uma instância movimentada, 7 dias é o padrão. Para uma instância privada pequena, 30 dias pode ser aceitável. Este comando não exclui mídia anexada a postagens de seus próprios usuários.
  3. Remova arquivos de mídia órfãos
    Execute RAILS_ENV=production bin/tootctl media remove-orphans. Este comando encontra arquivos de mídia que existem no disco, mas não estão vinculados a nenhum status no banco de dados. Órfãos podem se acumular quando postagens são excluídas ou quando uploads de mídia falham no meio do processo. Esta etapa pode liberar de algumas centenas de megabytes a alguns gigabytes.
  4. Remova cartões de prévia de links excluídos
    Execute RAILS_ENV=production bin/tootctl preview_cards remove --days=7. Cartões de prévia são as prévias de links geradas quando os usuários compartilham URLs. Esses cartões incluem uma miniatura de imagem e podem consumir espaço significativo. Este comando remove cartões de prévia com mais de 7 dias.
  5. Verifique o espaço liberado e reinicie os serviços
    Execute df -h novamente para confirmar que o uso do disco diminuiu. Em seguida, reinicie os workers em segundo plano do Mastodon com systemctl restart mastodon-sidekiq e o serviço web com systemctl restart mastodon-web. Isso garante que a limpeza seja reconhecida e que novos jobs possam ser executados.

Se o Mastodon Ainda Tiver Problemas de Espaço em Disco Após a Limpeza

A limpeza do cache de mídia não liberou espaço suficiente

Se o disco ainda estiver acima de 80% após a limpeza padrão, execute RAILS_ENV=production bin/tootctl media remove --days=1 para remover toda a mídia em cache de instâncias remotas com mais de 1 dia. Isso é agressivo e fará com que imagens de postagens remotas sejam recarregadas na primeira visualização, mas recupera a maior quantidade de espaço. Combine isso com RAILS_ENV=production bin/tootctl media remove-orphans novamente.

Arquivos de log estão enchendo o disco, não o cache de mídia

Execute du -sh /var/log para verificar o tamanho dos arquivos de log. Os logs do Mastodon e do sistema podem crescer para vários gigabytes. Use logrotate para comprimir e rotacionar os logs diariamente. Edite /etc/logrotate.d/mastodon para definir rotate 7 e compress. Em seguida, execute logrotate -f /etc/logrotate.conf para aplicar imediatamente.

Arquivos WAL do PostgreSQL estão consumindo espaço em disco

Arquivos de log write-ahead em /var/lib/postgresql/14/main/pg_wal podem crescer se os slots de replicação não forem gerenciados. Execute du -sh /var/lib/postgresql//main/pg_wal para verificar o tamanho. Se exceder 2 GB, defina wal_keep_size = 512 em postgresql.conf e reinicie o PostgreSQL. Isso limita o número de segmentos WAL retidos.

Comparação dos Métodos de Limpeza do Cache de Mídia do Mastodon

Item Limpeza Padrão (7 dias) Limpeza Agressiva (1 dia)
Comando RAILS_ENV=production bin/tootctl media remove --days=7 RAILS_ENV=production bin/tootctl media remove --days=1
Espaço em disco recuperado 60-80% do cache total 95-99% do cache total
Impacto na experiência do usuário Imagens remotas com mais de 7 dias recarregam na primeira visualização Todas as imagens remotas recarregam na primeira visualização por um dia
Frequência Executar semanalmente via cron Executar apenas quando o disco estiver criticamente cheio

Agora você pode executar os comandos media remove e remove-orphans para recuperar espaço em disco na sua instância Mastodon. Agende a limpeza padrão semanalmente usando cron com 0 3 0 cd /home/mastodon/live && RAILS_ENV=production bin/tootctl media remove --days=7. Para problemas persistentes de disco, verifique os arquivos de log e os diretórios WAL do PostgreSQL conforme descrito acima. A limpeza agressiva de 1 dia é um último recurso que recupera quase todo o espaço do cache, mas força a recarga de mídia remota para todos os usuários.