Описание задачи
Условия:
- Имеется два одинаковых по размеру, пустых диска /dev/sda и /dev/sdb соответственно.
- Имеется третий диск, например /dev/sdc, с установленной операционной системой slackware.
На основе /dev/sda и /dev/sdb создать raid-массив первого уровня /dev/md0. Затем перенести на /dev/md0 операционную систему и настроить ее загрузку.
Дополнительные условия:
- На рабочем диске существует два раздела — корневой и подкачка.
- В качестве корневой файловой системы используется reiserfs.
- Предполагается, что используется стандартное ядро для slackware версии 2.6.xx, т.е. минимальная версия — Slackware 12. Однако, если очень хочется, существует возможность установки ядра из стандартных пакетов от новых версий slackware на более старые версии этой операционной системы.
Перед началом необходимо убедиться, что в рабочей slackware установлена утилита mdadm для управления программными raid-массивами. При ее отстутствии нужно установить пакет mdadm, который включется в состав дистрибутива начиная с Slackware 10.
Решение задачи
Шаг 1. Загрузка с внешнего носителя.
Загружаемся с SystemResсueCD или c Slax или чего-нибудь еще, чтобы получить полный доступ ко всем дискам и ни один из них не был бы текущим загрузочным.
Шаг 2. Создание таблицы разделов.
Сначала, с помощью команды:
cfdisk /dev/sda
создаем следующие разделы на первом пустом диске:
- /dev/sda1 — Раздел под raid-массив. Отводим под него большую часть диска. Установить признак «загрузочный». Задать тип раздела «Linux raid autodetect» (код fd).
- /dev/sda2 — Раздел под подкачку. Отводим под него половину от необходимого размера подкачки. Задать тип раздела «Linux swap» (код 82).
Обращаю внимание, что нельзя полностью заполнять разделами все доступное пространство диска. Т.к., несмортя на указанный одинаковый размер дисков, фактический их размер у разных производителей может не совпадать.
Пример того, что получилось:
# fdisk -l /dev/sda Device Boot Start End Blocks Id System /dev/sda1 * 1 115498 927737653+ fd Linux raid autodetect /dev/sda2 115499 116471 7815622+ 82 Linux swap
Затем копируем таблицу разделов с первого диска на второй:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Убеждаемся, что таблицы разделов на дисках /dev/sda и /dev/sdb идентичны:
# fdisk -l /dev/sda /dev/sdb Device Boot Start End Blocks Id System /dev/sda1 * 1 115498 927737653+ fd Linux raid autodetect /dev/sda2 115499 116471 7815622+ 82 Linux swap Device Boot Start End Blocks Id System /dev/sdb1 * 1 115498 927737653+ fd Linux raid autodetect /dev/sdb2 115499 116471 7815622+ 82 Linux swap
Шаг 3. Создание raid-массива.
Сначала, на всякий случай, очищаем из разделов возможные следы предыдущих raid-массивов:
mdadm --zero-superblock /dev/sda1 mdadm --zero-superblock /dev/sdb1
Теперь, собственно, создаем raid-массив:
mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/sda1 /dev/sdb1
Здесь запустится процесс синхронизации двух дисков, входящих в массив, который можно отслеживать с помощью команды:
cat /proc/mdstat
Этот процесс никак не ограничивает работу с уже созданным массивом. Т.е. блочное устройство /dev/md0 уже доступно и с ним можно работать. Можно даже перезагружать компьютер. Но, конечно, в полноценную работу raid-массив встанет самостоятельно, когда синхронизация будет завершена.
Шаг 4. Копирование операционной системы.
Форматируем разделы:
mkfs.reiserfs /dev/md0 mkswap /dev/sda2 mkswap /dev/sdb2
Монтируем raid-массив:
mkdir /mnt/md0 mount /dev/md0 /mnt/md0
Монтируем раздел с рабочей системой:
mkdir /mnt/sdc1 mount /dev/sdc1 /mnt/sdc1
Копируем содержимое рабочей системы на raid-массив:
cp -aT /mnt/sdc1 /mnt/md0
Шаг 5. Настройка скопированной системы.
Сохраняем конфигурацию raid-массива:
mdadm -D --scan >> /mnt/md0/etc/mdadm.conf
Редактируем в файле /mnt/md0/etc/fstab строчки монтирования корневого раздела и раздела подкачки:
/dev/md0 / reiserfs defaults 1 1 /dev/sda2 swap swap pri=1,defaults 0 0 /dev/sdb2 swap swap pri=1,defaults 0 0
Шаг 6. Настройка загрузки с raid-массива.
Редактируем /mnt/md0/etc/lilo.conf, заменяем строчку:
boot = /dev/XXXN
на:
boot = /dev/md0
И добавляем строчку:
raid-extra-boot=mbr
Далее действуем в зависимости от типа стандартного ядра slackware.
Шаг 6.1. Используется huge ядро.
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-huge-smp-2.6.27.7-smp root = /dev/md0 label = gener-raid read-only
Версия ядра может быть другой, в зависимости от используемой версии slackware.
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 6.2. Используется generic ядро.
Создаем файл /mnt/md0/etc/mkinitrd.conf, содержащий строки:
CLEAR_TREE="1" OUTPUT_IMAGE="/boot/initrd-generic-2.6.27.7-smp-raid.gz" KERNEL_VERSION="2.6.27.7-smp" MODULE_LIST="reiserfs" ROOTDEV="/dev/md0" RAID="1"
Генерируем initrd-файл:
chroot /mnt/md0 /sbin/mkinitrd -F
В /mnt/md0/etc/lilo.conf добавляем строки:
image = /boot/vmlinuz-generic-smp-2.6.27.7-smp initrd = /boot/initrd-generic-2.6.27.7-smp-raid.gz root = /dev/md0 label = gener-raid read-only
Запускаем установку загрузчика lilo на оба диска в raid-массиве:
chroot /mnt/md0 /sbin/lilo
Шаг 7. Проверка.
Выключаем компьютер. Отсоединяем теперь уже не нужный диск /dev/sdc. Включаем компьютер и убеждаемся что загрузка операционной системы происходит нормально с любого диска из raid-массива.
1 комментарий:
Все супер, только после переноса на RAID пароль для root перестал воспринимать. Думал может я что-то забыл, перезагрузился снова с SDC - пароль правильно помнил. Но на райде он не работал...
Отправить комментарий