Миграция системы на RAID1 и подготовка GRUB2
Ключевые варианты запроса
- миграция на RAID1
- настройка RAID1 mdadm
- GRUB2 и программный RAID
- установка grub-install на оба диска
- копирование / и /boot на /dev/mdX
4 Создание RAID-массивов
Теперь создадим RAID-массивы /dev/md0, /dev/md1 и /dev/md2. /dev/sdb1 будет добавлен в /dev/md0, /dev/sdb2 — в /dev/md1, /dev/sdb3 — в /dev/md2. Разделы /dev/sda1, /dev/sda2 и /dev/sda3 сейчас нельзя добавить (система загружена с них), поэтому в командах используется placeholder missing.
Выполните три команды (каждая в своём блоке):
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3При выполнении каждой команды вы можете увидеть сообщение с предупреждением о метаданных в начале устройства; просто подтвердите (нажмите y) и продолжите. Пример вывода:
root@server1:~# mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/sdb3
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? <-- y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started.
root@server1:~#Проверьте статус массивов командой:
cat /proc/mdstatВы должны увидеть три деградированных массива; в статусе [U] или [U] означает, что массив деградирован (отсутствует диск), а [UU] — массив в порядке. Пример вывода:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 sdb3[1]
4241396 blocks super 1.2 [2/1] [_U]
md1 : active raid1 sdb2[1]
499700 blocks super 1.2 [2/1] [_U]
md0 : active raid1 sdb1[1]
498676 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~# Далее создаём файловые системы: ext4 на /dev/md0 и /dev/md2, а /dev/md1 — как swap:
mkfs.ext4 /dev/md0
mkswap /dev/md1
mkfs.ext4 /dev/md2Важно: не меняйте типы файловых систем без понимания требований вашей системы — пример предназначен для Debian-подобных дистрибутивов.
Обновляем конфигурацию mdadm
Сохраните оригинал и добавьте текущие массивы в конфигурацию:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.confПросмотрите файл:
cat /etc/mdadm/mdadm.confВнизу файла вы увидите автоматически сгенерированные записи для массивов (пример):
| # mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default, scan all partitions (/proc/partitions) for MD superblocks. # alternatively, specify devices to scan, using wildcards if desired. DEVICE partitions # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST |
(Этот блок — пример содержимого; реальные UUID и таймстемпы будут отличаться.)
5 Подготовка системы к использованию RAID1
Смонтируем только файловые системы (swap монтировать не нужно):
mkdir /mnt/md0
mkdir /mnt/md2
mount /dev/md0 /mnt/md0
mount /dev/md2 /mnt/md2Проверьте вывод mount — вы должны увидеть /dev/md0 и /dev/md2 в списке:
mountПример вывода (сокращённый):
root@server1:~# mount
/dev/sda3 on / type ext4 (rw,errors=remount-ro)
...
/dev/sda1 on /boot type ext4 (rw)
/dev/md0 on /mnt/md0 type ext4 (rw)
/dev/md2 on /mnt/md2 type ext4 (rw)
root@server1:~#Редактируем /etc/fstab
Откройте /etc/fstab и закомментируйте старые UUID для /, /boot и swap; добавьте строки с устройствами /dev/md2 для /, /dev/md0 для /boot и /dev/md1 для swap.
vi /etc/fstabПример ожидаемого содержимого:
| # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # |
Примечание: использование /dev/mdX вместо UUID упрощает загрузку при переходе на RAID1, так как GRUB будет ссылаться на md-устройство.
Обновление /etc/mtab
Замените упоминания /dev/sda1 и /dev/sda3 на /dev/md0 и /dev/md2 в /etc/mtab, чтобы текущая таблица монтирования отражала новые устройства:
vi /etc/mtabНапример:
| /dev/md2 / ext4 rw,errors=remount-ro 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 ... /dev/md0 /boot ext4 rw 0 0 /dev/md0 /mnt/md0 ext4 rw 0 0 /dev/md2 /mnt/md2 ext4 rw 0 0 |
Настройка GRUB2 для загрузки с RAID1
Создайте кастомный скрипт для GRUB, чтобы добавить stanza, указывающую на RAID /boot и корень системы.
cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setupСодержимое примера (не изменяйте строки с версиями ядра без проверки):
| #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os { insmod raid insmod mdraid insmod part_msdos insmod ext2 set root='(md/0)' echo 'Loading Linux 2.6.32-5-amd64 ...' linux /vmlinuz-2.6.32-5-amd64 root=/dev/md2 ro quiet echo 'Loading initial ramdisk ...' initrd /initrd.img-2.6.32-5-amd64 } |
Убедитесь, что в stanza указана корректная версия ядра (linux и initrd) — её можно узнать командой:
uname -rКлючевая строка — set root=’(md/0)’ — она указывает GRUB искать /boot на RAID-массиве /dev/md0. Это важно: если один из физических дисков выйдет из строя, GRUB всё ещё сможет загрузиться с другого.
Поскольку при миграции вы не используете UUID в параметрах загрузки, откройте /etc/default/grub и отключите передачу root=UUID:
vi /etc/default/grubНайдите и раскомментируйте:
GRUB_DISABLE_LINUX_UUID=trueЗатем запишите конфигурацию GRUB:
update-grubИ обновите initramfs, чтобы он включал поддержку md и нужные модули:
update-initramfs -uКопирование данных и установка загрузчика
Скопируйте содержимое текущего корня и /boot на новые md-устройства (смонтированные в /mnt/md2 и /mnt/md0):
cp -dpRx / /mnt/md2
cd /boot
cp -dpRx . /mnt/md0Флаги cp: -d сохраняет символьные ссылки, -p сохраняет атрибуты, -R рекурсивно, -x не выходит за пределы текущей файловой системы.
6 Подготовка GRUB2 (шаг 1): установка на оба диска
Установите GRUB2 в MBR/EFI (в зависимости от вашей системы) обоих дисков, чтобы при выходе из строя одного диска система могла загрузиться с другого:
grub-install /dev/sda
grub-install /dev/sdbПосле этого перезагрузите систему и проверьте, что она загружается с RAID-массивов:
rebootВажно: перед перезагрузкой убедитесь, что все шаги выполнены и что в /boot присутствуют файлы vmlinuz и initrd для используемого ядра.
Контрольный чеклист администратора (перед перезагрузкой)
- Сделана резервная копия важных данных вне серверного диска.
- Созданы md-массивы и созданы файловые системы.
- /etc/mdadm/mdadm.conf обновлён и содержит записи ARRAY.
- /etc/fstab заменён UUID на /dev/mdX для /, /boot и swap.
- /etc/mtab обновлён (или перезагружён и проверен после монтирования).
- /etc/grub.d/09_swraid1_setup проверен — корректный root=’(md/0)’ и версии ядра.
- GRUB_DISABLE_LINUX_UUID=true включён в /etc/default/grub.
- Выполнен update-grub и update-initramfs -u.
- Копирование / и /boot завершено (cp -dpRx завершился без ошибок).
- grub-install выполнен для обоих дисков.
Что может пойти не так — типичные проблемы и решения
Проблема: система не загружается после перезагрузки.
- Проверить: правильно ли прописан set root=’(md/0)’ и существуют ли /vmlinuz- и initrd.img- в /boot (на /dev/md0).
- Решение: загрузитесь с live-образа или rescue-консоли, смонтируйте /dev/md0 и /dev/md2 и проверьте файлы; переустановите grub-install на оба диска.
Проблема: массивы не собираются при старте.
- Проверить: наличие записей ARRAY в /etc/mdadm/mdadm.conf; корректность mdadm –examine –scan вывода.
- Решение: обновите initramfs; в initramfs должны быть модули md и конфигурация mdadm.
Проблема: GRUB не видит md/0 как устройство для загрузки.
- Проверить: поддерживает ли версия GRUB модуль mdraid/raid; убедитесь, что в конфиге используются insmod raid и insmod mdraid.
- Решение: собрать initramfs с поддержкой md, обновить пакеты grub и mdadm при необходимости.
Критерии приёмки
- Система успешно загружается после перезагрузки с отключением одного из дисков.
- В /proc/mdstat массивы показывают статус [U_] или [_U] при симуляции отказа и затем [UU] при наличии двух дисков.
- /boot и / корневой раздел монтируются с /dev/md0 и /dev/md2 соответственно.
- При старте службы mdadm обнаруживает и собирает массивы автоматически.
Мини-методология (шаги высокого уровня)
- Подготовка: резервные копии и план отката.
- Создание md-массивов с placeholder missing для текущих дисков.
- Форматирование md-устройств и монтирование во временные точки.
- Обновление mdadm.conf и fstab, правка mtab.
- Подготовка GRUB (кастомный скрипт) и отключение UUID-параметра.
- Обновление initramfs, копирование данных и установка GRUB на оба диска.
- Тестирование и валидация.
Роли и задачи (краткий чеклист)
- Системный администратор:
- Создаёт и форматирует md-массивы, редактирует fstab и mdadm.conf, выполняет update-grub и update-initramfs.
- Операционный инженер (On-call):
- Тестирует восстановление при отказе диска; выполняет тесты загрузки и мониторинга mdarray.
- Руководитель по безопасности:
- Подтверждает, что доступ к конфигурационным файлам ограничен и выполнены политики резервного копирования.
Короткая галерея крайних случаев
- Если у вас UEFI + GPT, grub-install должен устанавливать загрузчик в EFI System Partition (ESP) на обоих дисках; работа с EFI требует дополнительных шагов по синхронизации ESP на обоих дисках.
- Если /boot слишком велик для встроенного в GRUB чтения (редкий случай), рассмотрите отдельный небольшой /boot без LVM/ шифрования.
Глоссарий (1 строка)
- mdadm — утилита управления программными RAID-массивами в Linux; GRUB2 — загрузчик второй версии, поддерживает модули для md-устройств.
Важно: прежде чем вносить изменения в продакшн, протестируйте процедуру на тестовом сервере и подготовьте план отката.
Конец статьи.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента