Ir al contenido

Sistema de archivos de solo lectura

El nombre del error lo dice todo: un programa no puede escribir en el disco porque el disco está en modo “solo lectura”, o el programa se está ejecutando con permisos restringidos de escritura.

Los escenarios más comunes donde ocurre este error:

  • Cuando Astra se inicia por primera vez e intenta guardar la configuración inicial
  • Al guardar cambios en la interfaz web

En el registro, verás un error como este:

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

Sistema de archivos montado intencionalmente como solo lectura

Sección titulada «Sistema de archivos montado intencionalmente como solo lectura»

En algunos casos, el sistema de archivos puede estar montado deliberadamente en modo solo lectura. Esto puede suceder en sistemas live USB, modos de recuperación o ciertos sistemas embebidos.

Puedes verificar si un sistema de archivos está montado como solo lectura ejecutando:

Ventana de terminal
mount | grep ' / '

Busca la opción ro (solo lectura) en la salida. Ejemplo:

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

Si ves ro en las opciones, el sistema de archivos es de solo lectura.

También puedes comprobarlo con:

Ventana de terminal
cat /proc/mounts | grep ' / '

Para volver a montar el sistema de archivos raíz como lectura y escritura:

Ventana de terminal
mount -o remount,rw /

Este cambio puede no ser permanente después de reiniciar. Para hacerlo permanente, revisa tu archivo /etc/fstab y asegúrate de que el sistema de archivos raíz no esté configurado para montarse como solo lectura. El cuarto campo en /etc/fstab no debe contener ro.

Transición automática a sistema de archivos de solo lectura

Sección titulada «Transición automática a sistema de archivos de solo lectura»

Los sistemas de archivos Linux pueden cambiar automáticamente a modo solo lectura cuando se detectan errores críticos. Este es un mecanismo de protección para evitar la corrupción de datos.

Las causas más comunes incluyen:

  • Errores de disco: Problemas físicos con el disco, como sectores defectuosos o fallos de hardware
  • Corrupción del sistema de archivos: Errores en la estructura del sistema de archivos detectados durante la operación
  • Errores de E/S: Problemas al comunicarse con el dispositivo de almacenamiento
  • Degradación de RAID: Cuando un arreglo RAID entra en estado degradado

Revisa los registros del sistema en busca de errores de disco o sistema de archivos:

Ventana de terminal
dmesg | grep -i "read-only"

O:

Ventana de terminal
journalctl -xe | grep -i "read-only"

Busca mensajes sobre errores de E/S, errores de sistema de archivos o remontaje:

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

También puedes revisar los datos SMART del disco:

Ventana de terminal
smartctl -a /dev/sda

Busca sectores reasignados, sectores pendientes u otros indicadores de fallo de disco.

Aislamiento de espacios de montaje (Mount Namespace)

Sección titulada «Aislamiento de espacios de montaje (Mount Namespace)»

Un proceso puede estar ejecutándose en un entorno donde el sistema de archivos ha sido restringido deliberadamente usando espacios de montaje. Esto es común en entornos con contenedores o con ciertos marcos de seguridad. Si te encuentras con esta situación y sabes qué son los espacios de montaje, ya sabes cómo manejarlo.

El parámetro ProtectSystem en los archivos de servicio de systemd puede restringir el acceso de escritura a ciertos directorios.

La opción ProtectSystem hace que partes del sistema de archivos sean de solo lectura para el servicio:

  • ProtectSystem=strict - Hace que todo el sistema de archivos sea de solo lectura excepto /proc, /dev y /sys
  • ProtectSystem=full - Hace que /usr, /boot y /efi sean de solo lectura
  • ProtectSystem=yes - Hace que /usr y /boot sean de solo lectura

Astra en sí (cuando se inicializa con astra init) no utiliza este parámetro en su archivo de servicio. Sin embargo, si Astra se inicia a través de otro servicio de monitoreo, como monit, el archivo de servicio de esa herramienta de monitoreo puede incluir ProtectSystem.

Revisa el archivo de servicio de systemd que inicia Astra o el servicio de monitoreo:

Ventana de terminal
systemctl cat astra

O si Astra es iniciado por otro servicio como monit:

Ventana de terminal
systemctl cat monit

Busca ProtectSystem en la sección [Service]. Si está presente, elimínalo o configúralo en false:

[Service]
ProtectSystem=false

Después de editar el archivo de servicio, recarga systemd y reinicia el servicio:

Ventana de terminal
systemctl daemon-reload
systemctl restart astra