dump, restore, LVM, md, софтварный рейд на линуксе

    Вы здесь

    Как я переносил elastix с LVM без рейда на софтварный рэйд md без LVMа :)

    Может возникнуть вопрос зачем это надо и почему без LVM, на это лишь скажу что мне надо было сделать именно так, а статья была создана в основном для того, что бы самому не забыть как это делалось. В рамках статьи затрагиваются такие моменты, как последовательность команд при создании разделов, утилита для работы с софтварным рейдом, немного информации про grub, и о том как стартует линукс и для чего нужен initrd в обычном линуксе.

    На новом винте решено сделать вот такие RAID разделы:

    /dev/md0 (sda1,sdb1) 1G - swap
    /dev/md1 (sda2,sdb2) 75G - system
    /dev/md2 (sda3,sdb3) 230G - wavs

    1. fdisk /dev/sda (sdb)
    Интерактивно. Создаем разделы на обоих дисках одинаковых размеров. Удаляем все, что было до этого и создаем по три партиции, размером под своп, под систему, и все оставшееся место под раздел с данными. Тип партиций - fd (Raid autodetect). Вторую партицию ставим загрузочной (a).
    Получается так (второй диск, sda по аналогии):

    Device Boot Start End Blocks Id System
    /dev/sdb1 1 125 1004031 fd Linux raid autodetect
    /dev/sdb2 * 126 9244 73248367+ fd Linux raid autodetect
    /dev/sdb3 9245 38913 238316242+ fd Linux raid autodetect

    2. mdadm
    Создаем зеркалированные разделы (md0,md1,md2)

    mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
    mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
    mdadm --create --verbose /dev/md2 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

    3. Подготавливаем раздел к распаковке дампа.
    На всех новых разделах создаем заново файловую систему.

    mkswap /dev/md0
    mke2fs -T ext3 /dev/md1
    mke2fs -T ext3 /dev/md2

    создаем журналы на разделах.

    tune2fs -j /dev/md0
    tune2fs -j /dev/md1
    tune2fs -j /dev/md2

    монтируем системный раздел и входим в папку.

    mkdir /hdd2
    mount /dev/md1 /hdd2
    cd /hdd2

    4. Распаковываем дамп в текущую папку

    cat /root/dump.gz | gunzip | restore -r -f -

    5. Корректируем загрузчик initrd.

    Проделанные здесь ручные действия можно заменить запуском скрипта mkinitrd с указанием --fstab= ваш новый fstab. НО это надо делать загрузившись на ТОЙ МАШИНЕ, на которой вы хотите что бы все работало и в линукс с той же версией ядра.
    распаковываем initrd:

    cd /hdd2/boot

    mkdir tmp; cd tmp
    cat ../initrd-2.6.18-92.1.22.el5.img | gunzip | cpio -i --make-directories

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

    cp /hdd2/lib/modules/2.6.18-92.1.22.el5/kernel/drivers/md/raid1.ko lib/
    cp /hdd2/lib/modules/2.6.18-92.1.22.el5/kernel/drivers/ata/sata_via.ko lib/
    cp /hdd2/lib/modules/2.6.18-92.1.22.el5/kernel/drivers/ata/ahci.ko lib/

    редактируем init.
    добавляем загрузку модулей в файл init в конце загрузки всех модулей (порядок важен):

    echo "Loading ahci.ko module"
    insmod /lib/ahci.ko
    echo "Loading raid1.ko module"
    insmod /lib/raid1.ko
    echo "Loading sata_via.ko module"
    insmod /lib/sata_via.ko

    вносим изменения в загрузку: В моем случае на исходной машине корневой раздел
    был на LVM, а я переделал его под md рэйд-1. После фразы:

    echo Scanning and configuring dmraid supported devices

    убрать это:

    #echo Scanning logical volumes
    #lvm vgscan --ignorelockingfailure
    #echo Activating logical volumes
    #lvm vgchange -ay --ignorelockingfailure VolGroup00
    #resume /dev/VolGroup00/LogVol01
    #echo Creating root device.
    #mkrootdev -t ext3 -o defaults,ro /dev/VolGroup00/LogVol00

    вставить это:

    raidautorun /dev/md0
    raidautorun /dev/md1
    resume /dev/md0
    echo Creating root device.
    mkrootdev -t ext3 -o defaults,ro /dev/md1

    запаковываем initrd:

    find . | cpio --quiet -c -o | gzip -9 > ../newinitrd

    переименовываем newinitrd в то, как он раньше назывался,
    или указываем в /boot/grub/menu.lst это название файла

    6. Корректируем /hdd2/boot/grub/menu.lst

    Убеждаемся что все обращения к диску в скобках адресуются к системной партиции (в нашем случае она не 0 а 1) (hd0,1) и названия файлов ядра и initrd заданы с префиксом /boot/ (а не относительно корня / - в случае, если вы переносили дамп с системы с отдельным разделом /boot). В параметрах ядру заменяем старый root на root=/dev/md1

    В моем случае в новом компе была новая плата, на которой линукс видел сата диски только в режиме ahci в биосе и с опцией pci=nomsi в параметрах загрузки ядра.

    7. Корректируем /hdd2/etc/fstab на нашем новом диске, если необходимо. Так как в системе, с которой мы все перенесли диски могли называться по другому. Теперь к точке монтирования / у нас должен монтироваться /dev/md1, а папка с барахлом - /dev/md2

    8. Делаем все диски массива загрузочными. Обратите внимание в комманде root указывается номер партиции, в которой находится основная часть загрузчика (/boot/grub/stage1). В нашем случае это первая партиция (нулевая у нас своп).

    grub
    > device (hd0) /dev/sda
    > root (hd0,1)
    > setup (hd0)
    > device (hd1) /dev/sdb
    > root (hd1,1)
    > setup (hd1)

    9. cat /proc/mdstat проверяем как выглядит наш массив, на всякий случай ждем
    пока хотя бы системный раздел синхронизируется и пробуем загрузиться с этих дисков.

    md1 : active raid1 sdb2[1] sda2[0]
    73248256 blocks [2/2] [UU]
    [============>........] resync = 63.9% (46816896/73248256) finish=4.2min speed=102900K/sec

    md0 : active raid1 sdb1[1] sda1[0]
    1003904 blocks [2/2] [UU]

    ---
    Ссылки:
    http://www.flmnh.ufl.edu/linux/linux_software_raid.htm
    http://linuxdevcenter.com/pub/a/linux/2002/12/05/RAID.html
    http://ubuntuforums.org/showthread.php?t=883335 (asus bug)

    3
    Average: 3 (1 голос)