Материал
основан на двух англоязычных статьях:
Я
всего лишь постараюсь собрать инструкцию,
проверенную на практике, но на родном
языке.
Исходные
данные:
Сервер,
два винчестера одинаковой модели
емкостью 500Gb.
Задача:
Поднять
на сервере XenServer, но таким образом, чтобы
система работала на LinuxRaid уровня 1,
настроенном на вышеупомянутых винтах.
Инструкция:
В
качестве небольшого предисловия добавлю,
что все попытки поставить XenServer на
software raid, предоставляемый некоторыми
материнскими платами, провалились. Даже
при настройке в BIOS оного "девайса",
XenServer при установке не видит Raid, а видит
отдельные диски-устройства.
Далее,
XenServer
сам по себе не поддерживает загрузку с
LinuxRaid и не предлагает, как, например,
Debian при установке, ничего похожего. Но
есть возможность "сконвертировать"
файловую систему и "перебросить"
на нее уже установленный XenServer.
Дело
в том, что несмотря на отсутствие
встроенной возможности использовать
LinuxRaid, в системе после установки есть
все необходимые компоненты для его
использования. Необходимо только
правильно ими воспользоваться......
Итак,
будем считать, что в сервер вставлены
оба винчестера, первый - загрузочный,
дистрибутив XenServer установлен в
опт.привод, инсталлятор запущен
и отработан, установленная система
загрузилась и показала свою синюшную
консоль, дистрибутив из привода извлечен.
Далее
можно действовать либо с удаленной
консоли, либо с родной.
В
системе теперь два жестких диска - sda с
системой, и sdb - пустой.
Смотрим,
что у нас с разделами на sda:
#
fdisk -l /dev/sda
Disk
/dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 499 4008186 83 Linux /dev/sda2 500 998 4008217+ 83 Linux /dev/sda3 999 60801 480367597+ 83 Linux
В
первую очередь необходимо создать точно
такую же схему разделов на sdb:
# sfdisk -d /dev/sda | sfdisk /dev/sdb
Здесь
внимательно посмотрите на вывод: возможно
потребуется добавить ключ "--force".
Проверяем,
результат должен быть таким:
# fdisk -l /dev/sdb Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 499 4008186 83 Linux /dev/sdb2 500 998 4008217+ 83 Linux /dev/sdb3 999 60801 480367597+ 83 Linux
Меняем
тип разделов sdb на "Linux raid autodetect".
Так как наиболее удобная для этого
утилита cfdisk в системе отсутствует,
используем нетривиальный метод:
# echo -e "\nt\n1\nfd\nt\n2\nfd\nt\n3\nfd\nw\nx" | fdisk /dev/sdb
Результат:
# fdisk -l /dev/sdb Disk /dev/sdb: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 * 1 499 4008186 fd Linux raid autodetect /dev/sdb2 500 998 4008217+ fd Linux raid autodetect /dev/sdb3 999 60801 480367597+ fd Linux raid autodetect
Для
чистоты исполнения этого этапа необходимо
перегрузиться, чтобы система перечитала
и проинициализировала вновь созданную
структуру sdb:
# reboot
Следующий
этап: подготовка sdb для использования
в будущем Raid-массиве.
Создадим
три Raid устройства, но с указанием
пропущенных девайсов:
# mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
Таким
образом, рейд создан, но только с участием
sdb.
Теперь
прежде всего копируем данные Xen Storage
Manager на созданный Raid.
ВНИМАТЕЛЬНО:
далее "VG_XenStorage-3e954146-82c7-03df-3dd5-0a5464842579"
- это uuid существующего в системе хранилища,
но на каждой системе он свой. Используемый
в вашей системе uuid необходимо предварительно
определить с помощью команды "pvscan",
а затем вставить в соответствующие
команды, указанные ниже.
Создаем
новое устройство в хранилище.
# pvcreate /dev/md2
Расширяем
на него хранилище.
# vgextend VG_XenStorage-3e954146-82c7-03df-3dd5-0a5464842579 /dev/md2
Копируем
данные хранилища на новое устройство.
# pvmove /dev/sda3 /dev/md2
Эта
операция займет некоторое время, после
чего останется еще пара команд.
Сужаем
пространство хранилища за счет исходного
раздела.
# vgreduce VG_XenStorage-3e954146-82c7-03df-3dd5-0a5464842579 /dev/sda3
Удаляем
из хранилища исходное устройство.
# pvremove /dev/sda3
Монтируем
/dev/md0 и копируем на него файлы системы
с исходного раздела:
# mkfs.ext3 /dev/md0 # mount /dev/md0 /mnt # cd / # cp -axv . /mnt
Следующий
этап: настраиваем процесс загрузки с
Raid.
Придется
редактировать несколько файлов, для
чего используем редактор vi. Надеюсь,
что трудностей не возникнет, так как по
командам редактора в Интернете достаточно
информации.
Итак,
во-первых, редактируем /mnt/etc/fstab таким
образом, чтобы система монтировала
корень с /dev/md0. Для этого заменяем в файле
строку "LABEL=/-main" на "/dev/md0",
чтобы получилось нечто подобное:
# cat /mnt/etc/fstab /dev/md0 / ext3 defaults 1 1 /var/swap/swap.001 swap swap defaults 0 0 none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0
Создаем
образ загрузки и распаковываем его:
# mkdir /mnt/root/initrd-raid # mkinitrd -v --fstab=/mnt/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r` # cd /mnt/root/initrd-raid # zcat initrd-`uname -r`-raid.img | cpio -i
Теперь
необходимо внедрить необходимые
raid-устройства в загрузку:
# vi init
Тут
сразу после строки "echo
Scanning and configuring dmraid supported devices" нужно
добавить:
raidautorun /dev/md1 raidautorun /dev/md2
В
результате эта часть файла должна
выглядеть примерно так:
. . . stabilized --hash --interval 250 /proc/scsi/scsi mkblkdevs echo Scanning and configuring dmraid supported devices raidautorun /dev/md0 raidautorun /dev/md1 raidautorun /dev/md2 resume /var/swap/swap.001 echo Creating root device. mkrootdev -t ext3 -o defaults,ro /dev/md0 echo Mounting root filesystem. . . .
Копируем
новый ram-диск
в /mnt/boot и
модифицируем меню загрузки:
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`-raid.img # rm /mnt/boot/initrd-2.6-xen.img rm: remove symbolic link `/mnt/boot/initrd-2.6-xen.img’? y # ln -s initrd-`uname -r`-raid.img /mnt/boot/initrd-2.6-xen.img
# vi /mnt/boot/extlinux.conf
Тут
необходимо заменить все вхождения
строки "root=LABEL=root-xyz" на "root=/dev/md0",
то есть модификацию надо сделать в
каждом пункте меню.
Осталось
назначить в качестве MBR диск
/dev/sdb.
Так
как Since XenServer до сих пор использует
extlinux вместо GRUB, это нетрудно. Достаточно
просто изменить опции bootloader:
# cat /usr/lib/syslinux/mbr.bin > /dev/sdb # cd /mnt # extlinux -i boot/
Отцепляем
/dev/md0 от временной точки монтирования:
# cd # umount /dev/md0 # sync
Теперь
нужно перегрузиться.
!!!
Внимательно: тут перезагрузку нужно
выполнить со ВТОРОГО ж.диска, изменив
очередь загрузки в BIOS.
Если
все было сделано правильно, то система
должна загрузиться уже с raid-массива
и точка монтирования «/» будет находиться
на /dev/md0.
# reboot
Итак,
после перезагрузки мы имеем все еще
рабочую систему, но уже загруженную с
настроенного raid-массива.
Осталось теперь подготовить sda
для использования в raid
и подключить туда его
разделы в качестве недостающих устройств.
Изменяем
тип файловых разделов sda на
«Linus raid autodetect»:
# echo -e "\nt\n1\nfd\nt\n2\nfd\nt\n3\nfd\nw\nx" | fdisk /dev/sda
Результат:
# fdisk -l /dev/sda
Disk /dev/sda: 500.1 GB, 500107862016 bytes 255 heads, 63 sectors/track, 60801 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 499 4008186 fd Linux raid autodetect /dev/sda2 500 998 4008217+ fd Linux raid autodetect /dev/sda3 999 60801 480367597+ fd Linux raid autodetect
Подключаем
недостающие разделы в Raid:
# mdadm -a /dev/md0 /dev/sda1 mdadm: hot added /dev/sda1 # mdadm -a /dev/md1 /dev/sda2 mdadm: hot added /dev/sda2 # mdadm -a /dev/md2 /dev/sda3 mdadm: hot added /dev/sda3
После
этого начинается долгий, но приятный
процесс синхронизации разделов Raid1, за
которым можно проследить:
# watch cat /proc/mdstat
Дожидаемся
окончания процесса, и остается еще два
важных действия, которые обеспечат
правильную работу системы с рейдом.
Копируем
конфигурацию запущенного рейда в
/etc/mdadm.conf:
# mdadm --detail --scan >> /etc/mdadm.conf
Редактируем
/etc/mdadm.conf так, чтобы вначале файла
обязательно присутствувала строка
«DEVICE partitions». Это необходимо для корректной
инициализации дисков при загрузке
компонентов рейда.
На
этом занавес можно закрывать и распускать
зал... :)
Комментариев нет:
Отправить комментарий