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

Заменен контроллер SATA, программный RAID (mdadm) перестал загружаться: grub rescue> нет такого диска

У меня есть относительно старый сервер, на материнской плате которого нет портов SATA (Dell Precision Workstaion 650). Также есть дешевый контроллер FakeRAID (чипсет VIA VT6421) и два Диски Seagate емкостью 3 ТБ (ST3000DM001), подключенные к контроллеру. Контроллер был настроен на использование дисков в режиме Stripe (не RAID): я в основном использовал его как контроллер SATA, а не как контроллер RAID. Вместо этого мне удалось установить программный (mdadm) RAID в этой системе. Каждый из двух физических дисков разбит на разделы следующим образом:

Number  Start (sector)    End (sector)  Size        Code  Name
1                2048            4095   1024.0 KiB  EF02  BIOS boot partition
2                4096         3186687   1.5 GiB     EF00  EFI System
3             3186688      5856337919   2.7 TiB     FD00  Linux RAID
4          5856337920      5860532223   2.0 GiB     8200  Linux swap

Итак, есть:

  1. 1 МБ нераспределенного свободного пространства в начале каждого диска в соответствии с требованиями GRUB для дисков GPT в устаревшей версии BIOS
  2. Раздел №1 (1 МБ): загрузочный раздел BIOS для GRUB
  3. Раздел №2 (1,5 ГБ) для / boot => md0
  4. Раздел №3 (2,7 ТиБ) для / => md1
  5. Раздел # 4 (2GiB) для свопа => md127

Разделы №2, №3 и №4 собираются в программные RAID-массивы md0, md1 и md127 (с использованием raid1):

$ cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid1 sdb2[2] sda2[3]
    1590208 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb3[2] sda3[3]
    2926444352 blocks super 1.2 [2/2] [UU]

md127 : active raid1 sdb4[1] sda4[0]
    2097088 blocks [2/2] [UU]

Grub (версия 1.99) индивидуально устанавливается на каждый из двух физических дисков.

Эта установка способна загружаться и более или менее успешно работала (Ubuntu Server 12.04 i686) в течение последних двух лет, за исключением пары сбоев жесткого диска (я думаю, в основном из-за перегрева, поскольку охлаждение было не очень хорошим). Дважды отказавший диск удалялся, а новый был успешно добавлен и синхронизирован в массиве.

Теперь я заменяю контроллер жесткого диска, дешевый FakeRAID (old_controller) на Supermicro SAT2-MV8 8 Port SATA HBA PCI-X (new_controller), который является чистым контроллером SATA, а не FakeRAID, потому что разъемы старого контроллера действительно хлипкие и кажутся иногда вызывать ошибки интерфейса.

ПРОБЛЕМА в том, что я не могу загрузить систему без old_controller. В частности, если ни один из дисков не подключен к old_controller, это всегда приводит к ошибке «нет такого диска» и командной строке grub rescue. Затем в режиме восстановления команда «ls» не выводит (md / 0), пока отображаются разделы физического диска. Однако, если один из дисков подключен к old_controller, система загружается нормально, и если в этом случае grub прерывается, команда ls показывает (md / 0) вместе с другими разделами диска. Пробовал несколько конфигураций.

Конфигурации, которые загружаются (по крайней мере, доходит до меню выбора изображения GRUB linux):

  1. disk1 + disk2 на old_controller
  2. disk1 на old_controller + disk2 на new_controller
  3. disk2 на old_controller + disk1 на new_controller
  4. disk1 на old_controller
  5. disk2 на old_controller

Команда GRUB "ls" в этих случаях всегда показывает (md / 0)

Конфигурации, которые НЕ загружаются (ошибка "нет такого диска" и grub rescue> командная строка):

  1. disk1 и disk2 на new_controller
  2. disk1 на new_controller
  3. disk2 на new_controller
  4. disk1 и disk2 на new_controller с полностью удаленным old_controller с материнской платы
  5. disk1 на new_controller с полностью удаленным old_controller с материнской платы
  6. disk2 на new_controller с полностью удаленным old_controller с материнской платы

Команда GRUB "ls" в этих случаях НЕ отображает (md / 0)

Почему GRUB не может собрать массив md, когда ни один из дисков не подключен к old_controller? В целом, не могли бы вы помочь мне заставить систему работать без old_controller?

Не могли бы вы порекомендовать хорошее место, чтобы подробно прочитать о том, как программный RAID собирается при загрузке. Особенно с GRUB? Как диски для массива MD определяются GRUB? Как может повлиять на этот процесс замененный контроллер SATA?

Спасибо!

Я отвечу на свой вопрос.

Коротко: обновление с GRUB1.99 до GRUB 2.02 beta2 решило проблему.

Каким-то образом модуль GRUB mdraid1x из GRUB1.99 не мог правильно определять RAID, когда диски были подключены к новому контроллеру. Я не уверен, в чем точная разница между контроллерами SATA. Однако одна вещь заключается в том, что, хотя ни один из них не смог определить правильный размер дисков 3 ТБ, их сообщенные значения были разными: 800 МБ на old_controller и 2 ТБ на new_controller. Может, это как-то повлияло на способность mdraid1x обнаруживать разделы RAID.

Тем не менее, эта проблема, похоже, была исправлена ​​в GRUB 2.02 beta2.