У меня есть сервер 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
, многократно (это оказалось необходимым).
(вместо этого может быть разумнее создать резервную копию диска компонента, а не зеркала)