Miklix

Замена неисправного диска в массиве mdadm в Ubuntu

Опубликовано: 15 февраля 2025 г. в 22:02:33 UTC

Если вы оказались в ужасной ситуации, связанной с отказом диска в RAID-массиве mdadm, в этой статье объясняется, как правильно заменить его в системе Ubuntu.


Эта страница была переведена с английского языка для того, чтобы сделать ее доступной как можно большему числу людей. К сожалению, машинный перевод еще не является совершенной технологией, поэтому возможны ошибки. Если вы хотите, вы можете просмотреть оригинальную английскую версию здесь:

Replacing a Failed Drive in an mdadm Array on Ubuntu

Информация в этом посте основана на Ubuntu 18.04 и версии mdadm, включенной в его репозитории; на момент написания v4.1-rc1. Она может быть или не быть действительной для других версий.

Недавно у меня внезапно вышел из строя диск на моем домашнем файловом сервере, который состоит из девяти дисков в массиве mdadm RAID-6. Это всегда пугает, но, к счастью, мне удалось быстро найти сменный диск, который был доставлен уже на следующий день, так что я смог начать восстановление.

Я, признаться, немного сэкономил, когда изначально настраивал файловый сервер; только два из дисков на самом деле являются дисками NAS (Seagate IronWolf), а остальные — настольными дисками (Seagate Barracuda). Неудивительно, что это был один из настольных дисков, который вышел из строя (правда, после почти трех лет службы). Он был полностью мертв; после переноса его в настольный USB-корпус все, что я от него услышал, был раздражающий щелчок, и ни Ubuntu 20.04, ни Windows 10 не смогли его обнаружить.

Ну что ж, перейдем к замене (и да, новый диск, который я купил, был IronWolf, урок усвоен) — как бы страшно ни было потерять диск в работающем массиве, еще страшнее, если вы не знаете правильную процедуру его замены. Это не первый раз, когда мне пришлось заменить неисправный диск в массиве mdadm, но, к счастью, это так редко, что мне обычно приходится искать правильные команды. На этот раз я решил наскоро сделать собственное небольшое руководство для будущего использования.

Итак, прежде всего, когда вы получаете ужасное сообщение о сбое от mdadm, вам нужно определить, какой диск вышел из строя. Конечно, он сообщит вам имя устройства (в моем случае /dev/sdf), но, вероятно, не очевидно, какой именно это физический диск, поскольку эти имена могут измениться при загрузке машины.

Если вы даже не уверены, какое именно устройство вышло из строя, вы можете использовать следующую команду, чтобы выяснить это (замените /dev/md0 на ваше RAID-устройство):

mdadm -–query -–detail /dev/md0

Как уже упоминалось, в моем случае это было /dev/sdf, поэтому давайте продолжим с него.

Затем вы можете попытаться найти серийный номер неисправного диска, выполнив следующую команду:

smartctl -–all /dev/sdf | grep -i 'Serial'

(если smartctl не найден, вам необходимо установить пакет smartmontools в Ubuntu)

Затем серийный номер можно сравнить с серийными номерами на физической этикетке дисков, чтобы выяснить, какой из них вышел из строя.

Но в этот раз мне не так повезло. Диск был полностью мертв и даже отказывался предоставлять SMART или другие данные, включая серийный номер.

Поскольку у меня был физический доступ к серверу (который вам действительно нужен, если вы собираетесь заменить физический диск самостоятельно, я полагаю ;-)) и сервер фактически работал, когда диск вышел из строя (и продолжал нормально работать благодаря избыточности RAID-6), я применил действительно примитивный, но на самом деле очень эффективный и очевидный метод простого копирования большого файла на сервер и наблюдения за тем, какой индикатор жесткого диска не мигает. В течение нескольких секунд я определил виновника.

Теперь, прежде чем извлекать физический диск, будет хорошей идеей официально уведомить mdadm о своем намерении, выполнив следующую команду (замените имена устройств на свои собственные, если это необходимо):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

В случае успеха mdadm ответит сообщением о том, что диск был «горячо удален», по-видимому, потому, что виртуальное RAID-устройство в это время фактически запущено.

Если он завершается с сообщением об ошибке, похожим на "устройство или ресурс заняты", возможно, mdadm на самом деле не зарегистрировал диск как полностью отказавший. Чтобы сделать это, выполните следующую команду (опять же, не забудьте заменить имена устройств на свои собственные, если это необходимо):

mdadm --manage /dev/md0 --fail /dev/sdf

После этого вы сможете удалить устройство из массива с помощью предыдущей команды.

Теперь пришло время заменить диск. Если вы действительно, действительно - типа, действительно - уверены, что ваша машина и контроллер поддерживают горячую замену, вы можете сделать это, не выключая машину. Это был бы способ перейти к критически важным производственным системам, работающим на настоящем, надлежащем серверном оборудовании, которое, как вы знаете, может с этим справиться. Мой домашний файловый сервер основан на потребительской настольной материнской плате с парой полубезымянных контроллеров SATA в слотах PCIe, чтобы обеспечить больше портов SATA.

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

Перед этим хорошей идеей будет закомментировать raid-устройство в файле /etc/fstab, чтобы Ubuntu не пытался автоматически монтировать его при следующей загрузке, поскольку это может зависнуть и заставить вас перейти в режим восстановления из-за деградировавшего RAID-массива. Это может не быть большой проблемой, если это настольная система, но я запускаю этот сервер без монитора или клавиатуры, так что это будет немного хлопотно.

После загрузки машины с установленным новеньким диском используйте lsblk или другие средства для его идентификации. Если вы ничего не меняли, он, вероятно (но не обязательно ), получит то же имя, что и замененный вами диск. В моем случае так и было, поэтому новый также называется /dev/sdf.

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

Я использовал sgdisk для этой цели, скопировав таблицу разделов из /dev/sdc в /dev/sdf. Обязательно замените имена устройств на ваши собственные, если это необходимо.

Обратите внимание на порядок: сначала вы указываете диск "to"! Для меня это немного нелогично, но просто убедитесь, что вы все сделали правильно, чтобы не получить еще один сбой диска в массиве ;-)

sgdisk -R /dev/sdf /dev/sdc

Затем, чтобы избежать конфликтов UUID, сгенерируйте новые UUID для нового диска:

sgdisk -G /dev/sdf

И вот наконец пришло время добавить новый диск в массив и начать вечеринку по восстановлению! (Ладно, это не совсем вечеринка, это на самом деле довольно медленный и нервирующий процесс, поскольку вы действительно, действительно не хотите, чтобы еще один диск вышел из строя в это время. Хотя пиво может помочь.)

В любом случае, чтобы добавить новый диск в массив, выполните следующую команду (опять же, не забудьте заменить имена устройств на свои собственные, если это необходимо):

mdadm -–manage /dev/md0 -–add /dev/sdf1

Если все пройдет хорошо, диск будет добавлен в массив без сбоев. Я полагаю, что он фактически добавляется как "горячий резерв" по умолчанию, но поскольку в этом массиве отсутствует диск (тот, который вышел из строя), он немедленно вводится в эксплуатацию, и начинается процесс перестроения.

Вы можете следить за этим следующим образом:

watch cat /proc/mdstat

Это, вероятно, займет некоторое время; на моем скромном сервере (основанном в основном на потребительском оборудовании и настольных дисках, заметьте) он смог достичь чуть менее 100 МБ/с. Имейте в виду, что это RAID-6, поэтому при перестройке задействовано много вычислений четности; RAID-10 был бы намного быстрее. Эта конкретная машина имеет четырехъядерный процессор AMD A10 9700E («E» означает, что это энергосберегающая модель с пониженной тактовой частотой, т. е. не супербыстрая), просто чтобы дать вам представление о том, чего ожидать. С девятью дисками по 8 ТБ в моей установке полная перестройка заняла чуть более 24 часов.

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

После этого добавьте его обратно в файл /etc/fstab, перезагрузите компьютер и наслаждайтесь своими файлами :-)

Поделиться на BlueskyПоделиться на FacebookПоделиться на LinkedInПоделиться на TumblrПоделиться на XПоделиться на LinkedInЗакрепить на Pinterest

Миккель Банг Кристенсен

Об авторе

Миккель Банг Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.