Перейти к содержимому

Файловая система только для чтения

Название ошибки говорит само за себя: программа не может записывать на диск, потому что диск находится в режиме “только для чтения” или программа запущена с ограниченными правами на запись.

Наиболее частые ситуации, когда возникает эта ошибка:

  • При первом запуске Astra и попытке сохранить начальную конфигурацию
  • При сохранении изменений через веб-интерфейс

В журнале вы увидите ошибку такого вида:

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

Файловая система специально смонтирована как только для чтения

Заголовок раздела «Файловая система специально смонтирована как только для чтения»

В некоторых случаях файловая система может быть специально смонтирована в режиме только для чтения. Это бывает на live USB-системах, в режиме восстановления или на некоторых встраиваемых устройствах.

Вы можете проверить, смонтирована ли файловая система как только для чтения, выполнив команду:

Окно терминала
mount | grep ' / '

Ищите опцию ro (read-only) в выводе. Пример:

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

Если вы видите ro в опциях, файловая система доступна только для чтения.

Также можно проверить так:

Окно терминала
cat /proc/mounts | grep ' / '

Чтобы перемонтировать корневую файловую систему в режим чтения-записи:

Окно терминала
mount -o remount,rw /

Это изменение может не сохраниться после перезагрузки. Чтобы сделать его постоянным, проверьте файл /etc/fstab и убедитесь, что корневая файловая система не указана для монтирования только для чтения. В четвёртом поле в /etc/fstab не должно быть ro.

Автоматический переход файловой системы в режим только для чтения

Заголовок раздела «Автоматический переход файловой системы в режим только для чтения»

Файловые системы Linux могут автоматически переходить в режим только для чтения при обнаружении критических ошибок. Это механизм защиты от повреждения данных.

Наиболее частые причины:

  • Ошибки диска: Физические проблемы с диском, например, битые сектора или сбои оборудования
  • Повреждение файловой системы: Ошибки в структуре файловой системы, обнаруженные во время работы
  • Ошибки ввода-вывода: Проблемы с доступом к устройству хранения данных
  • Деградация RAID: Когда RAID-массив переходит в деградированное состояние

Проверьте системные журналы на наличие ошибок диска или файловой системы:

Окно терминала
dmesg | grep -i "read-only"

Или:

Окно терминала
journalctl -xe | grep -i "read-only"

Ищите сообщения об ошибках ввода-вывода, ошибках файловой системы или перемонтировании:

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

Также можно проверить SMART-статус диска:

Окно терминала
smartctl -a /dev/sda

Обратите внимание на переназначенные сектора, ожидающие сектора и другие признаки неисправности диска.

Процесс может работать в среде, где файловая система специально ограничена с помощью пространств монтирования (mount namespaces). Это часто встречается в контейнерах или при использовании некоторых средств безопасности. Если вы столкнулись с такой ситуацией и знаете, что такое mount namespaces, вы уже знаете, как с этим справиться.

Параметр ProtectSystem в файлах сервисов systemd может ограничивать права на запись в определённые каталоги.

Опция ProtectSystem делает части файловой системы доступными только для чтения для сервиса:

  • ProtectSystem=strict — делает всю файловую систему только для чтения, кроме /proc, /dev и /sys
  • ProtectSystem=full — делает /usr, /boot и /efi только для чтения
  • ProtectSystem=yes — делает /usr и /boot только для чтения

Сама Astra (при инициализации через astra init) не использует этот параметр в своём сервисном файле. Однако если Astra запускается через другой сервис-монитор, например, monit, в сервисном файле этого инструмента может быть указан ProtectSystem.

Проверьте systemd-сервисный файл, который запускает Astra или сервис мониторинга:

Окно терминала
systemctl cat astra

Или если Astra запускается через другой сервис, например monit:

Окно терминала
systemctl cat monit

Ищите параметр ProtectSystem в секции [Service]. Если он есть, удалите его или установите в false:

[Service]
ProtectSystem=false

После редактирования сервисного файла перезагрузите systemd и перезапустите сервис:

Окно терминала
systemctl daemon-reload
systemctl restart astra