Делаем raid1 на уже существующей системе без потери информации

Железо > Восстановление данных
Задача:
Имеем 2 диска которые необходимо объединить в RAID1.
ПЕРЕД НАЧАЛОМ РАБОТЫ, ПОКИНЬТЕ ВСЕ "ЛИШНИЕ" КОНСОЛИ, БУДЕТ ВЫПОЛНЯТЬСЯ
МНОЖЕСТВО ОПАСНЫХ КОММАНД, КОТОРЫЕ В СОСТОЯНИИ БЫСТРО ПОЛОЖИТЬ ЛЮБОЙ СЕРВЕР.
Исходная разбивка винчестеров:
 - sda с распакованным образом
    - sda1 - swap
    - sda2 - reiser fs
 - sdb чистый

1. Убеждаемся, что текущий sda, а на sdb необходимо поствить рейд
mount
fdisk -l

2.
Очищаем sdb и создаем таблицу разделов соответсвующую sda
fdisk /dev/sdb
sfdisk -d /dev/sda | sfdisk /dev/sdb

3.
Проверяем, что все успешно
fdisk -l

4.
На sdb меняем тип обоих разделов разделов на "fd Linux raid autodetect"
fdisk /dev/sdb
t
1
fd
t
2
fd
p
w
должно выйти примерно так
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         250     2008093+  fd  Linux raid autodetect
/dev/sdb2   *         251       60801   486375907+  fd  Linux raid autodetect

5.
Проверяем, что не осталось следов от предыдущих рейдов
~# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device - /dev/sdb1
~# mdadm --zero-superblock /dev/sdb2
mdadm: Unrecognised md component device - /dev/sdb2
если ругается как выше, все хорошо

6.
Создаем рейд на sdb, версия обязательна, иначе lilo не отработает, подробности:
http://anti.teamidiot.de/nei/2006/10/softraid_lilo/
патч для 1.0:
http://www.mail-archive.com/debian-bugs-closed@lists.debian.org/msg314802.html
нам же делать следующее (создаем рейд и проверяем, что он v0.90):
mdadm --create /dev/md0 -e 0.90 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 -e 0.90 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm -E /dev/sdb1
mdadm -E /dev/sdb2

7.
Убеждаемся, что у нас появились поврежденные рейд масcивы [_U]
cat /proc/mdstat

8.
Создаем файловые системы
mkswap /dev/md0
mkfs.reiserfs /dev/md1

9.
Бэкапим, редактируем и проверяем файл конфигурации mdadm
mv /var/lib/mdadm/CONF-UNCHECKED /var/lib/mdadm/CONF-UNCHECKED.old
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
cat /etc/mdadm/mdadm.conf

10.
Монтируем раздел
mount /dev/md1 /mnt/

11.
Обновляем initrd
uname -a
rm /boot/initrd.img-2.6.35.3
update-initramfs -c -t -k 2.6.35.3

12.
прописываем lilo
lilo

13.
Копируем данные с sda в созданный массив
cp -dpRx / /mnt/

14.
Исправляем fstab и lilo.conf
cp /mnt/etc/fstab /mnt/etc/fstab.orig
vi /mnt/etc/fstab
cp /mnt/etc/lilo.conf /mnt/etc/lilo.conf.orig
vi /mnt/etc/lilo.conf
должно получиться примерно так
~# cat /etc/fstab | grep md
 /dev/md0    none            swap    sw              0       0
 /dev/md1  /               reiserfs        noauto,noatime          1 1
# cat /etc/lilo.conf | egrep "(md|raid)"
boot=/dev/md1
root=/dev/md1
raid-extra-boot=mbr
  root = /dev/md1
  root = /dev/md1
  root = /dev/md1

15.
reboot
при загрузке передать lilo параметр
root=/dev/md1

16.
проверяем, что смонтированы устройства /dev/md
mount

17.
Меняем тип разделов на /dev/sda на "fd Linux raid autodetect"
fdisk /dev/sda
t
1
fd
t
2
fd
p
w

18.
Добавляем /dev/sda1 и /dev/sda2 в рейд массив
mdadm --add /dev/md0 /dev/sda1
mdadm --add /dev/md1 /dev/sda2

19.
Убеждаемся, что пошла синхронизация и ждем ее окончания [UU]
cat /proc/mdstat

20.
Редактируем mdadm.comf
mv /var/lib/mdadm/CONF-UNCHECKED /var/lib/mdadm/CONF-UNCHECKED.old
cp /etc/mdadm/mdadm.conf.orig /etc/mdadm/mdadm.conf
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

21.
Обновляем initrd
uname -a
rm /boot/initrd.img-2.6.35.3
update-initramfs -c -t -k 2.6.35.3

22.
Прописываем lilo
lilo

Статью прислал пользователь regul

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>