Как сделать так, чтобы Grub загружался как с основного, так и с вторичного диска массива RAID1

Вопрос или проблема

В данный момент я устанавливаю SuSE Linux 15. Я хочу защитить эту систему от отказа диска, поэтому выбрал настройку программного RAID 1 на диск1 (sda) и диск2 (sdb). Во время установки я настроил разделы дисков в RAID 1 и затем создал следующие разделы:
/boot/efi md0 (sda2+sdb2)
/boot md1 (sda3+sdb3)
/swap md2 (sda4+sdb4)
/ md3 (sda5+sdb5)

Затем я протестировал эту систему, удалив диск sdb, и система могла загружаться без проблем.
Но когда я удалил диск sda (основной), система не смогла перейти за Grub.
После анализа я понял, что Grub настроен таким образом, что указывает на программный raid-раздел md1, но он должен иметь оба диска в наличии, то есть работающий программный raid, чтобы суметь загрузить систему с этого устройства md1.
Меня это не устраивает, если это действительно так. Основная идея использования программного raid для устройства /boot заключается в том, что в случае сбоя оборудования система должна использовать другой работающий диск и загружаться. Разве не для этого существует программный raid 1?
Я действительно запутался сейчас. Если вам нужны какие-либо дополнительные детали системы, пожалуйста, спросите. Но как же тогда обезопасить систему (boot) от аппаратного сбоя? Диски в конечном итоге выходят из строя. Поэтому должно быть какое-то решение. Просто я его еще не знаю.

С уважением.

Вот вывод команд, которые вы запросили,

localhost:~ # lsblk -f | grep -v loop | sed -E 's/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/'
NAME    FSTYPE            FSVER            LABEL                           UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
├─sda2  linux_raid_member 1.0              any:0                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
├─sda3  linux_raid_member 1.0              any:1                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
├─sda4  linux_raid_member 1.0              any:2                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
│ └─md2 swap              1                                                XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX                [SWAP]
└─sda5  linux_raid_member 1.0              any:3                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
sdb
├─sdb1
├─sdb2  linux_raid_member 1.0              any:0                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
│ └─md0 vfat              FAT32                                            ADB7-4EE5                            1021.9M     0% /boot/efi
├─sdb3  linux_raid_member 1.0              any:1                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
│ └─md1 ext4              1.0                                              XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  853.8M     7% /boot
├─sdb4  linux_raid_member 1.0              any:2                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
│ └─md2 swap              1                                                XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX                [SWAP]
└─sdb5  linux_raid_member 1.0              any:3                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
  └─md3 ext4              1.0                                              XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX    4.4G    54% /
sr0     iso9660           Joliet Extension SLE-15-SP6-Full-x86_6493.51.001 2024-06-13-19-56-33-00
localhost:~ # fdisk -l
Disk /dev/sda: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 0E77630A-CBC9-4C1F-9321-D7886DAC09BC
 
Device       Start      End  Sectors Size Type
/dev/sda1     2048   104447   102400  50M BIOS boot
/dev/sda2   104448  2201599  2097152   1G Linux RAID
/dev/sda3  2201600  4298751  2097152   1G Linux RAID
/dev/sda4  4298752  8493055  4194304   2G Linux RAID
/dev/sda5  8493056 31457246 22964191  11G Linux RAID
 
 
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 07F46E03-A25D-4305-BCFD-E79ADEA113C1
 
Device       Start      End  Sectors Size Type
/dev/sdb1     2048   104447   102400  50M BIOS boot
/dev/sdb2   104448  2201599  2097152   1G Linux RAID
/dev/sdb3  2201600  4298751  2097152   1G Linux RAID
/dev/sdb4  4298752  8493055  4194304   2G Linux RAID
/dev/sdb5  8493056 31457246 22964191  11G Linux RAID
 
 
Disk /dev/md1: 1023.94 MiB, 1073676288 bytes, 2097024 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/md3: 10.95 GiB, 11757551616 bytes, 22963968 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Disk /dev/md0: 1023.94 MiB, 1073676288 bytes, 2097024 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
 
 
Disk /dev/md2: 2 GiB, 2147418112 bytes, 4194176 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Соответствующие разделы:

/dev/sda1 --> Раздел BIOS BOOT
/dev/sda2 --> Раздел BIOS BOOT
/dev/md0 (sda2+sdb2) : /boot/efi
/dev/md1 (sda3+sdb3): /boot 
/dev/md2 (sda4+sdb4): /swap 
/dev/md3 (sda5+sdb5): / 

У меня недостаточно очков репутации, чтобы комментировать прямо сейчас, поэтому я должен часть из этого написать в ответе. То, что вы хотите сделать, возможно, и я делал что-то подобное с RAID10, хотя не с EFI. Как минимум, я могу предложить структуру дисков, которая может облегчить вашу задачу. Если вы можете

RAID 1 действительно должен защитить вас от потери диска без потери работоспособности машины. Однако, поскольку grub не “понимает” программный RAID, есть несколько ручных шагов. Чтобы загружаться с любого из дисков, необходимо, чтобы выполнялись следующие условия:

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

Если вы настроили RAID во время установки, то каждый диск должен быть отмечен как загрузочное устройство (обычно это не по умолчанию). Это оставляет место для grub на каждом диске. Скриншоты шага 1 в этом руководстве очень информативны.

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

$ lsblk -f | grep -v loop | sed -E 's/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/'
$ fdisk -l

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

P.S.: В плане компоновки, если требования не диктуют иное, вы можете извлечь выгоду от размещения полной ёмкости ваших дисков в одном md0 RAID1. Вы можете далее разбить md0, если захотите (например, / и /home). Если вы не хотите swap на выделенном оборудовании или на другом уровне RAID, файл подкачки (например, /swap.img) легко настроить и его намного проще изменить в будущем, если ваши потребности изменятся.

.

Ответ или решение

Чтобы сделать так, чтобы GRUB загружался как с основного, так и с вторичного диска массива RAID1, необходимо выполнить несколько шагов и учесть специфику конфигурации программного RAID в Linux. Давайте рассмотрим это в деталях.

Теория

RAID 1 обеспечивают защиту данных посредством зеркалирования, что значит, что данные дублируются на оба диска. В случае отказа одного из дисков второй продолжает работу. Однако, программный RAID в Linux требует, чтобы загрузчик GRUB был правильно настроен на обоих дисках, чтобы система могла загружаться независимо от того, какой диск остался в рабочем состоянии.

Пример

В вашем случае вы установили openSUSE и сконфигурировали программный RAID 1, однако система не загружается при отсутствии основного диска (sda). Это происходит, потому что GRUB по умолчанию может быть настроен только на один из дисков, а не на оба.

Применение

Шаги для настройки GRUB на обоих дисках:

  1. Убедитесь, что оба диска имеют разделы BIOS Boot:

    • Вы уже создали разделы BIOS Boot на sda1 и sdb1. Это необходимо для установки загрузчика GRUB.
  2. Установите GRUB на оба диска:

    • Это ключевой шаг. Вам нужно установить GRUB как на sda, так и на sdb.
# Установка GRUB на диск sda
grub2-install /dev/sda

# Установка GRUB на диск sdb
grub2-install /dev/sdb
  1. Обновите конфигурацию GRUB:
    • После установки убедитесь, что параметры GRUB правильно настроены на обеих дисках.
# Обновление конфигурации GRUB
grub2-mkconfig -o /boot/grub2/grub.cfg
  1. Проверка и тестирование:

    • Убедитесь, что после удаления любого из дисков система загружается корректно. Для этого возможно придется перезагрузить систему несколько раз, проверяя поведение при каждом сценарии отказа.
  2. Проверьте UEFI/BIOS:

    • Убедитесь, что UEFI/BIOS видит оба диска как доступные для загрузки и что они настроены на автоматический переход в рабочее состояние в случае сбоя одного из устройств.

Эти шаги должны обеспечить функционирование вашей системы в случае отказа одного из дисков и обеспечить возможность загрузки независимо от того, который из дисков остался в работе. Это настоящая сила RAID 1 — гарантия безотказной работы даже при выходе из строя одной из частей массива.

Оцените материал
Добавить комментарий

Капча загружается...