Гид по технологиям

RAID1: создание массивов и настройка загрузки

5 min read Linux Обновлено 16 Oct 2025
RAID1: создание массивов и настройка загрузки
RAID1: создание массивов и настройка загрузки

TL;DR

Кратко: создаём три массива RAID1 (/dev/md0, /dev/md1, /dev/md2), форматируем их, обновляем конфигурации mdadm, fstab и GRUB, копируем данные и устанавливаем загрузчик на оба диска. Перед перезагрузкой проверьте файлы конфигурации и наличие резервных копий.

Важно: все команды в кодовых блоках выполнять от root. Если вы используете GRUB 2 или другой загрузчик — инструкции по установке отличаются.


Введение

В этом руководстве описаны шаги по созданию RAID1 на Linux с использованием mdadm, переносу корневой и /boot-разделов на RAID, а также подготовке GRUB для загрузки с обоих дисков. Предполагается, что у вас есть два физических диска (hda и hdb) с разделами, которые будут объединены в зеркальные массивы.

Ключевые понятия:

  • RAID1: зеркалирование — данные пишутся одновременно на оба диска.
  • mdadm: утилита для управления программными RAID-массивами в Linux.
  • GRUB (legacy): загрузчик, на котором основаны примеры (menu.lst).

4 Создание наших RAID-массивов

Создаём массивы /dev/md0, /dev/md1 и /dev/md2. В примере /dev/hdb1 добавляется к /dev/md0, /dev/hdb5 к /dev/md1, /dev/hdb6 к /dev/md2. Партнёры /dev/hda1, /dev/hda5 и /dev/hda6 используются системой и пока недоступны — поэтому в командах используется placeholder missing.

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/hdb1  
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/hdb5  
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/hdb6

Проверим статус массивов:

cat /proc/mdstat

Ожидаемый вывод покажет три degraded RAID-массива ([U] или [U] — массив degraded; [UU] — OK):

[root@server1 ~]# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
md2 : active raid1 hdb6[1]  
      4642688 blocks [2/1] [_U]  
  
md1 : active raid1 hdb5[1]  
      417536 blocks [2/1] [_U]  
  
md0 : active raid1 hdb1[1]  
      176576 blocks [2/1] [_U]  
  
unused devices:   
[root@server1 ~]#

Создаём файловые системы (ext3 на /dev/md0 и /dev/md2, swap на /dev/md1):

mkfs.ext3 /dev/md0  
mkswap /dev/md1  
mkfs.ext3 /dev/md2

Далее нужно обновить /etc/mdadm.conf — он пока не содержит информации о новых массивах:

cp /etc/mdadm.conf /etc/mdadm.conf_orig  
mdadm --examine --scan >> /etc/mdadm.conf

Просмотрим содержимое файла:

cat /etc/mdadm.conf

В файле вы должны увидеть сведения о трёх (degraded) массивах:

| # mdadm configuration file # # mdadm will function properly without the use of a configuration file, # but this file is useful for keeping track of arrays and member disks. # In general, a mdadm.conf file is created, and updated, after arrays # are created. This is the opposite behavior of /etc/raidtab which is # created prior to array construction. # # # the config file takes two types of lines: # # DEVICE lines specify a list of devices of where to look for # potential member disks # # ARRAY lines specify information about how to identify arrays so # so that they can be activated # # You can have more than one device line and use wild cards. The first # example includes SCSI the first partition of SCSI disks /dev/sdb, # /dev/sdc, /dev/sdd, /dev/sdj, /dev/sdk, and /dev/sdl. The second # line looks for array slices on IDE disks. # #DEVICE /dev/sd[bcdjkl]1 #DEVICE /dev/hda1 /dev/hdb1 # # If you mount devfs on /dev, then a suitable way to list all devices is: #DEVICE /dev/discs/*/* # # # # ARRAY lines specify an array to assemble and a method of identification. # Arrays can currently be identified by using a UUID, superblock minor number, # or a listing of devices. # # super-minor is usually the minor number of the metadevice # UUID is the Universally Unique Identifier for the array # Each can be obtained using # # mdadm -D # #ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371 #ARRAY /dev/md1 super-minor=1 #ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1 # # ARRAY lines can also specify a "spare-group" for each array. mdadm --monitor # will then move a spare between arrays in a spare-group if one array has a failed # drive but no spare #ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1 #ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1 # # When used in --follow (aka --monitor) mode, mdadm needs a # mail address and/or a program. This can be given with "mailaddr" # and "program" lines to that monitoring can be started using # mdadm --follow --scan & echo $! > /var/run/mdadm # If the lines are not found, mdadm will exit quietly #MAILADDR [email protected] #PROGRAM /usr/sbin/handle-mdadm-events ARRAY /dev/md0 level=raid1 num-devices=2 UUID=6b4f013f:6fe18719:5904a9bd:70e9cee6 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=63194e2e:c656857a:3237a906:0616f49e ARRAY /dev/md2 level=raid1 num-devices=2 UUID=edec7105:62700dc0:643e9917:176563a7 |

