Pular para o conteúdo

Read-only file system

O nome do erro já diz tudo: um programa não consegue gravar no disco porque o disco está em modo “somente leitura” ou porque o programa está rodando com permissões de escrita restritas.

Os casos mais comuns em que esse erro ocorre:

  • Quando o Astra inicia pela primeira vez e tenta salvar a configuração inicial
  • Ao salvar mudanças na interface web

No log, você verá um erro assim:

failed to save config /etc/astra/astra.conf [Read-only file system]

Sistema de arquivos montado como somente leitura de propósito

Seção intitulada “Sistema de arquivos montado como somente leitura de propósito”

Em alguns casos, o sistema de arquivos pode ter sido montado em modo somente leitura de propósito. Isso acontece com sistemas live USB, modos de recuperação ou alguns sistemas embarcados.

Você pode verificar se um sistema de arquivos está montado como somente leitura executando:

Terminal window
mount | grep ' / '

Procure pela opção ro (read-only) na saída. Exemplo:

/dev/sda1 on / type ext4 (ro,relatime)

Se você ver ro nas opções, o sistema de arquivos é somente leitura.

Você também pode verificar com:

Terminal window
cat /proc/mounts | grep ' / '

Para remontar o sistema de arquivos raiz com permissão de leitura e escrita:

Terminal window
mount -o remount,rw /

Essa mudança pode não continuar depois de reiniciar. Para deixá-la permanente, verifique o arquivo /etc/fstab e confirme que o sistema de arquivos raiz não está configurado para montar como somente leitura. O quarto campo do /etc/fstab não deve conter ro.

Os sistemas de arquivos do Linux podem mudar automaticamente para o modo somente leitura quando erros críticos são detectados. Esse é um mecanismo de proteção para evitar a corrupção dos dados.

As causas mais comuns são:

  • Erros de disco: problemas físicos no disco, como setores defeituosos ou falha de hardware
  • Corrupção do sistema de arquivos: erros na estrutura do sistema de arquivos detectados durante o funcionamento
  • Erros de I/O: problemas de comunicação com o dispositivo de armazenamento
  • Degradação de RAID: quando um array RAID entra em estado degradado

Verifique os logs do sistema em busca de erros de disco ou do sistema de arquivos:

Terminal window
dmesg | grep -i "read-only"

Ou:

Terminal window
journalctl -xe | grep -i "read-only"

Procure mensagens sobre erros de I/O, erros do sistema de arquivos ou remontagem:

EXT4-fs error: remounting filesystem read-only
I/O error, dev sda, sector 12345

Você também pode verificar os dados SMART do disco:

Terminal window
smartctl -a /dev/sda

Procure setores realocados, setores pendentes ou outros indicadores de falha do disco.

Um processo pode estar rodando em um ambiente em que o sistema de arquivos foi restringido de propósito com mount namespaces. Isso é comum em ambientes com contêineres ou com alguns frameworks de segurança. Se você se deparar com essa situação e souber o que são mount namespaces, você já sabe como lidar com ela.

O parâmetro ProtectSystem nos arquivos de serviço do systemd pode restringir o acesso de escrita a certos diretórios.

A opção ProtectSystem torna partes do sistema de arquivos somente leitura para o serviço:

  • ProtectSystem=strict - torna todo o sistema de arquivos somente leitura, exceto /proc, /dev e /sys
  • ProtectSystem=full - torna /usr, /boot e /efi somente leitura
  • ProtectSystem=yes - torna /usr e /boot somente leitura

O próprio Astra (quando inicializado com astra init) não usa esse parâmetro no seu arquivo de serviço. Porém, se o Astra for iniciado por outro serviço de monitoramento de processos, como o monit, o arquivo de serviço dessa ferramenta de monitoramento pode incluir o ProtectSystem.

Verifique o arquivo de serviço do systemd que inicia o Astra ou o serviço de monitoramento:

Terminal window
systemctl cat astra

Ou, se o Astra for iniciado por outro serviço, como o monit:

Terminal window
systemctl cat monit

Procure por ProtectSystem na seção [Service]. Se estiver presente, remova ou defina como false:

[Service]
ProtectSystem=false

Depois de editar o arquivo de serviço, recarregue o systemd e reinicie o serviço:

Terminal window
systemctl daemon-reload
systemctl restart astra