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

Материал из ALT Linux Wiki

Внезапно в ответ на любую команду получаем:

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

Такое сообщение означает, что файловая система /var или корневая автоматически перемонтирована в RO после сбоя.

Диагностика

Проверяем состояние жёсткого диска (требуются пакеты smartmontools и awk).
В командной строке (в окне терминала) запускаем с правами суперпользователя:

smartctl -A /dev/sda | awk 'BEGIN{ rc="GOOD"};/^(  5|19[6-8])/{if($10>0){print "Disk Error: "$2" = "$10; rc="BAD"}} END{print rc; if(rc=="BAD"){exit 1}}'
Disk Error: Current_Pending_Sector = 1
BAD

Сообщение «Current_Pending_Sector = 1» означает, что на диске появился сбойный блок. Это может быть результат сбоя в электропитании, а может быть и повреждение поверхности диска (в случае SSD - выход из строя микросхемы).

Примечания =

/dev/sda замените на ваш диск.

Если awk не установлен, можно обойтись одним smartmontools: smartctl -A /dev/sda и смотреть его вывод вручную - важны параметры №№ 5, 196, 197, 198.

Если и пакет smartmontools отсутствует в системе, загрузите с флешки LiveCD

Исправление

Все команды выполняйте с правами суперпользователя. В инструкции указано дисковое устройство /dev/sda, если ваше отличается - пишите своё.

Будьте внимательны! В инструкции есть деструктивные действия!

Поиск сбойного блока

Выполните команду

smartctl -t short /dev/sda

Посмотрите сообщение о прогнозируемом времени выполнения, подождите это время и выполните команду

smartctl -l selftest /dev/sda

Команда выдаст таблицу. В верхней строчке в столбце «Status» написано «Completed: read failure», в столбце «LBA_of_first_error» написано число — это адрес сбойного блока (сектора), запомните его.

Выполните команду

hdparm --read-sector адрес_сектора_из_LBA_of_first_error /dev/sda

После некоторой задержки (стандартно 70 секунд) команда выдаст ошибку и сообщение.

Если нет ошибки, скорее всего неправильно указан сектор и его нужно искать по другому или с сектора уже снята метка «Pending» и он либо уже нормальный (отметка Pending снята), либо забракован и переназначен на резервный (Reallocated). В этом случае дальнейшее НЕ выполнять, нужно тестировать (smartctl -t long) и смотреть (smartctl -l errors, smartctl -A)

Отбраковка сбойного блока

Внимание! Следующая команда перезаписывает нулями весь сектор, но он и так не читается, главное не ошибиться с сектором и с диском

hdparm --write-sector адрес_сектора_из_LBA_of_first_error --yes-i-know-what-i-am-doing /dev/sda

После этого опять

hdparm --read-sector адрес_сектора_из_LBA_of_first_error /dev/sda

Должен выдать пачку нулей и не должно быть задержки и ошибки

После этого smartctl -A /dev/sda | awk 'BEGIN{ rc="GOOD"};/^( 5|19[6-8])/{if($10>0){print "Disk Error: "$2" = "$10; rc="BAD"}} END{print rc; if(rc=="BAD"){exit 1}} '

И если будет GOOD - то все хорошо

Если же будет BAD - нужно смотреть, если еще есть Current_Pending_Sector, вычислять адреса и переписывать, если есть Reallocated_Sector_Ct, то лучше менять диск.

После всех манипуляций имеет смысл проверить файловую систему (fsck) на отмонтированной ФС.