Заинтересовался темой и сделал лабораторную работу, привожу отчет:
Дано:
Виртуалка - в ней ubuntu server 11.10 (практически голый - т.е. никакого серверного ПО не ставил)
Диск 2,5Гб побит так - 2 ГБ - корень, 500мб своп,
Требуется: - добавив второй диск создать raid1 и перенести на него систему (и корень и своп).
Действия:
Создаю второй диск 2,5ГБ цепляю его к виртуалке вторым, гружусь.
Первым делом форматирую второй винт
#fdisk /dev/sdb
n
p
1
<enter>
<enter>
w
(если на диске что-то было, то сначала d 1 d 2 ....)
и создаю на нем массив:
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
Массив создается с пропущенным диском и поэтому работает в degrade режиме. ВНИМАНИЕ Массив делается не на диске, а на разделе - зачем - смотри комментарий №1
Далее создаю на массиве разделы под будущую систему
создаю такие же разделы 2Гб под корень и остальное под своп (sfdisk -d /dev/sda | sfdisk /dev/md0 - может не прокатить т.к. диск массива - это раздел на диске, а значит в нем минимум на один трек меньше объем).
Создаю файловые системы на разделах зеркала
#mkfs.ext4 /dev/md0p1
# mkswap /dev/md0p2
Монтирую будущий корень и копирую в него текущий корень
# mount /dev/md0p1 /mnt
# cp -dpRx / /mnt/
После этого прицепляю системные каталоги к новому корню, что бы потом сделать chroot в новый корень (это важно - зачем объясню в комментарии №2). И собственно чрутаюсь в новый корень.
# mount --bind /proc /mnt/proc
# mount --bind /dev /mnt/dev
# mount --bind /sys /mnt/sys
# mount --bind /run /mnt/run
# chroot /mnt
Вот я уже в будущм окружении (с корнем на раиде) но пока в нем копия дискового корня. Приступим...
Для начала смотрим UUID-ы разделов на раиде и прописываем их в fstab (мне было лень мудрить с оснасткой на виртуальном сервере и я просто дописал вывод ls в fstab, а потом отредактировал его.
#/ls -l /dev/disk/by-uuid |grep md >> /etc/fstab
#/nano /etc/fstab (там комментирую старые корень и своп и используя скопированные туда uuid-ы прописываю новый корень и своп по образу и подобию старых но с uuid-ами раидных разделов)
Затем я создаю новую конфигурацию Груба и проверяю, что в конфиг прописан раидный uuid для корня, и ставлю первую стадию груба на второй диск (который несет на себе часть зеркала).
#/update-grub
#/cat /boot/grub/grub.cfg
#/grub-install /dev/sdb
Очень важный шаг! нужно прописать (хотябы на время) конфигурацию mdadm, которая позволит загрузится с деградированного массива (а у нас пока он именно такой)
#/dpkg-reconfigure mdadm (там со всем соглашаемся, включаяя последний шаг, где спрашивают - позволять ли грузится системе на деградированном массиве)
dpkg-reconfigure вызовет перестройку initrd, но так как мы в chroot то он его перезапишет только в раидном корне (на реальном корне initrd сохранится как он был)
Ну собственно и все - система на раиде готова. Можно перегружатся и выбрать в BIOS загрузочным второй диск, или можно вернутся в реальную систему и обновить GRUB - он найдет вторую систему установленную на раиде и включит ее свое меню.
#/exit
# update-grub
# reboot
Перегрузившись в новую систему остается только довесить в раид первый диск и обновить на первом диске первую стадию груба.
# fdisk /dev/sda
(там убиваем старые разделы и создаем один новый - на весь объем)
# mdadm --manage /dev/md0 --add /dev/sda1
# grub-install /dev/sda
После чего сморим через cat /proc/mdstat как перестраивается наш деградированный массив в полноценно рабочий.
Результат: Система на раиде.
Проверка: гашу виртуалку, отсоединяю первый диск, гружусь - норма (массив деградированный на втором диске, груб стартанул со второго диска). Снова гашу - подцепляю обнуленный второй диск, создаю на нем MBR, раздел, и добавляю его в массив (как выше добавлял sda1) - система в нормальном режиме.
Повторяю то-же но вырывая и обнуляя второй диск - все работает.
ПРОФИТ!!

Комментарии:
№1: Если вы создадите массив на весь диск - то на диске может быть занят первый трек - и грубу некуда будет вставать. А кроме того Груб вообще не понимает что на диске творится когда на нем раид стоит и не может встать туда. Другой (на мой взгляд - неправильный) вариант - создавать на каждый раздел - свой массив. Идеологически - массив это диск, а не раздел, и если вы, имея массив, запустите fdisk -l то он вам на каджый раид массив выдаств информацию именно как о диске и будет на каждим массиве искать таблицу разделов.
№2: chroot в новый корень на этапе настройки позволяет сделать все настройки в новом корне(который на раиде) и не трогать текущий (который на простом диске), что позволит организовать загрузку как с корнем в раиде, так и с корнем на диске. Это может потребоваться если мы что-то намудрим в настройке нового раидного корня и не сможем загрузится в раидную версию нашей системы. Тогда остается шанс откатится полностью назад еще одной перезагрузкой.
ВАЖНЫЙ КОММЕНТАРИЙ КО ВСЕЙ РАБОТЕ: работа проводилась на витруалке и на сервере без какой-либо нагрузки (ни ПО никакого серверного не стояло, ни каких сервисов сервер не предоставлял и не использовался). Поэтому в момент копирования корня и после перезагрузки в раидую версию системы - ничего криминального не произошло. При наличии рабочих серверов это копирование может стать проблемой - т.к. данные в реальном корне уйдут по времени от данных на раидном, и перезагрузка "отбросит" системы на сервере в момент времени, когда была сделана копия. А кроме того - такое копирование может вообще разрушить целостность данных севисов т.к. разные файлы будут копироваться в разное время - тут надо копать либо в сторону FS которые могут делать снепшоты? Либо корень системы копировать а данные приложений переносить другими средствами (например для базы данных можно сделать реплику на раидном диске, и тогда сервис будет недоступен только на время перезагрузки, но важно настроит реплику что бы она нормально поднялась на новом корне, при недоступной части которая останется на оригинальном разделе, который при перезагрузке в "раидную систему" просто не будет смонтирован... Хотя и это можно предусмотреть, если старый раздел с данными монтировать на место где был смонтирован раидный раздел с данными во время настройки)
Пользователь решил продолжить мысль 14 Февраля 2012, 00:04:02:
Пара интересных моментов:
update-grub берет данные о корне (откуда грузить ядро и initrd) из fstab и совершенно замечателно составляет конфиг для загрузки с раидного кроня (или /boot).
mdadm совсем не критичен к типам разделов - их менять не обязательно как это было по мануалу во второй ссылке. Но для красоты решения можно и поменять - что бы они корректно показывались в дисковых утилитах.
Пользователь решил продолжить мысль 14 Февраля 2012, 00:07:23:
С remount - ничего не получилось

- смонтировать то второй корень через --bind можно, а вот отцепить корень оригинальный или в ro его перемонтировать - не выходит - дофигищи процессов держат на нем открытые на чтение файлов

.