среда, 13 ноября 2013 г.

Программный рэйд на RHEL4

Достался рабочий сервер Oracle.
Стоит задача поднять рэйд.
Аппаратного нет, поэтому создаем программный.

Все работы производятся прямо на боевой системе, база данных остановлена.

Смотрим имеющиеся разделы (/dev/sda), создаем на втором диске (/dev/sdb) разделы для программного raid:
VBNKSB->/home/it3# fdisk -l

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          13      104394+  83  Linux
/dev/sda2              14      121600   976647577+  8e  Linux LVM

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sdb2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sdb3            1037      121601   968438362+  fd  Автоопределение Linux raid

После создания меняем тип разделов на fd (Linux raid), устанавливаем загрузочный флаг на /dev/sdb1.
К стати, точки монтирования спланированы следующим образом:
/dev/sdb1 - /boot
/dev/sdb2 - /swap
/dev/sdb3 - /
(в последствии /dev/sdb1 станет /dev/md0, /dev/sdb2 -> /dev/md1 и т.д.)


Сохраняем изменения, перезагружаем систему.

Создадим устройства MD на втором диске, но перед созданием желательно затереть нулями разделы:
dd if=/dev/zero of=/dev/sdb1 bs=4096 && dd if=/dev/zero of=/dev/sdb2 bs=4096 && dd if=/dev/zero of=/dev/sdb3 bs=4096

Причем, /dev/sdb3 достаточно большой и его затирание протекает долго, поэтому можно ограничиться несколькими секундами после запуска последней команды.

Создаем устройства md:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
 # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdb2 missing
 # mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing

Создадем файловые системы на RAID:

  # mkfs.ext3 /dev/md0 &&  mkfs.ext3 /dev/md2 && mkswap /dev/md1

Клонируем загрузочный раздел боевого винта на загрузочный раздел raid:
# dd if=/dev/sda1 of=/dev/md0 bs=4096

Монтируем корневой раздел raid:
# mkdir /mnt/root
# mount /dev/md2 /mnt/root

Копируем систему на новый раздел:
# cp -axvp / /mnt/root

 Редактируем fstab для монтирования root раздела с RAID:
# nano /mnt/root/etc/fstab
вместо строки 
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
пишем
/dev/md2                /                       ext3    defaults        1 1

вместо строки
LABEL=/boot             /boot                   ext3    defaults        1 2
пишем 
/dev/md0                /boot                   ext3    defaults        1 2

вместо
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
пишем
/dev/md1                /swap                   swap    defaults        0 0

Создаем загрузочный образ для RAID:
# mkdir /mnt/root/initrd-raid
# cd /mnt/root/initrd-raid
# mkinitrd -v --fstab=/mnt/root/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r`
# cd /mnt/root/initrd-raid
# zcat initrd-`uname -r`-raid.img | cpio -i

Редактируем файл init:
# nano init
добавляем после
   raidautorun /dev/md2
две строки:
raidautorun /dev/md0
raidautorun /dev/md1

Монтируем новый загрузочный раздел в /mnt/root/boot
mount /dev/md0 /mnt/root/boot

Копируем новый диск в каталог /mnt/boot
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/root/boot/initrd-`uname -r`-raid.img
# rm /mnt/boot/initrd-2.6.18-92.el5.img
# ln -s initrd-`uname -r`-raid.img /mnt//root/boot/initrd-2.6.18-92.el5.img

Редактируем загрузочное меню:
nano /mnt/root/boot/grub/grub.conf

изменяем строку  kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/xxx
на
 kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/md2 rhgb quiet

Устанавливаем grub на RAID
# for i in dev proc sys; do mount -o bind /$i /mnt/root/$i; done
# chroot /mnt/root
# grub-install --recheck --no-floppy /dev/md0

Выходим из chroot
# Ctrl+d

Размонтируем файловые системы!!!
# for i in dev proc sys; do umount /mnt/root/$i; done
# umount /mnt/root/boot
# umount /mnt/root

Перезагружаем сервер и в BIOS выбираем загрузку с нужного нам диска.
Убеждаемся, что загрузились с диска, являющегося членом RAID-массива

# df -h
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
/dev/md2              910G  721G  143G  84% /
/dev/md0               99M   14M   80M  15% /boot
tmpfs                 5,9G     0  5,9G   0% /dev/shm

Копируем куда-нибудь таблицу разделов диска, являющегося членом RAID-массива:

# fdisk -l /dev/sdb

Диск /dev/sdb: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sdb1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sdb2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sdb3            1037      121601   968438362+  fd  Автоопределение Linux raid

Создаем точно такие же разделы на /dev/sda:

# fdisk /dev/sda

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          13      104394+  83  Linux
/dev/sda2              14      121600   976647577+  8e  Linux LVM

Команда (m для справки): d
Номер раздела (1-4): 2

Команда (m для справки): d
Выбранный раздел 1

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 1
Первый цилиндр (1-121601, по умолчанию 1):
Используется значение по умолчанию 1
Последний цилиндр или +size или +sizeM или +sizeK (1-121601, по умолчанию 121601): 62

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          62      497983+  83  Linux

Команда (m для справки): t
Выбранный раздел 1
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 1 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1               1          62      497983+  fd  Автоопределение Linux raid

Команда (m для справки): a
Номер раздела (1-4): 1

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 2
Первый цилиндр (63-121601, по умолчанию 63):
Используется значение по умолчанию 63
Последний цилиндр или +size или +sizeM или +sizeK (63-121601, по умолчанию 121601): 1036

Команда (m для справки): t
Номер раздела (1-4): 2
Шестнадцатеричный код (введите L для получения списка кодов): 82
Системный тип раздела 2 изменен на 82 (Linux своп / Solaris)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   82  Linux своп / Solaris

Команда (m для справки): t
Номер раздела (1-4): 2
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 2 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   fd  Автоопределение Linux raid

Команда (m для справки): n
Действие команды
   e   расширенный
   p   основной раздел (1-4)
p
Номер раздела (1-4): 3
Первый цилиндр (1037-121601, по умолчанию 1037):
Используется значение по умолчанию 1037
Последний цилиндр или +size или +sizeM или +sizeK (1037-121601, по умолчанию 121601):
Используется значение по умолчанию 121601

Команда (m для справки): t
Номер раздела (1-4): 3
Шестнадцатеричный код (введите L для получения списка кодов): fd
Системный тип раздела 3 изменен на fd (Автоопределение Linux raid)

Команда (m для справки): p

Диск /dev/sda: 1000.2 ГБ, 1000204886016 байт
255 heads, 63 sectors/track, 121601 cylinders
Единицы = цилиндры по 16065 * 512 = 8225280 байт

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *           1          62      497983+  fd  Автоопределение Linux raid
/dev/sda2              63        1036     7823655   fd  Автоопределение Linux raid
/dev/sda3            1037      121601   968438362+  fd  Автоопределение Linux raid

Команда (m для справки): w
Таблица разделов была изменена!

Вызывается ioctl() для перечитывания таблицы разделов.

ПРЕДУПРЕЖДЕНИЕ: Перечитывание таблицы разделов завершилось неудачей с ошибкой 16: Устройство или ресурс занято.
Ядро все еще использует старую таблицу.
Новая таблица будет использована при следующей перезагрузке.
Синхронизируются диски.


Перезагружаем сервер...
# shutdown -r now

 Теперь можно включать первый диск в RAID:

# mdadm -a /dev/md0 /dev/sda1
mdadm: added /dev/sda1
# mdadm -a /dev/md1 /dev/sda2
mdadm: added /dev/sda2
# mdadm -a /dev/md2 /dev/sda3
mdadm: added /dev/sda3

Процесс синхронизации (ребилда) массива можно смотреть с помощью команды:
# watch -n 1 cat /proc/mdstat

После завершения ребилда вносим последние изменения в настройки:

# mdadm --detail --scan >> /etc/mdadm/mdadm.conf

И перезагружаемся. Для корректной загрузки в случае отказа одного из дисков, требуется настроить в BIOS загрузку системы с обоих жестких дисков по-очереди.

Вот и все  на этом настройка software RAID1 завершена. Все необходимые команды для работы с RAID можно найти здесь http://xgu.ru/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D1%8B%D0%B9_RAID_%D0%B2_Linux#.D0.94.D0.BE.D0.B1.D0.B0.D0.B2.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BD.D0.BE.D0.B2.D0.BE.D0.B3.D0.BE_.D0.B4.D0.B8.D1.81.D0.BA.D0.B0

Основа для данной статьи взята отсюда >> http://www.mahno.su/jexr/http://pastebin.com/psaWg7QK

Как выполнить проверку целостности программного RAID-массива md0:
echo 'check' >/sys/block/md0/md/sync_action

Как посмотреть нашлись ли какие-то ошибки в процессе проверки программного RAID-массива по команде check или repair:
cat /sys/block/md0/md/mismatch_cnt

Для наблюдение за md-массивами добавляем в /etc/rc.d/rc.local следующую строку:

mdadm --monitor --scan --delay=120 -m admin@example.com --daemonise > /var/run/mdadm/mdadm.pid

Комментариев нет:

Отправить комментарий