From: bk_man
Newsgroups: http://www.linux-os.ru/
Date: Mon, 22 Aug 2004 18:21:07 +0000 (UTC)
Subject: Конвертация обычной установки Linux в Software-ROOT-RAID1
В документе рассматривается пример конвертации Linux-системы,
установленной на один жесткий диск в Software-ROOT-RAID1
Предисловие
-----------
Важные данные всегда должны резервироваться - в противном случае это
неважные данные, т.к. они могут быть потеряны. К сожалению, в сервере
не всегда бывает доступен аппаратный RAID-контроллер или же он не
поддерживается текущим ядром. Вместе с тем, RAID не является заменой
резервированию данных, об этом тоже нужно помнить и своевременно
делать резервные копии на другой сервер.
Рассматриваемый случай
----------------------
Я рассматриваю здесь RAID1, но это может работать также для других
случаев (я этого не проверял). Я проделывал все нижеописанные
процедуры на сервере RX-300 производства Fujitsu-Siemens.
Диски были одинакового размера из стандартной поставки сервера, режим
HostRAID в SCSI-контроллере был отключен. Все операции производились
на дистрибутиве ALT Linux Compact версии 2.3, который был обновлен до
репозитария Sisyphus по состоянию на 20040517.
Для выполнения поставленной задачи нам потребуется следующий софт:
* установленные пакеты raidtools и mkinitrd
* Ремонтный загрузочный компакт-диск (флешка, ...) с установленными
raidtools и способный определить ваше железо (Knoppix 3.4 не смог
определить и подключить контроллер Adaptec AIC-7902W и поэтому
оказался не у дел). Я использую SystemRescueCD (http://www.sysresccd.org)
на основе дистрибутива Gentoo Linux.
Алгоритм работы
---------------
Пусть на /dev/sda есть два раздела:
$ sudo fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 73.5 GB, 73508513792 bytes
255 heads, 63 sectors/track, 8936 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 63 506016 82 Linux swap
/dev/sda2 * 64 8936 71272372+ 83 Linux
/dev/cdrom /mnt/cdrom auto user,iocharset=koi8-r,noauto,ro,exec 0 0
/dev/floppy /mnt/floppy auto user,iocharset=koi8-r,quiet,sync,codepage=866,noauto,umask=0,exec 0 0
Изменяем тип разделов на устройстве /dev/sda на fd для того, чтобы
ядро при старте могло определить массив:
# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 73.5 GB, 73508513792 bytes
255 heads, 63 sectors/track, 8936 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 63 506016 82 Linux raid autodetect
/dev/sda2 * 64 8936 71272372+ 83 Linux raid autodetect
Обновляем initrd.img для нашего ядра. Я делал это без ремонтного
набора, подсовывая на время работы команды mkinitrd файлы /etc/raidtab
и /etc/fstab с будущей конфигурацией RAID'а (потом их достаточно
переименовать, например в .old, чтобы эти файлы "не замечали"
initscripts и не делали ненужных вещей):
Contents of linuxrc:
#!/bin/sh
/bin/insmod -f /lib/modules/2.4.26-std-smp-alt1/kernel/drivers/scsi/scsi_mod.o
/bin/insmod -f /lib/modules/2.4.26-std-smp-alt1/kernel/drivers/scsi/sd_mod.o
/bin/insmod -f
/lib/modules/2.4.26-std-smp-alt1/kernel/drivers/scsi/aic7xxx/aic79xx.o
/bin/insmod -f /lib/modules/2.4.26-std-smp-alt1/kernel/drivers/md/raid1.o
/bin/insmod -f /lib/modules/2.4.26-std-smp-alt1/kernel/fs/jbd/jbd.o
/bin/insmod -f /lib/modules/2.4.26-std-smp-alt1/kernel/fs/ext3/ext3.o
/bin/raidautorun /safedev/md255
mkinitrd: Inode count: 55
mkinitrd: Image size: 892K
mkinitrd: Created image from tree: /root/tmp/initrd.dmjMQg4478/tree --> /root/tmp/initrd.dmjMQg4478/img
mkinitrd: Created romfs image file
mkinitrd: Installed ramdisk into /boot/initrd-raid1.img
open /dev/fb0: No such device
Ramdisk size: 268K
Необходимо проверить, что последней строкой в скрипте linuxrc является
/bin/raidautorun /safedev/md255, которая запускает массив. Без неё у
вас будет возникать ошибка
Kernel panic : VFS : Unable to mount root fs on 09:01.
Далее необходимо исправить конфигурацию LILO в файле /etc/lilo.conf :
boot=/dev/md1
raid-extra-boot=mbr-only
И для всех используемых ядер изменить параметр изменить корневую
файловую систему и вписать сделанный на предыдущем шаге initrd :
Далее следует сгенерировать и запустить наш массив (делать это нужно,
загрузившись с ремонтного набора):
# mkraid /dev/md0
# mkraid /dev/md1
Состояние массива можно наблюдать в файле /proc/mdstat. Там будет
отображаться информация о том, что массив работает в degraded mode.
Обновляем загрузчик:
# /sbin/lilo -v
Warning: using BIOS device code 0x80 for RAID boot blocks
Added 2426-raid1 *
The Master boot record of /dev/sda has been updated.
Перезагружаемся. Массив работает сейчас с одного диска, поэтому мы
должны подключить второй. Если диск не был подключен к серверу и
оборудование позволяет подключать SCSI-устройства "на лету", то
физически подключаем диск к серверу (при этом в syslog отображается
информация об этом: scsi0: Someone reset channel A). Для того, чтобы
устройство стало видно операционной системе, проделаем следующую
операцию:
где 1 - Id устройства на SCSI-шине. В документации к моему серверу
указано, что SCSI Id соотнесены со слотами для подключения жестких
дисков на постоянной основе и приведена схема какому гнезду какой
номер соответствует, поэтому советую вам обратиться к документации
сервера для уточнения данного вопроса.
После добавления устройства таким образом в syslog записывается
информация о имени устройства в операционной системе:
Строка Attached scsi disk sdb at scsi0, channel 0, id 1, lun 0
сообщает нам о том, что подключенный диск будет виден как /dev/sdb, а
строка sdb: unknown partition table сообщает о том, что скорее всего
был добавлен ни разу не использованный диск. Самое время разбить его
также, как и /dev/sda :
Диск подключен и процесс восстановления массива должен автоматически
запуститься. Наблюдать за ним можно при помощи вот такой нехитрой
команды:
# watch -n 5 cat /proc/mdstat
Проверяем, что тип разделов на /dev/sdb установлен в fd :
# fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 73.5 GB, 73508513792 bytes
255 heads, 63 sectors/track, 8936 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 63 506016 fd Linux raid autodetect
/dev/sdb2 * 64 8936 71272372+ fd Linux raid autodetect
После окончания восстановления (а можно и во время) осталось обновить
загрузчик на добавленном диске:
# /sbin/lilo -v
Warning: using BIOS device code 0x80 for RAID boot blocks
Added 2426-raid1 *
The Master boot record of /dev/sda has been updated.
Warning: /dev/sdb is not on the first disk
The Master boot record of /dev/sdb has been updated.
Напоследок осталось подправить файл /etc/raidtab - удалить из него
строки failed-disk 1. Не забывайте про данный файл. Он используется в
стартовых скриптах для запуска/останова устройств /dev/md?, поэтому
важно иметь содержимое этого файла в соответствии с вашей текущей
конфигурацией массива.
Готово!
Добавление и удаление дисков из работающего массива
---------------------------------------------------
Так случается, что диски иногда отказывают. :-(
Для начала необходимо отключить сбойный диск из массива (пусть это
будет /dev/sda для примера):
После этого необходимо отключить диск от операционной системы, для
чего необходимо выяснить его параметры на шине SCSI. Ядра ALT Linux
(начиная с 2.4.22) собираются со специальным патчем, который позволяет
это сделать:
Если у вас нет /proc/scsi/scsi_sd, то нужно обратиться к документации
сервера для выяснения какому слоту какой SCSI Id соответствует. Обычно
ядро нумерует устройства по порядку. Это значит, что если у вас есть
диски 0 0 0 0 и 0 0 3 0, то первый диск получит имя /dev/sda, а второй
- /dev/sdb - несмотря на то, что Id у него 3 а не 1.
После этого диск можно смело вытаскивать физически из сервера. Если в
массиве были резервные (spare) диски, то после выдачи команд
raidsetfaulty и raidhotremove автоматически начнется восстановление на
один из них. Если резервных дисков не было, то массив продолжит
работать в degraded mode.
Создано: bk_man <http://www.linux-os.ru/Members/bk_man>
Последнее изменение: 2004-05-21 03:22
379 Прочтений • [Конвертация обычной установки Linux в Software-ROOT-RAID1 (raid disk fs linux)] [08.05.2012] [Комментариев: 0]