LINUX.ORG.RU
ФорумAdmin

Замена диска nvme в массиве RAID 1 mdadm проблема с разделами дисков

 , , ,


0

1

Всем добрый вечер! Немного предыстории. Достался по наследству сервер на ubuntu 22.04 на котором собрано 3 разных софтовых массивах спомощью mdadm RAID 1 на 2-х nvme дисках, RAID 1 на 2 SSD и RAID 5 на 4-х SSD.

Проблема в следующем: в один прекрасный момент получил уведомление в заббикс mdadm degraded. Полез на сервер смотреть что к чему. Собственно это и был первый раз когда я вообще зашел на эту железку (руки не доходили до неё).

Глянул что там по дискам и увидел что из массива RAID1 /dev/md0 выпал один nvme диск. mdadm –detail /dev/md0 выдал

1 диск active sync /dev/nvme0n1p2 2 диск removed

Что как было изначально собрано я не знал и разбираться пришлось уже по ходу дела. Для себя выяснил что было 2 одинаковых nvme которые в системе значились как nvme0n1 и nvme1n1 (скорее всего, других вариантов у меня нет) На дисках было по 2 раздела: /dev/nvme0n1 – nvme0n1p1 и nvme0n1p2 /dev/nvme1n1 – nvme1n1p1 и nvme1n1p2 (если мыслить логически. Если моя логика неверна просьба поправить т.к. ранее я по сути и не работал с софтовыми массивами на лине) Сам массив как я понял был собран именно на разделах nvme0n1p2 и nvme1n1p2.

nvme0n1p1 и nvme1n1p1 видимо были загрузчиками но не были в массиве.

Что было сделано:

  1. Система сама пометила диск как сбойный и удалила его из массива.
  2. Диск был заменен на новый аналогичный (разметку я никакую не делал)
  3. Поискал в инете иструкций (не уверен что правильных) и приступил к делу.

Нашел новый установленный диск он назывался nvme1n1

Скопировал с nvme0n1 разделы на nvme1n1 командой sudo sgdisk -R=/dev/nvme1n1 /dev/nvme0n1 (возможно это не правильно). Разделы скопировались вроде все ок. К сожалению ничего не проверил и добавил раздел nvme1n1p2 к массиву md0. Прошел ребилд и вроде все ок в массиву стало 2 раздела nvme0n1p2 и nvme1n1p2.

А вот с загрузчиками (если я правильно понимаю что это они) nvme0n1p1 и nvme1n1p2 возникли какие то непонятки…. nvme0n1p1 (который я вообще никак не трогал т.к. это раздел был работающего диска) по команде blkid /dev/nvme0n1p1 выдавал следующую инфу : /dev/nvme0n1p1:UUID=«9FB0-12FB» BLOCK_SIZE=«512» TYPE=«vfat» PARTUUID=«5996d0c5-8818-45d0-8e9b-442a5b4b84db»

а по команде blkid /dev/nvme1n1p1: PTUUID=«3641b938-26ea-40b1-a070-ec3a9174f71e» PPTYPE=«gpt» PARTUUID=«5996d0c5-8818-45d0-8e9b-442a5b4b84db»

Собственно на этом моменте я и завис… Я не особо понимаю должны эти разделы в итоге быть одинаковыми по своей структуре и почему в первом тип указан vfat а на втором pptype = gpt если раздел копировался с живого диска. И не могу пока что понять как это может повлиять в дальнейшем на работу системы. Кстати была еще ошибка после замены диска при старте системы что она не может примонтировать раздел (по я потом закоментил эту строку в fstab и ошибка ушла. в fstab значился диск тоже с коротким UUID примерно как на первом диске 9FB0-12FB только естествено он был другой, поэтому у меня и было предположение что раздел на новом диске тоже должен быть в vfat.

p.s. в линухах я особо не силен поэтому прошу помощи у знающих, или хотя бы направить в нужное русло. Заранее Спасибо


Раздел на втором диске должен быть тоже vfat и видеться в blkid как раздел, с файловой системой vfat.

Идентификатор UUID файловой системы может быть другой.

Вообще, при работе загрузчика он должен уметь обслуживать фактически на EFI раздела, обновляя efi файл с образом загрузчика на обоих, так что, скорее всего в /etc где-то должно быть прописано в UUID обоих EFI разделов или напротив один.

С такой схемой я до конца не разбирался.

Так что у тебя есть возможность погрепать и разобраться, ну и написать исследование.

Что бы тебе более детально подсказать - нужно промоделировать на виртуалке такое поведение, применительно, что это будет не nvme, а обычный (виртуальный) диск с другой моделью - это без разницы.

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

А сомнения, что он должен быть одинаковый следующие. Точнее причины почему он должен быть одинаковый и в тоже время почему должен быть разный.

В EFI разделах рядом с efi файлом grub должен лежать мини конфиг, в котором должна быть указана всего одна строчка, может две, указывающая с раздела с каким PARTUUID или файловой системе с каким UUID загружать основной конфиг и остальные модули GRUB.

И для унификации конфигов получается PARTUUID и UUID должны быть одинаковыми. Но есть нюанс, как их потом по очереди монтировать, чтобы сценарии ОС при обновлении пакета с загрузчиком GRUB обновили efi файл образа загрузчика.

В итоге, если UUID и PARTUUID будут одинаковыми - строки в конфигах будут одинаковыми.

Хм, думаю UUID и PARTUUID всё же должны быть разными. Грепай (ищи) в /etc упоминание UUID PARTUUID которые есть.

В мини конфиге на EFI разделе должен быть UUID файловой системы где находится директория /boot, а она у тебя на файловой системе на RAID массиве.

Там должна быть версия метаданных RAID определённого типа, чтобы загрузчик (GRUB) мог его найти и прочитать оттуда свой основной конфиг, модули, ядро и инитрамфс.

Рассуждения и анализ вслух.

Если разберёшься - напиши, пожалуйста, просто интересно. Я могу сам разобраться, но сейчас готовой конфигурации нет.

Надеюсь, тебе это поможет.

Удачи.

anonymous
()

Часто загрузчик может быть один, его не надо зеркалировать. Т.е. на одном диске загрузчик, на другом на этом же месте, скажем, swap, или вообще ничего. Т.е. возможно у тебя такая структура и была.

Как узнать?

по я потом закоментил эту строку в fstab и ошибка ушла.

Строку-то покажи. Куда монитровался диск?

Нужны файлы /etc/fstab, /etc/mdadm.conf и blkid, будем смотреть.

Выложи только нормально: Как правильно копировать вывод терминала

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Ну очень маловероятно. А смысл тогда в таком RAID1 с системным разделом и загрузчиком?

Поставь Debian на GPT разметку в EFI режиме с корнем на RAID.

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

А EFI не может быть в RAID.

anonymous
()
Ответ на: комментарий от anonymous

Для загрузки на деградированном RAID1 в mdadm нужно будет добавлять параметры ядру (скрипту init в initramfs), но загрузиться можно будет и уже из самой системы добавить в массив новый диск.

anonymous
()
Ответ на: комментарий от YAR

fdisk?

Хочешь сказать при обновлении пакета с grub будет автоматически производиться обновление efi файла образа и конфига на всех разделах с типом EFI System Parition?

Можно команду целиком / пример?

anonymous
()
Ответ на: комментарий от anonymous

fdisk?

Нет, я про использованную ТСом sgdisk

        -G, --randomize-guids
              Randomize the disk's GUID and all partitions' unique GUIDs (but not their partition type code GUIDs). This function may be used after cloning a disk in or‐
              der to render all GUIDs once again unique.


А так у него в системе 2 устройства с идентичными идентификаторами. Мало ли к каким глюкам это приведет?

YAR ★★★★★
()
Ответ на: комментарий от anonymous

Не успел исправить первое сообщение.

Хочешь сказать при обновлении пакета с grub будет автоматически производиться обновление efi файла образа и конфига на всех разделах с типом EFI System Parition?

А вот эту часть можно было бы решить mdadm'ом с какой-то там версией метаданных для RAID1. Или просто накостылить кастомный скрипт, который будет копировать образ куда надо.

YAR ★★★★★
()

Ничего сложного. sgdisk скопировал таблицу разделов, но файловую систему-то ты не создал, нужно было ещё mkdosfs применить на втором загрузочном разделе, а вот как автоматом обновлять груб там я не знаю, но можно попробовать просто пофайлово скопировать с первого раздела.

Покажи ещё /etc/fstab включая удалённую строку.

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

Всем спасибо! Прочитав все Ваши комментарии пошел следующим путём. т.к. у меня были уже спокированы диреткории с первого диска я форматировал первый раздел на втором диске в vfat а потом просто примонтировал оба первых раздела с двух дисков и пофайлово скопировал boot раздел. Поправил fstab раскоментил старую запись и поменял в ней UUID на актуальный. Все заработало, ошибки ушли пробовал вынимать первый диск ОС начала грузиться.

lorret
() автор топика