Friday, October 17, 2014

Настройка RAID1 GRUB 2 в Debian 6


Создан: 21 сентября 2012
Есть два идентичных жестких дисков. 
/dev/sda (установлена система) и /dev/sdb
Необходимо создать raid1 массив ( чтобы при выходе одного из винтов система смогла легко загрузиться ). 
Т.е мы создадим raid1 устройство включим в него /dev/sdb – скопируем на него систему, и после удачной перезагрузки с raid1 подключим к нему также и /dev/sda
Приступим :
#apt-get install initramfs-tools mdadm
>> 
Не обязательно так как по крайней мере модуль raid1 уже загружен На базе этого списка можно сделать скрипт который загрузит необходимые модули, сохраните этот код в файл modadd и сделайте исполняемым:
#!/bin/bash modprobe md; modprobe linear; modprobe multipath; modprobe raid0; modprobe raid1; modprobe raid5; modprobe raid6; modprobe raid10; #chmod +x modadd #./modadd
>> 
Делаем второй диск sdb идентичный первому, для этого копируем разделы с /dev/sda на /dev/sdb :
#sfdisk -d /dev/sda –force | sfdisk /dev/sdb
>> 
--force (опция d это сброс дампа) Проверяем одинаковая ли таблица – командой:
#fdisk -l
>> 
Теперь укажем для sdb тип разделов Linux raid autodetect.
#fdisk /dev/sdb  sectors (command ‘u’). Command (m for help): t Partition number (1-5): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-5): 2 Hex code (type L to list codes): fd You cannot change a partition into an extended one or vice versa Delete it first. Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): fd Changed system type of partition 5 to fd (Linux raid autodetect) Command (m for help):w
>> 
Все теперь можно проверить не было ли уже попыток сделать raid на устройстве sdb ( и заодно затереть если все таки попытки создать были ).
#mdadm --zero-superblock /dev/sdb1 #mdadm --zero-superblock /dev/sdb5
>> 
Приступаем к созданию raid1 :
#mdadm --create --verbose /dev/md0 –level=1 –raid-disks=2 missing /dev/sdb1  #mdadm --create --verbose /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb5
>> 
extended раздел пропускаем. проверяем
#cat /proc/mdstat
>> 
[_U] [U_] – означает что raid поврежден, [UU] – что все в порядке.
Создаем файловые системы
#mkfs.ext3 /dev/md0 mkswap /dev/md1
>> 
Теперь отредактируем конфигурационные файлы : Оставим default конфиг -
#cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.default
>> 
И создадим новый – текущий :
mdadm --detail --scan >> mdadm.conf
>> 
 --это конфигурация raidA читается при загрузке машины. Приводим fstab и mtab к такому виду : (делаю бэкап fstab и mtab)
