Назад | Перейти на главную страницу

Исправление файловой системы только для чтения на Raid-1?

У меня есть сервер Ubuntu 18, использующий программный массив RAID-1, и smartctl указывает, что мой /dev/sda не работает. Обе Throughput_Performance и Reallocated_Sector_Ct указаны как "FAILING_NOW".

Однако это не привело к сбою RAID, поскольку /proc/mdstat все еще указывает на то, что оба диска в порядке.

К сожалению, хотя smartctl показывает мой /dev/sdb в порядке, ошибка на /dev/sda почему-то моя файловая система стала доступной только для чтения. Любая попытка записи или удаления файлов сообщает об ошибке, например:

rm: cannot remove '<somefile>': Read-only file system

Я понимаю, что Linux делает это, когда обнаруживает возможный сбой диска, чтобы предотвратить дальнейшее повреждение записи.

Тем не менее, я думал, что весь смысл RAID-1 и причина, по которой я его использовал, заключались в том, что он позволяет избежать отказа одного диска из-за повреждения файловой системы за счет зеркалирования всех данных между двумя дисками? Сбой диска должен остановить зеркалирование, но по-прежнему предоставить ОС полный доступ для чтения / записи к оставшемуся диску, верно?

Я собираюсь заменить неисправный диск, но как мне тем временем исправить файловую систему и не допустить, чтобы сбой одного диска нарушил мой массив RAID-1?

Если диск повреждает данные, уровень MD не знает об этом, и он может вернуть или сохранить недопустимые данные, которые он, в свою очередь, может использовать для записи поврежденных данных обратно на другой диск; если он получит неправильное представление о структуре файловой системы, он примет неправильные решения.

Уровень MD не считывает данные с нескольких дисков и не сравнивает их, а также не слишком умен в отношении сбоев дисков. Он будет постоянно пытаться использовать неисправные диски. Вот почему я отслеживаю варианты «исключения ata» в моем журнале ядра, потому что они указывают на то, что диск выйдет из строя задолго до чего-либо еще. Я тогда просто mdadm --manage /dev/mdX --remove /dev/xxx диск и добавить еще один с mdadm --manage /dev/mdX --add /dev/xxx.

А пока вы можете удалить неисправный диск, полностью dd клон /dev/mdX устройство как резервное (dd if=/dev/mdX of=/some/file/on/some/other/device bs=4M) (или записать в stdout и передать по ssh) и с sysrescue CD / USB-накопителя выполните fsck -f -C /dev/mdX, многократно (это оказалось необходимым).

(вместо этого может быть разумнее создать резервную копию диска компонента, а не зеркала)