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

Как настроить программный RAID1 на работающей системе включая настройку GRUB2 для Debian Squeeze

• 10 min read • Администрирование • Обновлено 22 Nov 2025
RAID1 на Debian Squeeze: пошаговая инструкция
RAID1 на Debian Squeeze: пошаговая инструкция

Кратко: этот пошаговый гид показывает, как на уже работающей Debian Squeeze-системе создать программный RAID1 из двух дисков, скопировать на второй диск текущие разделы, подготовить mdadm и настроить GRUB2 так, чтобы система могла загрузиться при выходе из строя любого диска. Выполняйте команды под root, делайте резервную копию важных данных перед началом.

Важно: руководство демонстративно и не даёт стопроцентной гарантии для всех конфигураций. Применяйте в тестовой среде перед продом.

О чём эта инструкция

В этой инструкции показан процесс создания программного RAID1 на уже работающем Debian Squeeze-сервере с двумя одинаковыми по размеру дисками /dev/sda и /dev/sdb. /dev/sdb изначально свободен, а /dev/sda содержит загрузочный и корневой разделы. В конце мы хотим получить зеркалирование (/boot, swap и /) с помощью mdadm и корректную настройку GRUB2, чтобы система загружалась при отказе любого из дисков.

Ключевые понятия в одной строке:

  • RAID1: зеркалирование дисков, одинаковые данные на двух и более дисках.
  • mdadm: утилита для управления программными RAID-массивами Linux.
  • GRUB2: загрузчик, который нужно установить на оба диска, чтобы обеспечить загрузку при отказе одного из них.

Предварительные замечания

В примере используется система с двумя дисками одинакового размера:

  • /dev/sda — текущий диск с данными;
  • /dev/sdb — пустой диск того же размера.

Исходная разбивка на /dev/sda:

  • /dev/sda1: /boot, ext4;
  • /dev/sda2: swap;
  • /dev/sda3: /, ext4.

Целевое состояние:

  • /dev/md0 = /dev/sda1 + /dev/sdb1: /boot, ext4;
  • /dev/md1 = /dev/sda2 + /dev/sdb2: swap;
  • /dev/md2 = /dev/sda3 + /dev/sdb3: /, ext4.

NB: Перед началом сделайте резервную копию важных данных и снимок конфигурации (например, lsblk, fdisk -l, /etc/fstab, /etc/mdadm/mdadm.conf).

Текущая ситуация (пример вывода на сервере автора)

df -h

root@server1:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             4.0G  712M  3.1G  19% /
tmpfs                 249M     0  249M   0% /lib/init/rw
udev                  244M  100K  244M   1% /dev
tmpfs                 249M     0  249M   0% /dev/shm
/dev/sda1             472M   25M  423M   6% /boot
root@server1:~#

fdisk -l

root@server1:~# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000b0ecb

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          63      498688   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              63         125      499712   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             125         653     4242432   83  Linux
Partition 3 does not end on cylinder boundary.

Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn’t contain a valid partition table
root@server1:~#

Установка mdadm

Для управления программными RAID-массивами используйте mdadm. Установите пакеты:

apt-get install initramfs-tools mdadm

Во время установки утилита спросит, какие массивы нужны для корневой файловой системы. Обычно ответить следует «all» или подтвердить создание массивов для root. Если вы не уверены, оставьте настройки по умолчанию и впоследствии отредактируйте /etc/mdadm/mdadm.conf вручную.

Чтобы не перезагружать систему, загрузим нужные модули ядра прямо сейчас:

modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

Проверьте состояние md-устройств:

cat /proc/mdstat

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

root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
unused devices:
root@server1:~#

Подготовка /dev/sdb

План действий:

  1. Скопировать таблицу разделов с /dev/sda на /dev/sdb.
  2. Изменить тип разделов на md (Linux raid autodetect).
  3. Убедиться, что на /dev/sdb нет старых суперблоков md.
  4. Создать RAID-массивы и синхронизировать данные.

Сначала скопируем таблицу разделов:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

Пример вывода команды при успешном выполнении в исходном окружении автора:

root@server1:~# sfdisk -d /dev/sda | sfdisk –force /dev/sdb
Checking that no-one is using this disk right now …
OK

Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *      2048    999423     997376  83  Linux
/dev/sdb2        999424   1998847     999424  82  Linux swap / Solaris
/dev/sdb3       1998848  10483711    8484864  83  Linux
/dev/sdb4             0         -          0   0  Empty
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table

Re-reading the partition table …

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
root@server1:~#

После этого команда fdisk -l должна показать одинаковую схему разделов на обоих дисках:

root@server1:~# fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
…
Disk /dev/sdb: 5368 MB, 5368709120 bytes
…
root@server1:~#

Далее нужно сменить тип разделов на /dev/sdb на Linux raid autodetect (код fd). Для этого используйте fdisk:

fdisk /dev/sdb

В интерактивной сессии выберите команду t, укажите номер раздела и код fd. Повторите для всех трёх разделов. Пример интерактивной сессии приводится ниже в исходных данных.

После изменения типа разделов запишите таблицу командой w.

Чтобы убедиться, что на новых разделах нет старых дампов RAID, обнулите суперблоки md (если они есть). Эти команды безопасны: если суперблока нет, mdadm выдаст предупреждение и выйдет.

mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3

Пример сообщения при отсутствии суперблока (нормально):

root@server1:~# mdadm –zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
root@server1:~#

Создание RAID-массивов и копирование данных

Общий подход: создать массивы как «degraded» — с одним устройством, затем скопировать данные с /dev/sda на /dev/sdb, добавить второй диск в массив и дождаться синхронизации.

  1. Создаём RAID для /boot (md0) из /dev/sda1 и /dev/sdb1, но пока добавляем только /dev/sdb1 и отмечаем массив как degraded, или наоборот — создаём массив из /dev/sdb1 и затем добавляем /dev/sda1. Чтобы избежать удаления данных, безопаснее создать массив, добавив в него пустой раздел и затем синхронизировать, но чаще делают наоборот: создать массив с /dev/sdb1 и затем скопировать /boot туда. Ниже показан один из безопасных сценариев — копирование разделов, а затем создание массивов.

Вариант A (копирование raw-партий):

  • Создать временный образ раздела /dev/sdb1, смонтировать его, скопировать файлы из /boot.
  • То же самое для корня — использовать rsync или tar для копирования содержимого.

Пример для /boot:

mkfs.ext4 /dev/sdb1
mkdir -p /mnt/boot2
mount /dev/sdb1 /mnt/boot2
rsync -aHAX --numeric-ids /boot/ /mnt/boot2/

Убедитесь, что файлы скопированы, затем измените /etc/fstab временно или запишите в mdadm конфигурацию и создавайте md-массивы.

  1. Создание массивов через mdadm (пример создания массивов на основе sdx1 etc.). Если вы предпочитаете чистое mdadm-подход, можно создать массивы degraded, добавив один диск, и потом копировать туда данные из старого раздела. Например, создайте md0 на /dev/sdb1 как одноэлементный массив и скопируйте туда /boot.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt/boot2
rsync -aHAX --numeric-ids /boot/ /mnt/boot2/

После копирования — проверьте наличие файлов в /mnt/boot2. Если всё корректно, размонтируйте и добавьте второй компонент в массив:

umount /mnt/boot2
mdadm --add /dev/md0 /dev/sda1

Для swap создайте md-массив уровня 1 и добавьте swap через mkswap:

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
mkswap /dev/md1
swapon /dev/md1  # или добавьте в /etc/fstab
mdadm --add /dev/md1 /dev/sda2

Для корня используйте аналогичный сценарий, но при копировании корневой файловой системы применяйте rsync с сохранением прав и метаданных. Обычно создают initramfs с поддержкой md и обновляют GRUB до загрузки с md.

Пример копирования корня на временно созданный md /dev/md2:

mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing
mkfs.ext4 /dev/md2
mount /dev/md2 /mnt/newroot
rsync -aHAX --numeric-ids --exclude='/proc/*' --exclude='/sys/*' --exclude='/dev/*' / /mnt/newroot/
# После этого нужно создать /dev, /proc, /sys и обновить fstab в /mnt/newroot

После того как все данные скопированы и массивы образованы, добавьте недостающие компоненты (в примере /dev/sda1, /dev/sda2, /dev/sda3) к соответствующим md-дискам и дождитесь синхронизации.

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

Проверяйте прогресс с помощью:

watch -n 1 cat /proc/mdstat

Обновление конфигурации mdadm и initramfs

После создания массивов — зафиксируйте конфигурацию в /etc/mdadm/mdadm.conf, чтобы при загрузке initramfs и система знали о массивах:

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

Затем обновите initramfs, чтобы включить поддержку массива при загрузке:

update-initramfs -u

(В некоторых версиях Debian файл называется /etc/initramfs-tools/conf.d/mdadm. Если нужно, отредактируйте его вручную.)

Настройка GRUB2 на обоих дисках

Чтобы обеспечить загрузку при выходе из строя любого диска, установите GRUB2 на оба диска и обновите конфигурацию.

  1. Установите GRUB на /dev/sda (обычно уже установлен):
grub-install /dev/sda
update-grub
  1. Установите GRUB на /dev/sdb тоже:
grub-install /dev/sdb
update-grub

Цель — получить загрузчик в MBR/boot area обоих дисков. После этого, при отказе любого из дисков BIOS сможет загрузиться с второго диска.

Замечание по UEFI: Debian Squeeze старый и чаще использует BIOS/MBR. Если у вас система с UEFI, процесс установки GRUB и разметка EFI отличается: потребуется раздел EFI на обоих дисках и корректная запись загрузочных записей в UEFI. Здесь описывается MBR/BIOS-сценарий.

Верификация и тестирование

  1. Проверьте состояние md-массивов:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
mdadm --detail /dev/md2
  1. Убедитесь, что /etc/fstab указывает на /dev/mdX (не на /dev/sdaX).

  2. Проверьте наличие записи mdadm в /etc/mdadm/mdadm.conf.

  3. Тест загрузки: поочерёдно отключите (или пометьте в BIOS) один из дисков и перезагрузите систему, чтобы убедиться, что загрузка происходит с оставшегося диска. В тесте реального отключения диска обязательно подготовьте план отката и физический доступ к серверу.

  4. После успешной загрузки проверьте, что массивы работают в degraded режиме, затем повторно добавьте диск и дождитесь ресинхронизации.

Частые проблемы и способы устранения

  • Проблема: система не загружается после удаления диска.
    Причина: GRUB установлен только на одном диске или initramfs не содержит поддержки md.
    Решение: убедитесь, что grub-install выполнен для обоих дисков и обновите initramfs.

  • Проблема: mdadm не видит UUID или устройства меняют имена.
    Причина: различия в именовании (sda/sdb могут меняться).
    Решение: используйте UUID в /etc/fstab и mdadm.conf, добавьте скрипты udev, проверьте правильность /dev/disk/by-* ссылок.

  • Проблема: потеря данных при неверном создании массива.
    Причина: создание массива поверх существующих данных без предварительного копирования.
    Решение: перед созданием массива убедитесь в наличии корректных резервных копий и используйте метод копирования (rsync) вместо создания md поверх активного раздела с данными.

Когда этот подход не подходит

  • Если у вас аппаратный RAID-контроллер, лучше использовать его инструменты.
  • Если диски разного размера и вы хотите максимальной ёмкости, RAID1 неэффективен.
  • Если нужна гибкая миграция разделов и снапшоты, рассмотрите LVM поверх RAID или LVM вместо RAID (в зависимости от требований).

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

  • Аппаратный RAID: контроллеры, управляемые производителем. Плюсы: производительность, автономность. Минусы: привязка к железу.
  • LVM + RAID: храните LVM PV на md-устройствах для гибкости томов.
  • DRBD для репликации между серверами вместо локального RAID.

Пошаговый SOP для инженера (коротко)

  1. Сделать бэкап: копии /, /boot, /etc.
  2. Установить mdadm и initramfs-tools.
  3. Скопировать таблицу разделов: sfdisk -d /dev/sda | sfdisk –force /dev/sdb.
  4. Поменять типы разделов на fd.
  5. Обнулить старые суперблоки md на /dev/sdb*.
  6. Создать md0/md1/md2 последовательно, копировать данные через rsync.
  7. Добавить /dev/sda* в массивы и дождаться синхронизации.
  8. Обновить /etc/mdadm/mdadm.conf и update-initramfs -u.
  9. Установить grub-install на оба диска и update-grub.
  10. Протестировать отключением дисков.

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

Администратор до начала работ:

  • Сделать полную резервную копию данных.
  • Проверить, что у вас физический доступ к серверу.
  • Проверить совместимость BIOS/UEFI.

Во время миграции:

  • Следить за выводом cat /proc/mdstat.
  • Проверить логи dmesg и /var/log/syslog.

После миграции:

  • Прогнать тесты загрузки с отключённым диском.
  • Проверить целостность файлов и права.

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

  • /etc/fstab ссылается на /dev/md устройства (не на /dev/sda).
  • В /proc/mdstat видно состояние RAID1 и отсутствие ошибок.
  • GRUB установлен на обоих дисках: grub-install /dev/sda и /dev/sdb выполнены без ошибок.
  • Система успешно загружается при отключении любого отдельного диска.

План отката и аварийный сценарий

  1. Если после изменений система не загружается с обоих дисков — загрузитесь с live-CD/USB.
  2. Подключите оригинальный диск /dev/sda как primary и восстановите /etc/fstab и /boot из бэкапа.
  3. Если требуется, восстановите таблицу разделов с помощью sfdisk (храните dump перед модификацией).
  4. Восстановите GRUB с live-окружения: mount, chroot, grub-install, update-grub.

Тесты и приёмочные сценарии

  • Тест 1: При нормальной работе — все md-массивы clean, синхронизированы.
  • Тест 2: Отключение диска /dev/sda — система должна загрузиться и работать degraded.
  • Тест 3: Восстановление диска и повторная синхронизация — массив возвращается в clean.
  • Тест 4: Проверка целостности данных после ресинхронизации: md5sum/sha256sum файлов выборочно.

Краткая памятка-команды (cheat sheet)

  • Установка: apt-get install initramfs-tools mdadm
  • Копирование таблицы: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
  • Изменение типа раздела: fdisk /dev/sdb (t -> fd)
  • Обнуление суперблока: mdadm –zero-superblock /dev/sdb1
  • Создание массива: mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sdb1 missing
  • Добавление диска: mdadm –add /dev/md0 /dev/sda1
  • Состояние: cat /proc/mdstat, mdadm –detail /dev/md0
  • Сохранение конфигурации: mdadm –detail –scan >> /etc/mdadm/mdadm.conf
  • Обновление initramfs: update-initramfs -u
  • Установка GRUB: grub-install /dev/sda ; grub-install /dev/sdb ; update-grub

1-строчная глоссарий

  • mdadm — утилита для управления программным RAID в Linux.
  • GRUB2 — загрузчик системы.
  • RAID1 — зеркалирование данных по двум и более устройствам.
  • degraded — состояние массива при отсутствии одного из членов.

Модели принятия решений и эвристики

  • Если цель — отказоустойчивость при потере одного диска и простота — используйте RAID1.
  • Если важна производительность записи и большой объём — RAID10 предпочтительнее.
  • Если нужен репликация между географически разнесёнными серверами — DRBD.

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

  • Риск: потеря данных при ошибке в командах sfdisk/mdadm.
    Смягчение: полные бэкапы и тесты в staging.

  • Риск: система не загрузится после изменений.
    Смягчение: подготовить live-USB и план отката, установить GRUB на оба диска.

Локальные особенности для российских дата-центров

  • Убедитесь в наличии физических ключей и доступа к серверной стойке — при тесте отключения диска может потребоваться физическое вмешательство.
  • В некоторых окружениях панели управления серверами (iLO/DRAC) позволяют виртуально отключать диск для теста.

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

Мы планируем перевести сервер X на программный RAID1 для повышения отказоустойчивости. В ходе работ будет скопирована текущая файловая система на второй диск, настроены mdadm и GRUB2, и протестирована загрузка при отключении одного диска. Работы займут до N часов и требуют перезагрузки в финальной стадии тестирования. В ходе миграции возможны краткие периоды деградации производительности. Перед началом сделаем резервное копирование и оповестим дежурных. После завершения выполним тесты отказа и предоставим отчёт.

Итоговое резюме

  • Программный RAID1 на Debian Squeeze позволяет получить зеркалирование и возможность загрузки при отказе одного из дисков.
  • Процесс включает: копирование таблицы разделов, смену типа разделов, создание md-массивов, синхронизацию данных, обновление mdadm.conf и initramfs, установку GRUB на оба диска.
  • Тестируйте процесс в контролируемой среде и имейте план отката.

Важно: до выполнения на проде проверьте все команды в тестовой среде и убедитесь, что у вас есть актуальные резервные копии.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро