Настройка программного RAID1 на работающей системе — Debian Lenny
Краткое определение
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 -hserver1:~#df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/sda35.3G747M4.3G15%/
tmpfs126M
rlib/init/rw
udevM4KM%
tmpfs6M/dev/shm
/dev/sda1228M29M8M14%/boot
server1:~#fdisk -lserver1:~#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 Мини-план действий (быстрая заметка)
- Установить mdadm и загрузить модули (см. выше).
- Клонировать таблицу разделов: sfdisk -d /dev/sda | sfdisk /dev/sdb
- Сменить код типов разделов на fd на /dev/sdb.
- mdadm –zero-superblock на новых разделах.
- Создать RAID-массивы (mdadm –create) по одному для /boot, swap и /.
- Скопировать содержимое (rsync/partclone) или сразу переставить старый диск в массив как синхронизируемый участник.
- Обновить /etc/mdadm/mdadm.conf и initramfs (update-initramfs -u).
- Установить GRUB на оба диска: grub-install /dev/sda и grub-install /dev/sdb.
- Перезагрузка и проверка загрузки с любого диска (физически отключив один при тесте).
В этой статье мы подробно прошли пункты 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 или иная нестандартная конфигурация, план действий будет отличаться — действуйте осторожно и заранее протестируйте процедуру на копии системы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента