Перенос работающей системы на софтовый RAID1 без потери данных
Здесь хаутушка (немного устаревшая, но всё ещё полезная) по переносу работающей linux-системы на программный RAID1.
————————————————
Смотрим таблицу разделов:
fdisk -l
Диск /dev/hda: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/hda1 * 1 9663 77618016 83 Linux
/dev/hda2 9664 9728 522112+ 82 Linux своп / Solaris
Диск /dev/hdb: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
По полученным данным видно, что установлены два идентичных жестких диска объемом 80 Гб. На первом диске создано 2 раздела: корневая файловая система и SWAP-раздел. Второй жесткий диск абсолютно пуст. Диски определены системой как hda и hdb.
Первым делом нам необходимо создать таблицу разделов на втором диске, идентичной первому.
sfdisk -d /dev/hda | sfdisk /dev/hdb
Опция -d делает дамп таблицы разделов.
Если Вы получите сообщение об ошибке используйте опцию —force.
Посмотрим что получилось:
fdisk -l
Диск /dev/hda: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/hda1 * 1 9663 77618016 83 Linux
/dev/hda2 9664 9728 522112+ 82 Linux своп / Solaris
Диск /dev/hdb: 80.0 ГБ, 80026361856 байт
255 heads, 63 sectors/track, 9729 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт
Устр-во Загр Начало Конец Блоки Id Система
/dev/hdb1 * 1 9663 77618016 83 Linux
/dev/hdb2 9664 9728 522112+ 82 Linux своп / Solaris
Видно, что таблица разделов на втором диске полностью соответствует таблице разделов на первом диске.
Теперь изменим тип таблицы разделов на втором диске на Linux raid autodetect:
fdisk /dev/hdb
На запрос введем t. Пункт t – это изменение id системы раздела.
Выбираем номер раздела (напомню в нашем случае их 2).
Вводим шестнадцатеричный id код. Т.к. нам нужно Linux raid autodetect, то выбираем fd.
То же самое повторяем и для второго раздела.
Теперь записываем таблицу разделов на диск и выходим, выбрав опцию w.
Теперь загоним разделы нашего второго диска в массивы. Статус RAID намеренно выбран degraded.
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/hdb1
Если все успешно, то получаем сообщение:
mdadm: array /dev/md0 started.
Если при попытке повторить то же самое для второго раздела:
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/hdb2
получаем сообщение об ошибке:
mdadm: error opening /dev/md1: No such file or directory
То, воспользуемся опцией —auto:
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/hdb2 --auto=yes
И получим сообщение, что операция прошла успешно:
mdadm: array /dev/md1 started.
Теперь выполним команду cat /proc/mdstat и убедимся, что наш деградировавший рейд работает:
# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb2[1]
522048 blocks [2/1] [_U]
md0 : active raid1 hdb1[1]
77617920 blocks [2/1] [_U]
unused devices:
#
По статусу _U видим, что с первым диском у нас проблемы, что естественно, ведь его в массиве нет, а вот со вторым все ОК.
Теперь создадим файловые системы в наших массивах: ext3 в первом массиве и swap по втором:
# mkfs.ext3 /dev/md0
# mkswap /dev/md1
Теперь создадим директорию для монтирования первого массива и смонтируем его туда:
# mkdir /mnt/md0
# mount /dev/md0 /mnt/md0/
Создаем файл конфигурации mdadm – /etc/mdadm.conf:
# vim /etc/mdadm.conf
И вносим в него строку:
DEVICE partitions
Теперь заносим информацию о RAID массивах в файл конфигурации mdadm:
mdadm --detail --scan >> /etc/mdadm.conf
Теперь правим файл /etc/fstab:
# vim /etc/fstab
Меняем hda1 на md0 и hda2 на md1
Теперь необходимо отредактировать конфигурационный файл загрузчика GRUB:
# vim /boot/grub/grub.conf
Делаем две копии конфигурации текущего раздела.
Значения которые подлежат изменению подчеркнуты красным.
Создаем новый образ initrd командой:
# mkinitrd /boot/initrd-`uname -r`-raid1.img `uname -r`
(Обычно не требуется, т.к. генерация initrd с моддержкой mdadm происходит приустановке mdadm, но всё же вдруг кому понадобится)
Теперь переносим данные нашей системы на массив:
# cp -dpRx / /mnt/md0/
(Вообще я бы воспользовался rsync и mount —bind, но не важно)
Теперь настроим загрузчик на второй диск, введя команду grub:
# grub
Работать будем с меню GRUB:
grub> root (hd0,0)
grub> setup (hd0)
grub> root (hd1,0)
grub> setup (hd1)
grub> quit
Теперь перезагружаемся и выбираем для загрузки второе ядро.
Затем изменим тип таблицы разделов на перовом диске на Linux raid autodetect, так же, как делали с первым.
После добавляем первый раздел на первом диске в наш первый массив:
# mdadm --add /dev/md0 /dev/hda1
И второй:
# mdadm --add /dev/md1 /dev/hda2
Сейчас начался ребилдинг массива. Процесс достаточно длительный и зависит от емкости диска. За процессом можно наблюдать:
# watch cat /proc/mdstat
Теперь выполним команду cat /proc/mdstat и убедимся, что наш первый диск добавлен в массив.
Следующим шагом нам необходимо изменить файл конфигурации mdadm:
(Обычно это не требуется и всё работвет на автомате и без этого)
# vim /etc/mdadm.conf
Там необходимо удалить/закомментировать строки с параметрами дисков.
Сохраняем изменения и выходим.
Теперь соберем новые данные о массивах:
# mdadm --detail --scan >> /etc/mdadm.conf
И пересоберем образ initrd. Обратите внимание на опцию -f, она позволит перезаписать существующие данные.
# mkinitrd -f /boot/initrd-`uname -r`-raid1.img `uname -r`
Перезагружаемся и выбираем первое ядро при загрузке.
Система загрузилась, продолжаем работать.
На этом все.
—-
В основном стырено отсюда
На самом деле лучше сделать один md0 метров на 300 для /boot и md1 для lvm, внутри которого уже всё и крутится, но если надо перенести именно то, что есть – выбирать не приходится.
| опубликовано: Июн 13, 14:23