Пишу по памяти, кое-что мог забыть.
Дано:
Шаги:
1. Инсталлируемся на первый HDD (/dev/sda), причем он должен иметь наименьший размер из двух доступных.
2. Создаем такие же разделы с такими же размерами на втором HDD:
3. Запускаем fdisk /dev/sdb и проставляем всем разделам тип FD (Linux RAID Auto)
4. Создаем на каждом разделе degraded md RAID1 (нумерацию удобно начинать с единицы, по номерам разделов на HDD):
и т.д.
NB: -b internal включает отслеживание использования блоков на массиве, т.е. при ресинхронизации массива будет синкаться не весь массив целиком, а только блоки с данными.
5. Создаем на каждом массиве нужную файловую систему:
и т.д.
NB: для достижения более высокой производительности можно использовать опцию mkfs.ext3 -E stride=, т.е. подогнать ФС под размер страйпа. stride=stripe/block-size. Т.е. в нашем случае это 64/4=16
См. http://wiki.centos.org/HowTos/Disk_Optimization
6. Судя по всему, swap тоже нужно создавать на raid-массиве:
7. Инсталлируем grub (нынешнее lilo тоже умеет загрузку с raid)
8. Создаем новый образ initrd:
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:
Предполагается, что у нас на отдельные разделы вынесены /, /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## записи вида:
14. Инсталлируем grub.
15. Отмонтируем все и перегружается. Если все правильно, то вы должны загрузиться с md raid1 массивов, которые пока располагаются на втором HDD
16. Если все работает, то запускаем fdisk /dev/sda и проставляем всем разделам тип FD (Linux RAID Auto)
17. Далее делаем для каждого raid-массива:
и т.д.
18. После этого регулярно поглядываем в /proc/mdstat, нам нужно дождаться, когда ядро синхронизирует все массивы (при этом в /proc/mdstat исчезнут все упоминания о прогрессе синхронизации)
19. Перегружаемся и, если все хорошо, прописываем в /etc/mdadm.conf что-то вроде:
и т.д.
20. Включаем сервис mdadm
21. Пробуем отключить каждый HDD по очереди и загрузиться.
Это, похоже, уже не актуально:
p.s. В некоторых случаях устройства /dev/md* будут не доступны. В данном случае могут помочь:
и/или
FIXME
How to speed up raid1 resync ?
Just echo large numbers into both min and max resync speed proc entries:
/proc/sys/dev/raid/spped_limit_max and speed_limit_min
e.g. as root do:
echo 200000 > /proc/sys/dev/raid/speed_limit_max
echo 200000 > /proc/sys/dev/raid/speed_limit_min
And watch the speed fly up till it maxes out your hardware. (-:
The above will set both speeds to 200MiB/s which ought to be more than
your devices can do...
swap не имеет смысла держать на райд, лучше подключать как дополнительный swap раздел
Своп может иметь смысл держать на зеркале, если не хочется ездить к вставшей колом при вылетании диска машинке.
А так — да, раскидывание свопов по менее используемым шпинделям при помощи pri= в опциях fstab помогает.
Ещё нюанс: блокдевайсы при переносе на софтRAID меньше становятся на raid superblock, ext2/3 следует подресайзить, xfs — сразу делать чуть меньше.