5 Настройка системы для RAID1

Монтируем /dev/md0 и /dev/md2 (swap /dev/md1 монтировать не нужно):

mkdir /mnt/md0  
mkdir /mnt/md2
mount /dev/md0 /mnt/md0  
mount /dev/md2 /mnt/md2

Проверяем список смонтированных точек:

mount

Пример вывода, где видно смонтированные массивы:

[root@server1 ~]# mount  
/dev/hda6 on / type ext3 (rw,relatime)  
none on /proc type proc (rw)  
/dev/hda1 on /boot type ext3 (rw,relatime)  
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)  
/dev/md0 on /mnt/md0 type ext3 (rw)  
/dev/md2 on /mnt/md2 type ext3 (rw)  
[root@server1 ~]#

Редактируем /etc/fstab: замените /dev/hda1 -> /dev/md0, /dev/hda5 -> /dev/md1 и /dev/hda6 -> /dev/md2, чтобы файл выглядел так:

vi /etc/fstab

| /dev/md2 / ext3 relatime 1 1 /dev/md0 /boot ext3 relatime 1 2 /dev/cdrom /media/cdrom auto umask=0022,users,iocharset=utf8,noauto,ro,exec 0 0 /dev/fd0 /media/floppy auto umask=0022,users,iocharset=utf8,noauto,exec,flush 0 0 none /proc proc defaults 0 0 /dev/md1 swap swap defaults 0 0 |

Обновите /etc/mtab — замените /dev/hda1 -> /dev/md0 и /dev/hda6 -> /dev/md2 (строки /dev/md в конце файла можно оставить):

vi /etc/mtab

| /dev/md2 / ext3 rw,relatime 0 0 none /proc proc rw 0 0 /dev/md0 /boot ext3 rw,relatime 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 /dev/md0 /mnt/md0 ext3 rw 0 0 /dev/md2 /mnt/md2 ext3 rw 0 0 |

Следующий шаг — конфигурация GRUB (legacy). Откройте /boot/grub/menu.lst и сразу после default 0 добавьте fallback 1:

vi /boot/grub/menu.lst

| [...] default 0 fallback 1 [...] |

Это гарантирует: если первый (индекс 0) записанный в меню образ не загрузится, будет использован следующий (fallback 1).

В том же файле внизу найдите блоки с записями ядра. Скопируйте первую запись и вставьте её перед первой существующей — замените root=/dev/hda6 на root=/dev/md2 и (hd0,0) на (hd1,0). При наличии resume=/dev/hda5 замените на resume=/dev/md1:

| [...] title linux kernel (hd1,0)/vmlinuz BOOT_IMAGE=linux root=/dev/md2 resume=/dev/md1 initrd (hd1,0)/initrd.img title linux kernel (hd0,0)/vmlinuz BOOT_IMAGE=linux root=/dev/hda6 resume=/dev/hda5 initrd (hd0,0)/initrd.img |

В итоге файл может выглядеть так:

| timeout 10 color black/cyan yellow/cyan default 0 fallback 1 title linux kernel (hd1,0)/vmlinuz BOOT_IMAGE=linux root=/dev/md2 resume=/dev/md1 initrd (hd1,0)/initrd.img title linux kernel (hd0,0)/vmlinuz BOOT_IMAGE=linux root=/dev/hda6 resume=/dev/hda5 initrd (hd0,0)/initrd.img title failsafe kernel (hd0,0)/vmlinuz BOOT_IMAGE=failsafe root=/dev/hda6 failsafe initrd (hd0,0)/initrd.img |

(hd1,0) ссылается на /dev/hdb — диск, который уже входит в наши RAID-массивы. Мы перезагрузим систему, чтобы она попробовала загрузиться с (пока degraded) RAID; при неудаче сработает fallback и будет загружен /dev/hda.

Обновляем initrd (копируем старый как резерв и создаём новый):

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig  
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

Теперь копируем содержимое / и /boot на смонтированные на /mnt/md2 и /mnt/md0 массивы:

cp -dpRx / /mnt/md2
cd /boot  
cp -dpRx . /mnt/md0

6 Подготовка GRUB (часть 1)

Устанавливаем GRUB на второй диск /dev/hdb (в примере используется оболочка grub legacy):

grub

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

root (hd0,0)

Пример вывода и установка:

grub> root (hd0,0)  
 Filesystem type is ext2fs, partition type 0x83  
  
grub>
setup (hd0)
grub> setup (hd0)  
 Checking if "/boot/grub/stage1" exists... no  
 Checking if "/grub/stage1" exists... yes  
 Checking if "/grub/stage2" exists... yes  
 Checking if "/grub/e2fs_stage1_5" exists... yes  
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.  
succeeded  
 Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded  
Done.  
  
grub>

Аналогично для (hd1,0) и setup (hd1):

root (hd1,0)
setup (hd1)
quit

После выхода из оболочки GRUB перезагружаем систему и надеемся, что она корректно загрузится с RAID-массивов:

reboot

Практические примечания и рекомендации

Важно:

  • Сделайте полную бэкап-копию перед началом (особенно /boot и /).
  • Если у вас GRUB 2 (обычно файл /boot/grub/grub.cfg), команды установки и конфигурация отличаются.
  • Не удаляйте старые initrd и kernel, пока система успешно не загрузится с RAID.

Примечание: при использовании LVM поверх RAID или RAID поверх LVM порядок действий и команды будут отличаться.

Проверочный чеклист перед перезагрузкой

  • /etc/fstab обновлён и указывает на /dev/md* для корня и /boot
  • /etc/mdadm.conf содержит строки ARRAY для всех md устройств
  • /boot/initrd-<версия>.img создан и сохранён как текущий образ
  • GRUB установлен на обоих дисках (setup (hd0) и setup (hd1))
  • Данные на /mnt/md0 и /mnt/md2 соответствуют содержимому /boot и /
  • Есть доступный способ восстановить систему (LiveCD, rescue)

Краткая методика отката (rollback)

  1. Не перезагружайте систему, если обнаружите критическую ошибку — исправьте конфиги на живой системе.
  2. Если уже перезагрузили и система не загружается с RAID — загрузитесь с LiveCD/Rescue.
  3. Подключите оба диска, смонтируйте оригинальные разделы /dev/hda1 и /dev/hda6 и восстановите /etc/fstab и /boot/grub/menu.lst из резервной копии.
  4. Восстановите GRUB на основной диск: grub -> root (hd0,0) -> setup (hd0).

Дерево принятия решений при проблемах с загрузкой

flowchart TD
  A[Система не загружается после reboot] --> B{Показывается GRUB?}
  B -- Да --> C{Есть меню загрузки с md2/их записей?}
  C -- Да --> D[Выберите fallback / загрузите старый entry]
  C -- Нет --> E[Загрузитесь с LiveCD, проверьте /boot на обоих дисках]
  B -- Нет --> E
  E --> F[Проверьте /etc/fstab и /etc/mdadm.conf, восстановите GRUB]
  D --> G[Если загрузка успешна: проверьте mdstat и завершите синхронизацию]

Совместимость и отличия

  • Если используется GRUB 2, управляйте конфигурацией через update-grub и grub-install; menu.lst не используется.
  • На системах с UEFI нужно устанавливать загрузчик по-другому (shim, grub-efi).

Критерии приёмки

  • Система успешно загружается с /dev/md2 в нормальном режиме.
  • /boot доступен с /dev/md0 и файлы ядра/initrd совпадают на обоих дисках.
  • mdadm показывает массивы в статусе [UU] после синхронизации.

Короткое объявление (для команды, 100–200 слов)

Мы перевели сервер на программный RAID1. Были созданы три массива: /dev/md0 (/boot), /dev/md1 (swap) и /dev/md2 (/). После создания файловых систем и обновления /etc/mdadm.conf мы скопировали данные на новые массивы и установили загрузчик GRUB на оба диска. Перед перезагрузкой проверены /etc/fstab, initrd и конфигурация GRUB. В случае проблем подготовлен план отката: загрузка от LiveCD и восстановление GRUB/конфигураций. Просьба не удалять старые резервные образы до подтверждения успешной загрузки и синхронизации.


Резюме

  • Созданы массивы RAID1 и отформатированы.
  • Обновлены mdadm.conf, fstab, mtab и конфигурация GRUB.
  • Данные скопированы на новые md массивы, GRUB установлен на оба диска.
  • Подготовлены чеклисты и план отката на случай проблем.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Herodotus: защита от банковского трояна
Кибербезопасность

Herodotus: защита от банковского трояна

Включить новое меню «Пуск» в Windows 11
Windows

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы Excel: руководство
Excel

Панель полей сводной таблицы Excel: руководство

Включить новое меню «Пуск» в Windows 11 — инструкция
Windows

Включить новое меню «Пуск» в Windows 11 — инструкция

Как исправить дублирование Диспетчера задач в Windows 11
Windows

Как исправить дублирование Диспетчера задач в Windows 11

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram