Перенос ALT Linux 5.9.9 на программный RAID

Есть рабочий сервер ALT Linux 5.9.9, с него содержимое диска перенесено на 1 из 2х жестких дисков на новом сервере. Нужно объединить 2 жестких диска на новом сервере в программный RAID 1. Загружаем Live CD ALT (у меня версии 5.0) на новом сервере.

Диск с перенесенными данными:

/sbin/fdisk -l /dev/sda


Диск /dev/sda: 500.1 ГБ, 500107862016 байт
255 heads, 63 sectors/track, 60801 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          64      514048+  83  Linux
/dev/sda2              65         829     6144862+  82  Linux своп / Solaris
/dev/sda3             830       60801   481725090   83  Linux


Пустой жесткий диск:

/sbin/fdisk -l /dev/sdb


Диск /dev/sdb: 500.1 ГБ, 500107862016 байт
255 heads, 63 sectors/track, 60801 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1783f861

Устр-во Загр     Начало       Конец       Блоки   Id  Система


На 1м диске меняем типы разделов на fd (linux raid), кроме /dev/sda2 — это swap раздел:

/sbin/sfdisk --change-id /dev/sda 1 fd
/sbin/sfdisk --change-id /dev/sda 3 fd


Создаем raid массив с первым жестким диском. Устройство /dev/md1 будет содержать раздел /dev/sda1 (там /boot) и, /dev/md3/dev/sda3 (там корневая файловая система):

/sbin/mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sda1
/sbin/mdadm --create /dev/md3 --level=1 --raid-disks=2 missing /dev/sda3


Проверяем:

cat /proc/mdstat


Personalities : [raid1]
md1 : active raid1 sda1[1]
      513984 blocks [2/1] [_U]

md3 : active raid1 sda3[1]
      481724992 blocks [2/1] [_U]


Если пришлось перезагрузиться, снова подключить raid разделы можно командой:

/sbin/mdadm --auto-detect


Монтируем корневую файловую систему:

mkdir /mnt/old && mount /dev/md3 /mnt/old


Редактируем настройки mdadm.conf. Смотрим старые насторйки:

cat /mnt/old/etc/mdadm.conf


#
#  /etc/mdadm.conf  --  mdadm configuration file
#
#  Customized for ALTLinux
#  See complete sample on manual page and in documentation directory
#
#  This is a minimalistic skeleton but it should work out-of:a+box!
#

MAILADDR root
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions


Добавляем наши raid устройства:

/sbin/mdadm --detail --scan >> /mnt/old/etc/mdadm.conf


Теперь файл выглядит так:

cat /mnt/old/etc/mdadm.conf


#
#  /etc/mdadm.conf  --  mdadm configuration file
#
#  Customized for ALTLinux
#  See complete sample on manual page and in documentation directory
#
#  This is a minimalistic skeleton but it should work out-of:a+box!
#

MAILADDR root
PROGRAM /sbin/mdadm-syslog-events
DEVICE partitions

ARRAY /dev/md1 level=raid1 num-devices=2 UUID=510d9c07:30cf085b:5ad24bd1:97278a7d
ARRAY /dev/md3 level=raid1 num-devices=2 UUID=238fb70f:5062c6d3:f3093ac7:66b17487


Правим /etc/fstab. Старый выглядит так:

cat /mnt/old/etc/fstab


proc            /proc                   proc    nosuid,noexec,gid=proc          0 0
devpts          /dev/pts                devpts  nosuid,noexec,gid=tty,mode=620  0 0
tmpfs           /tmp                    tmpfs   nosuid                          0 0
UUID=84f7b84c-5b15-41c5-be7b-f25ee4d9fe44       /       ext3    defaults,errors=remount-ro    0 0
UUID=b4d6e146-865c-4c2e-8906-27239a2be101       /boot   ext2    nodev,nosuid,noexec,relatime  1 2
UUID=e78e7b68-dc62-4077-b97f-9868ee48e6c1       swap    swap    defaults        0 0
/dev/sr0        /media/cdrom            udf,iso9660 ro,noauto,user,utf8         0 0


Заменяем UUID=* на /dev/md*, также подключаем 2 swap раздела — /dev/sda2 и /dev/sdb2:

proc            /proc                   proc    nosuid,noexec,gid=proc          0 0
devpts          /dev/pts                devpts  nosuid,noexec,gid=tty,mode=620  0 0
tmpfs           /tmp                    tmpfs   nosuid                          0 0
/dev/md3        /                       ext3    defaults,errors=remount-ro      0 0
/dev/md1        /boot                   ext2    nodev,nosuid,noexec,relatime    1 2
/dev/sda2       swap                    swap    defaults                        0 0
/dev/sdb2       swap                    swap    defaults                        0 0
/dev/sr0        /media/cdrom            udf,iso9660     ro,noauto,user,utf8     0 0


Заходим в старую систему, используя chroot:

mount -o bind /dev /mnt/old/dev/ && mount -o bind /proc /mnt/old/proc/ && mount -o bind /sys /mnt/old/sys/


/sbin/chroot /mnt/old/


Монтируем в ней /boot раздел (т.к. он располагается на /dev/md1):

mount /dev/md1 /boot/


Теперь нам придется пересобрать ядро для того, чтобы оно включало в себя статически вкомпилированные модули raid и ext3, иначе при загрузке система зависнет при попытке смонтировать корневую файловую систему с устройства /dev/md3:

Устанавливаем подходящее нам ядро и исходники ядра (в моем случае — версии 2.6.37):

apt-get install kernel-image-std-pae kernel-source-2.6.37


Копируем настройки ядра в распакованные исходники ядра /usr/src/kernel/sources/kernel-source-2.6.37:

cp /boot/config-2.6.35-std-pae-alt9 /usr/src/kernel/sources/kernel-source-2.6.37/.config


Теперь удаляем все ненужные ядра, отныне будем использовать только наше самодельное:

apt-get remove kernel-image-std-pae


Запускаем конфигурацию ядра:

make menuconfig


В Device Drivers -> Multiple devices driver support (RAID and LVM) делаем модули raid статическими:



В File systems делаем модули ext2 и ext3 статическими:



Собираем ядро:

make all
make modules_install


Устанавливаем новое ядро:

cp /usr/src/kernel/sources/kernel-source-2.6.37/arch/x86/boot/bzImage /boot/vmlinuz-2.6.37
cp /usr/src/kernel/sources/kernel-source-2.6.37/System.map /boot/System.map-2.6.37
/sbin/mkinitrd /boot/initrd.img-2.6.37 2.6.37


Правим /etc/grub.d/grub.cfg, кардинально его упростив. После правки не забываем куда-нибудь сохранить новый config, чтобы после неосторожного обновления дистрибутива можно было восстановить:

set timeout=5

menuentry "ALT Linux 2.6.37 PAE MDRAID " --class gnu-linux --class gnu --class os {
        set root='(md1)'
        search --no-floppy --fs-uuid --set b4d6e146-865c-4c2e-8906-27239a2be101
        echo    'Loading Linux  ...'
        linux   /vmlinuz-2.6.37 root=/dev/md3 ro panic=30
        echo    'Loading initial ramdisk ...'
        initrd  /initrd.img-2.6.37
}


Смотрим файл /boot/grub/device.map:

cat /boot/grub/device.map


(fd0)   /dev/fd0
(hd0)   /dev/disk/by-id/ata-MAXTOR_STM3250310AS_6RYJEGZR


ata-MAXTOR_STM3250310AS_6RYJEGZR — воспоминания о жестком диске, который был установлен в старом сервере. Нам необходимо заменить на новый. Список всех дисков можно просмотреть так:

ls /dev/disk/by-id/


Правим /boot/grub/device.map:

(fd0)   /dev/fd0
(hd0)   /dev/disk/by-id/ata-WDC_WD5003ABYX-01WERA0_WD-WMAYP0095893


Устанавливаем загрузчик:

/usr/sbin/grub-install /dev/md1


Перезагружаемся...

Добавим 2й жесткий диск в raid массив:

Копируем таблицу разделов с 1го диска на 2й:

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


Смотрим, что получилось:

/sbin/fdisk -l /dev/sdb


Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, всего 976773168 секторов
Units = секторы of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x1783f861

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1              63     1028159      514048+  fd  Автоопределение Linux raid
/dev/sdb2         1028160    13317884     6144862+  82  Linux своп / Solaris
/dev/sdb3        13317885   976768064   481725090   fd  Автоопределение Linux raid


Активируем swap раздел на 2м диске:

/sbin/mkswap /dev/sdb2
/sbin/swapon /dev/sdb2


mdadm автоматически подхватывает разделы с типом fd диска /dev/sdb, но нам это не нужно:

cat /proc/mdstat 


Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty] 
md126 : inactive sdb3[0](S)
      481724992 blocks
       
md127 : inactive sdb1[0](S)
      513984 blocks
       
md1 : active raid1 sda1[1]
      513984 blocks [2/1] [_U]
      
md3 : active raid1 sda3[1]
      481724992 blocks [2/1] [_U]


Удаляем автоматически добавленные устройства:

/sbin/mdadm -S /dev/md126
/sbin/mdadm -S /dev/md127


Добавляем разделы /dev/sdb1 и /dev/sdb3 в RAID 1:

/sbin/mdadm --add /dev/md1 /dev/sdb1
/sbin/mdadm --add /dev/md3 /dev/sdb3


Проверяем, что процесс пошел и на разделы /dev/sdb делается копия:

cat /proc/mdstat


Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath] [faulty] 
md1 : active raid1 sdb1[0] sda1[1]
      513984 blocks [2/2] [UU]
      
md3 : active raid1 sdb3[2] sda3[1]
      481724992 blocks [2/1] [_U]
      [>....................]  recovery =  0.3% (1560448/481724992) finish=76.9min speed=104029K/sec
      
unused devices: <none>


Такие дела. Мне не нравится, как происходит установка ядер в ALT Linux. Для пользователя это удобно, а для меня нет, поэтому все ядра я удалил и оставил только одно свое с поддержкой загрузки с программного RAID.

www.linuxconfig.org/Linux_Software_Raid_1_Setup
  • +5
  • 11 февраля 2011, 15:50
  • Sergei_T

Комментарии (3)

RSS свернуть / развернуть
+
0
Вау!
avatar

Markony

  • 11 февраля 2011, 17:43
+
0
Внесу свои 5 копеек для тех, кто хочет начать освоение программного RAID с более простых вещей: статья "RAID-массив по-быстренькому" с linux16.net.
avatar

yababay

  • 11 февраля 2011, 18:01
+
0
суть т всего этого в том, что все модули которые нужны для того чтобы загрузиться с какого либо раздела не нужно хранить на нем, а нужно статически вкомпилировать в ядро
avatar

Sergei_T

  • 11 февраля 2011, 18:45

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.