Подготовка GRUB2 и диска /dev/sda для RAID1 с LVM
Контекст и краткий план
Это руководство следует использовать, когда у вас уже настроен LVM поверх программного RAID и требуется обеспечить загрузку с зеркального массива. Основная задача — убедиться, что загрузчик установлен на оба диска, что разделы имеют правильный тип, и что конфигурация mdadm отражает текущее состояние массивов.
Что будет сделано
- Установка GRUB2 на /dev/sda и /dev/sdb
- Проверка наличия /dev/md0 и состояния массивов
- Изменение типа раздела на /dev/sda1
- Добавление /dev/sda1 в /dev/md0
- Обновление /etc/mdadm/mdadm.conf, удаление устаревшего скрипта GRUB и обновление initramfs
- Перезагрузка и проверка загрузки
Кому полезно
- Сисадминам, поддерживающим серверы с LVM на RAID1
- Инженерам, переносящим загрузку на софтверный RAID
Важное: перед началом сделайте резервную копию важных данных и снимок конфигурации разделов и mdadm
6 Подготовка GRUB2
Сначала убедитесь, что загрузчик GRUB2 установлен на обоих физических дисках. Выполните эти команды с правами root:
grub-install /dev/sda
grub-install /dev/sdb
Затем перезагрузите систему и проверьте, загружается ли она корректно с массивов RAID:
reboot
Если система успешно загрузилась, переходите к настройке разделов и mdadm. Если нет, откатитесь к бэкапу загрузчика или используйте live-среду для восстановления.
7 Подготовка /dev/sda
После успешной загрузки проверьте наличие /dev/md0 в выводе команды df. Пример ожидаемого вывода:
df -h
root@server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 722M 3.6G 17% /
tmpfs 249M 0 249M 0% /lib/init/rw
udev 244M 128K 244M 1% /dev
tmpfs 249M 0 249M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
root@server1:~#
Проверьте состояние RAID массивов через /proc/mdstat
cat /proc/mdstat
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Выше видно, что md0 в текущий момент имеет только один активный член. Далее мы сделаем sda1 частью md0 и дождёмся синхронизации.
Проверьте физические тома, группу томов и логические тома LVM для подтверждения состояния
pvdisplay
root@server1:~# pvdisplay
— Physical volume —
PV Name /dev/md1
VG Name server1
PV Size 4.76 GiB / not usable 1012.00 KiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1218
Free PE 0
Allocated PE 1218
PV UUID W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS
root@server1:~#
vgdisplay
root@server1:~# vgdisplay
— Volume group —
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.76 GiB
PE Size 4.00 MiB
Total PE 1218
Alloc PE / Size 1218 / 4.76 GiB
Free PE / Size 0 / 0
VG UUID m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW
root@server1:~#
lvdisplay
root@server1:~# lvdisplay
— Logical volume —
LV Name /dev/server1/root
VG Name server1
LV UUID 8SNLPE-gHqA-a2LX-BO9o-0QQO-DV2z-3WvTYe
LV Write Access read/write
LV Status available
LV Size 4.51 GiB
Current LE 1155
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
— Logical volume —
LV Name /dev/server1/swap_1
VG Name server1
LV UUID kYaKtb-vkkV-TDDE-me1R-nnER-dzN8-BcVTwz
LV Write Access read/write
LV Status available
LV Size 252.00 MiB
Current LE 63
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
root@server1:~#
Изменение типа раздела на /dev/sda1
Теперь поменяем тип раздела /dev/sda1 на Linux raid autodetect. Будьте внимательны: команда fdisk изменяет таблицу разделов.
fdisk /dev/sda
root@server1:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).
Command (m for help): <– t
Partition number (1-5): <– 1
Hex code (type L to list codes): <– fd
Changed system type of partition 1 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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#
После этого ядро может продолжать использовать старую таблицу до следующей перезагрузки или после запуска partprobe
Добавление /dev/sda1 в массив /dev/md0
Добавляем раздел в зеркальный массив:
mdadm --add /dev/md0 /dev/sda1
Проверяем статус синхронизации:
cat /proc/mdstat
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[2] sdb1[1]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
Если статус показывает [UU], синхронизация завершена и массив полностью зеркален. Если вместо этого видна прогрессирующая синхронизация, подождите завершения операции и повторно проверьте вывод через некоторое время.
Обновление конфигурации mdadm
Создайте копию конфигурации и добавьте текущие массивы в файл конфигурации mdadm:
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Пример содержимого /etc/mdadm/mdadm.conf
cat /etc/mdadm/mdadm.conf
DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST
MAILADDR root
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1
Обновление GRUB2 и initramfs
Удаляем устаревший скрипт конфигурации GRUB, затем обновляем конфигурацию и initramfs
rm -f /etc/grub.d/09_swraid1_setup
update-grub
update-initramfs -u
Проверьте /boot/grub/grub.cfg. В разделе ### BEGIN /etc/grub.d/10_linux ### записи menuentry должны указывать запуск с /dev/md0 вместо (hd0) или (hd1). Поэтому скрипт 09_swraid1_setup больше не нужен.
Убедитесь снова, что GRUB установлен на оба диска
grub-install /dev/sda
grub-install /dev/sdb
Перезагрузите систему и проверьте загрузку
reboot
Если после перезагрузки система загружается без проблем, задача выполнена успешно.
Пояснение основных команд и выводов
- mdadm –add: добавляет устройство в массив. После добавления начнется синхронизация.
- cat /proc/mdstat: показывает состояние RAID, наличие членов и прогресс синхронизации.
- pvdisplay/vgdisplay/lvdisplay: подтверждают состояние LVM, что важно для уверенности, что данные доступны.
- fdisk t и код fd: меняют тип раздела на Linux raid autodetect, что упрощает автоматическое сканирование ядром и mdadm.
- update-initramfs: обновляет образ initramfs, чтобы включить поддержку md и LVM на этапе ранней загрузки.
Типичные ошибки и способы их устранения
- Ядро продолжает видеть старую таблицу разделов
- Запустите partprobe /dev/sda или перезагрузитесь. Если устройство занято, проверьте процессы, блокирующие диск.
- После добавления диск не синхронизируется
- Проверьте dmesg и /var/log/syslog на ошибки. Возможно, существует аппаратная проблема с диском.
- GRUB не устанавливается на второй диск
- Убедитесь, что диск доступен и не имеет аппаратных проблем. Используйте live-среду и установите grub с chroot, если нужно.
- Система не загружается после перезагрузки
- Загрузитесь с live-образа, проверьте /boot и UUID в grub.cfg, восстановите initramfs и переустановите GRUB на оба диска.
Критерии приёмки
- В выводе cat /proc/mdstat массив /dev/md0 должен иметь статус [UU]
- В /boot/grub/grub.cfg записи menuentry должны ссылаться на /dev/md0
- GRUB установлен успешно на /dev/sda и /dev/sdb без ошибок
- После перезагрузки система загружается без вмешательства и LVM тома доступны
План отката и экстренного восстановления
- Если в процессе что-то пошло не так, немедленно открутите внесённые изменения в файл mdadm.conf, восстановив резервную копию
- Если загрузка нарушена, загрузитесь с rescue-образа, смонтируйте корневой том и выполните chroot
- В chroot выполните update-initramfs и grub-install на рабочий диск
- Если один из дисков физически неисправен, извлеките его из массива и восстановите из бэкапа на новый диск
Чеклист ролей
- Инженер по хранению данных
- Проверил состояние RAID и LVM, подтвердил целостность данных
- Системный администратор
- Установил GRUB на оба диска и обновил initramfs
- Оператор поддержки
- Отслеживал лог ошибок и уведомления mdadm
Тесты и критерии приёмки
- Тест 1: Отключить /dev/sda физически и загрузиться. Результат: система загружается с /dev/sdb.
- Тест 2: Подключить /dev/sda и убедиться, что массив автоматически восстанавливается и достигает статуса [UU].
- Тест 3: Перезагрузка с обоими дисками присутствующими. Результат: успешная загрузка и доступность LVM томов.
Частые вопросы
Q: Нужно ли удалять /etc/grub.d/09_swraid1_setup
A: В данном сценарии да, потому что обновлённый скрипт 10_linux будет генерировать корректные записи, указывающие на /dev/md0. После проверки grub.cfg файл можно удалить.
Q: Что делать, если fdisk сообщает, что устройство занято
A: Выполните partprobe или перезагрузку, либо убедитесь, что разделы не смонтированы и не используются swap или LVM на этом устройстве.
Краткое резюме
Вы установили GRUB2 на оба физических диска, изменили тип раздела на /dev/sda1, добавили его в массив /dev/md0, обновили конфигурацию mdadm и initramfs. После перезагрузки система должна загружаться с зеркального массива RAID1.
Ключевые команды на одном листе
grub-install /dev/sda
grub-install /dev/sdb
reboot
fdisk /dev/sda
mdadm --add /dev/md0 /dev/sda1
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
rm -f /etc/grub.d/09_swraid1_setup
update-grub
update-initramfs -u
Важно: перед выполнением операций создайте резервные копии и убедитесь в наличии плана восстановления