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

Настройка программного RAID1 на работающей системе — Debian Lenny

• 6 min read • Системное администрирование • Обновлено 23 Nov 2025
RAID1 на Debian Lenny: настройка и GRUB
RAID1 на Debian Lenny: настройка и GRUB

Краткое определение

RAID1 — зеркалирование: два диска содержат одинаковые данные. Если один диск выйдет из строя, система продолжит работать с другого диска. Эта инструкция показывает, как добавить RAID1 на уже работающую Debian Lenny систему и настроить GRUB так, чтобы загрузка происходила с любого из дисков.

Important: перед началом сделайте полную резервную копию важных данных. Операции с разделами и загрузчиком несут риск потери данных.

Оглавление

  • Предварительная заметка
  • Установка mdadm
  • Подготовка /dev/sdb (клонирование таблицы разделов и смена типа)
  • Очистка метаданных RAID на /dev/sdb
  • Дополнительные рекомендации, альтернативы и чек-листы
  • Решающее дерево и критерии приёмки
  • Краткое резюме

1 Предварительная заметка

В этом руководстве используется Debian Lenny с двумя жёсткими дисками /dev/sda и /dev/sdb одинакового размера. /dev/sdb пустой, а /dev/sda имеет разделы:

  • /dev/sda1: /boot, ext3
  • /dev/sda2: swap
  • /dev/sda3: /, ext3

Цель — получить:

  • /dev/md0 (из /dev/sda1 и /dev/sdb1): /boot, ext3
  • /dev/md1 (из /dev/sda2 и /dev/sdb2): swap
  • /dev/md2 (из /dev/sda3 и /dev/sdb3): /, ext3

Ниже показано текущее состояние образца системы (команды и выводы должны совпадать с вашим окружением только в формате):

df -h
server1:~#df-h  
FilesystemSizeUsedAvailUse%Mountedon  
/dev/sda35.3G747M4.3G15%/  
tmpfs126M
rlib/init/rw  
udevM4KM% 
tmpfs6M/dev/shm  
/dev/sda1228M29M8M14%/boot  
server1:~#
fdisk -l
server1:~#fdisk-l  
  
Disk /dev/sda: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x000740fc  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sda1   *           1          30      240943+  83  Linux  
/dev/sda2             31          92      498015   82  Linux swap / Solaris  
/dev/sda3             93         783     5550457+  83  Linux  
  
Disk /dev/sdb: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/sdb doesn't contain a valid partition table  
server1:~#

Примечание: выводы выше — пример. Ваши значения Size/Start/End/Blocks будут отличаться в зависимости от дисков.

2 Установка mdadm

Инструмент для программного RAID — mdadm. Установите его вместе с initramfs-tools:

aptitude install initramfs-tools mdadm

Во время установки вам предложат опцию:

MD arrays needed for the root file system: <– all

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

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

Проверьте статус md-устройств:

cat /proc/mdstat

Ожидаемый вывод (похожий):

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

Если Personalities не содержит raid1, проверьте, что modprobe raid1 выполнился успешно.

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

План: копируем таблицу разделов с /dev/sda на /dev/sdb, меняем тип разделов на raid autodetect, очищаем возможные старые суперблоки md и затем создаём массивы.

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

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

Пример вывода команды — фрагмент ниже сохраняет информацию о результате:

server1:~# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
unused devices:   
server1:~# sfdisk -d /dev/sda | sfdisk /dev/sdb  
Checking that no-one is using this disk right now ...  
OK  
  
Disk /dev/sdb: 783 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   *        63    481949     481887  83  Linux  
/dev/sdb2        481950   1477979     996030  82  Linux swap / Solaris  
/dev/sdb3       1477980  12578894   11100915  83  Linux  
/dev/sdb4             0         -          0   0  Empty  
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).)  
server1:~#

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

server1:~# fdisk -l  
  
Disk /dev/sda: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x000740fc  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sda1   *           1          30      240943+  83  Linux  
/dev/sda2             31          92      498015   82  Linux swap / Solaris  
/dev/sda3             93         783     5550457+  83  Linux  
  
Disk /dev/sdb: 6442 MB, 6442450944 bytes  
255 heads, 63 sectors/track, 783 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sdb1   *           1          30      240943+  83  Linux  
/dev/sdb2             31          92      498015   82  Linux swap / Solaris  
/dev/sdb3             93         783     5550457+  83  Linux  
server1:~#

Теперь нужно сменить код типов разделов на /dev/sdb на Linux raid autodetect (hex fd):

fdisk /dev/sdb

В интерактивном fdisk последовательно используем t, номер раздела и код fd. Пример с выводом меню и изменениями (сохраните изменения ключом w):

server1:~# fdisk /dev/sdb  
  
Command (m for help): <-- m  
Command action  
a   toggle a bootable flag  
...  
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.  
Syncing disks.  
server1:~#

Important: убедитесь, что вы редактируете /dev/sdb, а не /dev/sda. Ошибка может привести к потере загрузочного раздела.

Очистка возможных старых метаданных md

На всякий случай удалим старые суперблоки md на разделах /dev/sdb:

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

Если на разделе не было метаданных, mdadm сообщит:

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

Если метаданные существовали, команда просто выполнится без вывода.

4 Мини-план действий (быстрая заметка)

  1. Установить mdadm и загрузить модули (см. выше).
  2. Клонировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb
  3. Сменить код типов разделов на fd на /dev/sdb.
  4. mdadm –zero-superblock на новых разделах.
  5. Создать RAID-массивы (mdadm –create) по одному для /boot, swap и /.
  6. Скопировать содержимое (rsync/partclone) или сразу переставить старый диск в массив как синхронизируемый участник.
  7. Обновить /etc/mdadm/mdadm.conf и initramfs (update-initramfs -u).
  8. Установить GRUB на оба диска: grub-install /dev/sda и grub-install /dev/sdb.
  9. Перезагрузка и проверка загрузки с любого диска (физически отключив один при тесте).

В этой статье мы подробно прошли пункты 1–4; дальнейшие шаги выпадают за рамки исходного текста, но ниже приведены рекомендации и чек-листы.

Дополнительная ценность: когда это не работает и альтернативы

Когда это может не сработать:

  • Диски разного размера/смещений (размытая копия таблицы рвёт синхронизацию).
  • LVM поверх разделов: нужно учитывать PV/VG/LP и правильно переносить PV с помощью pvcreate –uuid –replace и vgcfgrestore.
  • Шифрование (LUKS): сначала настраивайте RAID под зашифрованными томами или зеркало внутри LUKS в зависимости от архитектуры.

Альтернативы:

  • Использовать LVM-миррор (mirror) вместо mdadm.
  • Создать RAID на чистой системе и восстановить данные с резервной копии.
  • Аппаратный RAID-контроллер (если доступен) — переносит нагрузку с CPU и даёт аппаратный мониторинг.

Роль-ориентированные чек-листы

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

  • Проверить состояние SMART дисков (smartctl).
  • Сделать полную резервную копию (образ диска или критичных данных).
  • Убедиться, что у вас есть консольный доступ (не только SSH), чтобы восстановить загрузку при ошибке.

Во время работы:

  • Следить за выводом dmesg и /proc/mdstat.
  • Не записывать на разделы, пока идёт клонирование таблицы/изменение типов.

После завершения:

  • Обновить /etc/mdadm/mdadm.conf: mdadm –detail –scan >> /etc/mdadm/mdadm.conf
  • Обновить initramfs: update-initramfs -u -k all
  • Установить GRUB на обоих дисках: grub-install /dev/sda && grub-install /dev/sdb
  • Перезагрузить и протестировать отказ одного диска.

Факто-бокс — ключевые команды

  • Установка: aptitude install initramfs-tools mdadm
  • Копирование таблицы: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • Изменение типа: fdisk /dev/sdb (t -> fd -> w)
  • Очистка суперблока: mdadm –zero-superblock /dev/sdb1
  • Показ статуса: cat /proc/mdstat
  • Запись mdadm.conf: mdadm –detail –scan >> /etc/mdadm/mdadm.conf
  • Обновление initramfs: update-initramfs -u -k all
  • Установка GRUB: grub-install /dev/sda

Решающее дерево для выбора подхода

flowchart TD
  A[Есть резервная копия?] -->|Нет| B[Создать резервную копию]
  A -->|Да| C[Диски одинакового размера?]
  C -->|Да| D[Клонировать таблицу sfdisk]
  C -->|Нет| E[Рассмотреть LVM или вручную создать разделы]
  D --> F[Изменить тип на fd]
  F --> G[mdadm --zero-superblock]
  G --> H[Создать массивы mdadm --create]
  H --> I[Синхронизировать, обновить initramfs, установить GRUB]
  I --> J[Тестировать отказ диска]

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

  • /proc/mdstat показывает корректные массивы и состояние sync или active.
  • При отключении одного из дисков система продолжает загружаться и работать.
  • GRUB установлен на обоих дисках и конфигурация не указывает на единственный диск.
  • initramfs содержит поддержку md и собирается без ошибок.

Notes: тестирование отказа диска рекомендуется проводить в контролируемой среде (виртуальной машине или с резервной копией) и, по возможности, с физическим доступом.

Резюме

Это руководство показывает основные шаги по подготовке второго диска /dev/sdb для последующего создания программного RAID1 на работающей Debian Lenny системе: копирование таблицы разделов, смена кода раздела в fd, очистка старых метаданных md и базовые проверки mdadm. Дополнительно перечислены чек-листы, возможные проблемы и альтернативные подходы. После создания массивов не забудьте обновить /etc/mdadm/mdadm.conf, пересоздать initramfs и установить GRUB на оба диска, чтобы обеспечить загрузку при отказе любого из них.

Summary:

  • Подготовьте резервную копию перед началом.
  • Клонируйте таблицу разделов sda -> sdb.
  • Поменяйте тип разделов на fd и очистите суперблоки.
  • Создайте массивы md, обновите initramfs и установите GRUB на оба диска.

Important: если у вас LVM, LUKS или иная нестандартная конфигурация, план действий будет отличаться — действуйте осторожно и заранее протестируйте процедуру на копии системы.

Поделиться: 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 быстро