Создан: 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:
Post a Comment