CreateMdRAID1onLiveSystem: различия между версиями
(Import from freesource.info) |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
[[Category:Admin]] | [[Category:Admin]] | ||
== Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе == | == Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе == | ||
Строка 11: | Строка 10: | ||
* Ядро 2.6 и Sisyphus | * Ядро 2.6 и Sisyphus | ||
Шаги: | |||
=== Шаги: === | |||
1. Инсталлируемся на первый HDD (<tt>/dev/sda</tt>), причем он должен иметь наименьший размер из двух доступных. | 1. Инсталлируемся на первый HDD (<tt>/dev/sda</tt>), причем он должен иметь наименьший размер из двух доступных. | ||
Строка 108: | Строка 109: | ||
21. Пробуем отключить каждый HDD по очереди и загрузиться. | 21. Пробуем отключить каждый HDD по очереди и загрузиться. | ||
=== Неактуально? === | |||
В некоторых случаях устройства <tt>/dev/md*</tt> будут не доступны. В данном случае могут помочь: | |||
<pre>service udevd stop</pre> | <pre>service udevd stop</pre> | ||
и/или | и/или | ||
<pre>/lib/mkinitd/busybox raidautorun /dev/mdX</pre> | <pre>/lib/mkinitd/busybox raidautorun /dev/mdX</pre> | ||
=== Как увеличить скорость синхронизации RAID1? === | |||
<pre> | |||
echo 200000 > /proc/sys/dev/raid/speed_limit_max | echo 200000 > /proc/sys/dev/raid/speed_limit_max | ||
echo 200000 > /proc/sys/dev/raid/speed_limit_min | echo 200000 > /proc/sys/dev/raid/speed_limit_min | ||
</pre> | |||
Версия от 18:35, 30 июля 2008
Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе
Пишу по памяти, кое-что мог забыть.
Дано:
- Два HDD
- Необходимость создания md RAID1
- Инсталлятор, который не умеет создавать и ставиться на md RAID (текущий от Compact-а, к примеру)
- Ядро 2.6 и Sisyphus
Шаги:
1. Инсталлируемся на первый HDD (/dev/sda), причем он должен иметь наименьший размер из двух доступных.
2. Создаем такие же разделы с такими же размерами на втором HDD:
sfdisk -d /dev/sda | sfdisk /dev/sdb
3. Запускаем fdisk /dev/sdb и проставляем всем разделам тип FD (Linux RAID Auto)
4. Создаем на каждом разделе degraded md RAID1 (нумерацию удобно начинать с единицы, по номерам разделов на HDD):
mdadm -Cv /dev/md1 -b internal --level=1 --raid-devices=2 missing /dev/sdb1
и т.д. NB: -b internal включает отслеживание использования блоков на массиве, т.е. при ресинхронизации массива будет синкаться не весь массив целиком, а только блоки с данными.
5. Создаем на каждом массиве нужную файловую систему:
mkfs.ext3 -E stride=16 /dev/md1
и т.д. NB: для достижения более высокой производительности можно использовать опцию mkfs.ext3 -E stride=, т.е. подогнать ФС под размер страйпа. stride=stripe/block-size. Т.е. в нашем случае это 64/4=16 См. http://wiki.centos.org/HowTos/Disk_Optimization
6. Судя по всему, swap тоже нужно создавать на raid-массиве:
mkswap /dev/mdX
7. Инсталлируем grub (нынешнее lilo тоже умеет загрузку с raid)
8. Создаем новый образ initrd:
mkinitrd --with-raid --with raid1 /boot/initrd-`uname -r`-raid1.img `uname -r`
9. Монтируем новый root (который /dev/mdX) куда-нибудь в /mnt/raid1/root, создаем в нем нужные каталоги из нашего текущего корня, далее в них монтируем новые разделы, если такие есть (то бишь, создаем /mnt/raid1/root/var, к нему монтируем какой-нибудь /dev/md6, уже после этого создаем /mnt/raid1/root/var/log и к нему уже монтируем какой-нибудь /dev/md7)
10. Копируем все файлы с текущего HDD на новый (способов много, cp -ax, cpio, rsync и т.д), не забыл пропустить /proc и /sys (но создав их в новом root). Пример с rsync:
#!/bin/sh renice 19 -p $$ ||: ionice -c3 -p$$ ||: rsync -vaPHx --delete --delete-after --numeric-ids / /mnt/newroot/ rsync -vaPHx --delete --delete-after --numeric-ids /usr /mnt/newroot/usr rsync -vaPHx --delete --delete-after --numeric-ids /var /mnt/newroot/var
Предполагается, что у нас на отдельные разделы вынесены /, /usr, /var. Применён ключ -x у rsync, чтобы он не выходил за границы одной файловой системы. Полезно, т.к. у нас могут быть примонтированы разные левые ресурсы куда-нибудь в /mnt, и ещё используются bind-mounts. Для уменьшения downtime системы можно выполнить такой rsync два раза - на живой системе и потом перейдя в init 1
11. Делаем chroot /mnt/raid1/root
12. Правим /etc/fstab, изменяя все разделы /dev/sdaX на массивы /dev/mdX
13. Создаем в #/boot/grub/menu.lst## записи вида:
# Boot automatically after 3 secs. timeout 3 # By default, boot the first entry. default 2614-vs26-smp-raid1 (hd0,0) title 2614-vs26-smp-raid1 (hd0,0) root (hd0,0) kernel (hd0,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal initrd (hd0,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img title 2614-vs26-smp-raid1 (hd1,0) root (hd1,0) kernel (hd1,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal initrd (hd1,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img
14. Инсталлируем grub.
#!/bin/sh grub --batch <<EOF device (hd0) /dev/sda root (hd0,0) # (0 - это тот раздел, где у вас /boot, обычно /dev/sdX1, в grub-е просто нумерация с 0) setup (hd0) device (hd0) /dev/sdb root (hd0,0) setup (hd0) quit EOF
15. Отмонтируем все и перегружается. Если все правильно, то вы должны загрузиться с md raid1 массивов, которые пока располагаются на втором HDD
16. Если все работает, то запускаем fdisk /dev/sda и проставляем всем разделам тип FD (Linux RAID Auto)
17. Далее делаем для каждого raid-массива:
mdadm /dev/md1 --add /dev/sda1
и т.д.
18. После этого регулярно поглядываем в /proc/mdstat, нам нужно дождаться, когда ядро синхронизирует все массивы (при этом в /proc/mdstat исчезнут все упоминания о прогрессе синхронизации)
19. Перегружаемся и, если все хорошо, прописываем в /etc/mdadm.conf что-то вроде:
MAILADDR root PROGRAM /usr/sbin/mdadm-syslog-events DEVICE partitions ARRAY /dev/md1 devices=/dev/sda1,/dev/sdb1 ARRAY /dev/md2 devices=/dev/sda2,/dev/sdb2
и т.д.
20. Включаем сервис mdadm
21. Пробуем отключить каждый HDD по очереди и загрузиться.
Неактуально?
В некоторых случаях устройства /dev/md* будут не доступны. В данном случае могут помочь:
service udevd stop
и/или
/lib/mkinitd/busybox raidautorun /dev/mdX
Как увеличить скорость синхронизации RAID1?
echo 200000 > /proc/sys/dev/raid/speed_limit_max echo 200000 > /proc/sys/dev/raid/speed_limit_min