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

Настройка /dev/sda и GRUB для RAID1 на CentOS 5.3

8 min read Linux Обновлено 10 Oct 2025
RAID1 на CentOS: подготовка /dev/sda и GRUB
RAID1 на CentOS: подготовка /dev/sda и GRUB

Короткое руководство по добавлению диска /dev/sda в уже работающие массивы RAID1 на CentOS 5.3 и по обновлению GRUB. Проверяем текущие md-устройства, меняем типы разделов на linux raid autodetect, добавляем разделы в md-массивы, ждём синхронизации, обновляем /etc/mdadm.conf и пересобираем initrd, затем правим запись GRUB чтобы система могла загрузиться с резервного диска.

Предисловие и требования

Коротко: этот материал предполагает, что у вас уже есть рабочая система с mdadm и RAID1, и что новый диск /dev/sda физически подключён. Перед началом сохраните резервную копию важных данных и убедитесь, что у вас есть доступ к консоли/консольному терминалу для перезагрузки.

Что должно быть готово:

  • Доступ под root или через sudo.
  • mdadm установлен и массивы уже собраны на /dev/sdb.
  • Новый диск /dev/sda размечен (или вы собираетесь поменять тип разделов через fdisk).
  • Понимание рисков при изменении таблицы разделов (потребуется перезагрузка, если kernel не сможет перечитать таблицу).

Важно: операции с разделами и RAID могут привести к потере данных при ошибочных командах. Делайте снимок (snapshot) или резервную копию и тестируйте процедуру на стенде перед продакшеном.

7 Подготовка /dev/sda

Сначала проверьте, что у вас видны RAID-устройства и монтирования:

df -h

Переклад вывода в примере (оставляем оригинальные строки):

[root@server1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md2 9.2G 1.1G 7.7G 12% /
/dev/md0 190M 14M 167M 8% /boot
tmpfs 252M 0 252M 0% /dev/shm
[root@server1 ~]#

Вы также должны проверить состояние md-устройств:

cat /proc/mdstat

Ожидаемый вывод в примере:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1]
200704 blocks [2/1] [_U]

md1 : active raid1 sdb2[1]
522048 blocks [2/1] [_U]

md2 : active raid1 sdb3[1]
9759360 blocks [2/1] [_U]

unused devices:
[root@server1 ~]#

Пояснение: флаг [U] означает, что массив рассчитан на 2 устройства, но одном из них отсутствует (U — присутствует, — отсутствует). В примере /dev/sdb — единственный активный диск; /dev/sda ещё не добавлен.

Теперь изменим тип разделов на /dev/sda на «Linux raid autodetect». Это делается в fdisk:

fdisk /dev/sda

Пример интерактивной сессии (сохраняем вывод как есть для наглядности):

[root@server1 ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:

  1. software that runs at boot time (e.g., old versions of LILO)
  2. booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): <– t
Partition number (1-4): <– 1
Hex code (type L to list codes): <– fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): <– t
Partition number (1-4): <– 2
Hex code (type L to list codes): <– fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <– t
Partition number (1-4): <– 3
Hex code (type L to list codes): <– fd
Changed system type of partition 3 to fd (Linux raid autodetect)

Command (m for help): <– w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#

Примечание: если kernel не может перечитать таблицу разделов (ошибка 16), то новые типы вступят в силу после перезагрузки. Это ожидаемое поведение при работе с запущенной системой.

После того как типы разделов установлены, добавляем разделы /dev/sda1, /dev/sda2 и /dev/sda3 в соответствующие RAID-массивы:

mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2
mdadm --add /dev/md2 /dev/sda3

Проверяем процесс синхронизации:

cat /proc/mdstat

В процессе синхронизации вы увидите строку с прогрессом, например:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]

md2 : active raid1 sda3[2] sdb3[1]
9759360 blocks [2/1] [_U]
[====>…………….] recovery = 22.8% (2232576/9759360) finish=2.4min speed=50816K/sec

unused devices:
[root@server1 ~]#

Подсказка: запустить постоянный мониторинг можно так:

watch cat /proc/mdstat

Чтобы выйти из watch — нажмите CTRL+C.

Дождитесь полного завершения синхронизации. Итоговый вывод должен выглядеть так:

[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
200704 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
522048 blocks [2/2] [UU]

md2 : active raid1 sda3[0] sdb3[1]
9759360 blocks [2/2] [UU]

unused devices:
[root@server1 ~]#

После того как массивы синхронизированы, обновите конфигурацию mdadm:

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

Пример /etc/mdadm.conf, полученный при сканировании:

cat /etc/mdadm.conf

| ARRAY /dev/md0 level=raid1 num-devices=2 UUID=78d582f0:940fabb5:f1c1092a:04a55452 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=8db8f7e1:f2a64674:d22afece:4a539aa7 ARRAY /dev/md2 level=raid1 num-devices=2 UUID=1baf282d:17c58efd:a8de6947:b0af9792 |

Сохраните этот файл и переходите к настройке загрузчика.

8 Подготовка GRUB

Нужно убедиться, что /boot/grub/menu.lst содержит записи для загрузки с обоих дисков — с /dev/sdb (hd1) и с /dev/sda (hd0). Типичный подход — скопировать stanza ядра, заменить hd1 на hd0, и закомментировать все лишние записи, чтобы исключить неоднозначность.

Откройте файл:

vi /boot/grub/menu.lst

Пример содержимого файла (сохранённый для наглядности):

| # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda3 # initrd /initrd-version.img #boot=/dev/sda default=0 fallback=1 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-128.el5) root (hd1,0) kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2 initrd /initrd-2.6.18-128.el5.img title CentOS (2.6.18-128.el5) root (hd0,0) kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2 initrd /initrd-2.6.18-128.el5.img #title CentOS (2.6.18-128.el5) # root (hd0,0) # kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/ # initrd /initrd-2.6.18-128.el5.img |

Далее обновим initrd, чтобы в образ попали драйвера md/RAID и новая конфигурация:

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

После этого перезагрузите систему:

reboot

Если всё сделано корректно, система загрузится с любого из дисков — даже при отказе /dev/sdb.

Контрольные команды и критерии приёмки

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

  • Все массивы md отображаются в /proc/mdstat и показывают [UU] для всех устройств.
  • /etc/mdadm.conf содержит записи для всех md-массивов.
  • GRUB имеет запись загрузки для hd0 и hd1, и initrd обновлён.
  • Система успешно загружается после перезагрузки с использованием одного и другого диска (при тестовом отключении).

Команды для проверки:

  • Просмотр md-статуса: cat /proc/mdstat
  • Проверка монтирований: df -h
  • Сканирование mdadm: mdadm –examine –scan
  • Логи ядра (если нужны подсказки): dmesg | grep md

Практическая шпаргалка (cheat sheet)

  • Добавление раздела в массив: mdadm –add /dev/mdX /dev/sdY1
  • Показать прогресс: watch cat /proc/mdstat
  • Пересоздать /etc/mdadm.conf: mdadm –examine –scan > /etc/mdadm.conf
  • Обновить initrd: mkinitrd /boot/initrd-uname -r.img uname -r

Важно: используйте реальные имена устройств и номер ядра из uname -r.

Рольовые чеклисты

Администратор/оператор:

  • Снял резервную копию важных данных.
  • Проверил наличие /dev/sda и разделов.
  • Изменил типы разделов на fd через fdisk.
  • Добавил разделы в md-массивы.
  • Убедился в синхронизации массивов.
  • Обновил /etc/mdadm.conf и initrd.
  • Обновил и проверил записи GRUB.

SRE / инженер по доступности:

  • Спланировал окно работ.
  • Прогнал процедуру на тестовом стенде.
  • Подготовил план отката.
  • Проверил автоматический мониторинг mdadm и алерты.

Что делать, когда что-то идёт не так (краткий разбор)

Сценарий: массив не синхронизируется

  • Проверьте логи dmesg и /var/log/messages для ошибок I/O.
  • Убедитесь, что раздел действительно добавлен: mdadm –detail /dev/mdX
  • Если устройство помечено как failed, можно попытаться собрать массив вручную или заменить диск.

Сценарий: kernel не перечитал таблицу разделов (ошибка 16)

  • Это ожидаемо при изменении таблицы на запущенной системе; изменения вступят в силу после reboot.
  • Если нельзя перезагружать, можно попробовать использовать partprobe или kpartx, но это зависит от конкретной ситуации.

Сценарий: система не загружается после изменения GRUB

  • Загрузитесь с rescue-образа или live-нод. Проверьте /boot и /boot/grub/menu.lst.
  • Восстановите initrd из сохранённой копии initrd-uname -r.img_orig2 если нужно.
  • Проверьте правильность root= в kernel stanza (должен ссылаться на /dev/md2 или на UUID).

План отката (rollback)

  1. Если вы сохранили initrd-uname -r.img_orig2 — восстановите его: mv /boot/initrd-uname -r.img_orig2 /boot/initrd-uname -r.img
  2. Восстановите предыдущую версию /boot/grub/menu.lst из резервной копии.
  3. Перезагрузите систему и проверьте загрузку.
  4. Если были добавлены разделы в md, можно их удалить mdadm –remove /dev/mdX /dev/sdY1 (только после проверки, что это безопасно).

Риск-матрица и смягчение рисков

  • Риск: повреждение таблицы разделов — Смягчение: резервная копия и возможность загрузки с rescue.
  • Риск: массив не синхронизируется из-за аппаратной ошибки — Смягчение: проверка SMART, замена диска.
  • Риск: GRUB неправильно настроен — Смягчение: сохранение оригинальных файлов /boot, тестовый рестарт и доступ к консоли.

Дополнительные подходы и альтернативы

  • Можно использовать LVM поверх md для гибкого управления томами, но это добавляет уровень абстракции.
  • В новых дистрибутивах вместо старого GRUB legacy используют grub2 — синтаксис и место конфигурации отличаются.
  • Для автоматизации на множестве серверов применяют Ansible/chef/puppet-скрипты для внесения изменений и проверки состояния mdadm.

Короткий словарь терминов

  • mdadm — утилита для управления Linux Software RAID.
  • md-устройство (md0, md1, md2) — собранный программный RAID.
  • initrd — initial ramdisk, образ, загружаемый ядром для инициализации и монтирования корневой FS.
  • fd (Linux raid autodetect) — код типа раздела для автоматического обнаружения RAID.

Итог

Вы добавили /dev/sda в существующие массивы RAID1, дождались синхронизации, обновили /etc/mdadm.conf, подготовили GRUB и пересобрали initrd. После перезагрузки система должна корректно загружаться с обоих дисков.

Коротко — проверьте /proc/mdstat, /etc/mdadm.conf и запись GRUB, сделайте перезагрузку и симулируйте отказ одного из дисков, чтобы убедиться в отказоустойчивости.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Исправить Snipping Tool в Windows 11
Windows

Исправить Snipping Tool в Windows 11

Удалить фото с iPhone, но не с iCloud
Инструкции

Удалить фото с iPhone, но не с iCloud

Интеграция SFTP в Проводник Windows
Windows

Интеграция SFTP в Проводник Windows

Перенос фото из Facebook в Google+ через Move2Picasa
Социальные сети

Перенос фото из Facebook в Google+ через Move2Picasa

Скачать фильмы и сериалы Netflix офлайн
Streaming

Скачать фильмы и сериалы Netflix офлайн

RAID1 на CentOS: подготовка /dev/sda и GRUB
Linux

RAID1 на CentOS: подготовка /dev/sda и GRUB