#cat /etc/fstab  proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation #UUID=b9a8f1ba-0648-4054-99a2-f4b116176c31 / ext3 errors=remount-ro 0 1 /dev/md0 / ext3 errors=remount-ro 0 1 # swap was on /dev/sda5 during installation #UUID=16c36fec-88cf-4259-b40a-ae4e6aa0ecfe none swap sw 0 0 /dev/md1 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/scd0 /media/floppy0 auto rw,user,noauto 0 0
>> 
# cat /etc/mtab /dev/md0 / ext3 rw,errors=remount-ro 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 proc /proc proc rw,noexec,nosuid,nodev 0 0 sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0 udev /dev tmpfs rw,mode=0755 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
>> 
вообщем тут на оригинальные UUID меняем наш рэйд /dev/md0 и /dev/md1 (для swap) далее необходимо в /etc/default/grub раскоментировать строку: ”GRUB terminal=console”
#update-grub
>> 
далее ОБЯЗАТЕЛЬНО УСТАНАВЛИВАЕМ GRUB на sdb 
grub-install /dev/sdb
>> 
и для уверенности я всегда делаю
dpkg-reconfigure grub-pc
>> 
пустую строку так и оставляем жму OK далее строка по умолчанию OK далее выбираю sdb и OK все загрузчик установлен теперь обязательно
#update-grub
>> 
Дальше доводим ramdisk до актуального состояния:
#update-initramfs -u
>> 
ЗАТЕМ делаем строку для старта с md0 чтобы можно было работать с диском sda (а то ж с него загружена система и его не поправишь)
#vim /boot/grub/grub.cfg и там беру заготовку типа  menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {        insmod part_msdos        insmod ext2        set root='(hd0, msdos)'        search --no-floppy --fs-uuid --set 824fbe77-1b29-474f-9c86-6b3cb9d0f129        echo    'Loading Linux 2.6.32-5-686 ...'        linux   /boot/vmlinuz-2.6.32-5-686 root=UUID=824fbe77-1b29-474f-9c86-6b3cb9d0f129 ro  quiet        echo    'Loading initial ramdisk ...'        initrd  /boot/initrd.img-2.6.32-5-686 }
>> 
делаю бэкап файла /etc/grub.d/40_custom и в него пишем
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-686' --class debian --class gnu-linux --class gnu --class os {        insmod raid        insmod mdraid        insmod part_msdos        insmod ext2        set root='(md/0)'        search --no-floppy --fs-uuid --set 824fbe77-1b29-474f-9c86-6b3cb9d0f129        echo    'Loading Linux 2.6.32-5-686 ...'        linux   /boot/vmlinuz-2.6.32-5-686 root=/dev/md0 ro  quiet        echo    'Loading initial ramdisk ...'        initrd  /boot/initrd.img-2.6.32-5-686 }
>> 
созаем и монтируем raid
#create /mnt/md0 #create /mnt/md1 #mount /dev/md0 /mnt/md0
>> 
Теперь копируем систему на наш raid1:
#cp -dpxR / /mnt/md0
>> 
и перезагружаем машину и в старте выбираем последнюю строку и загружаем комп c raid
#cat /proc/mdstat
>> 
Самое время приступить к добавлению sda в наш RAID1. Меняем разделы sda на Linux raid autodetect (по аналогии с sdb)
#fdisk /dev/sda
>> 
ntgthm ставим grub на sda
#grub-install /dev/sdb #dpkg-reconfigure grub-pc #update-grub
>> 
Дальше доводим ramdisk до актуального состояния:
#update-initramfs -u
>> 
и только теперь (!) можно добавить sda1 в raid 
#mdadm /dev/md0 --add /dev/sda1
>> 
и sda5 (swap) 
#mdadm –add /dev/md1 /dev/sda5
#watch cat /proc/mdstat
>> 
Приводим конфигурационный файл нашего RAID к актуальному состоянию : комментирую последние строки в mdadm.conf и
#mdadm –examine –scan > /etc/mdadm/mdadm.conf
>> 
все
Тестирование. Давайте попробуем сэмулировать сбой жесткого диска. Абсолютно неважно, какой из дисков вы выберите для эксперимента. Я выбрал /dev/sdb 
Для эмуляции сбоя необходимо либо остановить систему и физически удалить второй винчестер (/dev/sdb) из компьютера, либо сэмулировать это на программном уровне. Останавливаем массив:
#mdadm -S /dev/md0 #mdadm -S /dev/md1
>> 
помечаем его как fail и удаляем
#mdadm --manage /dev/md0 --fail /dev/sdb1 #mdadm --manage /dev/md1 --fail /dev/sdb5 #mdadm --manage /dev/md0 --remove /dev/sdb1 #mdadm --manage /dev/md1 --remove /dev/sdb5
>> 
после отключения винта загрузка с одного из винтов затем выключение подкл снова этого же винта загрузка и этот же самый винт в рейде уже не будет, естественно тока swap подцепиться. Поэтому его просто попишем нулями тот которого не видно в рейде у меня sdb1
#mdadm --zero-superblock /dev/sdb1
>> 
все теперь можно добовлять его туда
#mdadm /dev/md0 -a /dev/sdb1
>> 
все он синкается
#cat /proc/mdstat или #mdadm --detail --scan /dev/md0
>> 
восстановление GRUB
гружусь с LiveCD Ubuntu той разрядности что и система
#sudo fdisk -l #sudo mount /dev/sdXY /mnt #sudo mount --bind /dev/ /mnt/dev (sudo mount -t proc /mnt/proc) #sudo mount --bind /proc/ /mnt/proc (sudo mount -o bind /dev /mnt/dev) #sudo chroot /mnt (sudo chroot /mnt /bin/bash) #grub-install /dev/sdX #update-grub #exit #sudo umount /mnt/dev #sudo umount /mnt/boot #sudo umount /mnt #reboot
>> 



No comments: