программный raid1

Собираем программный raid1(зеркало)

Thank you for reading this post, don't forget to subscribe!

про­ве­ря­ем, что у нас есть из разделов:

[root@centos64 ~]# fdisk -l /dev/sda

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002cddb

Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 1045 7875584 8e Linux LVM

 

Как и пред­по­ла­га­лось – один 512мб раз­дел под /boot и все осталь­ное в Linux LVM.

[root@centos64 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_centos64 lvm2 a--u 7.51g 0

На вто­ром раз­де­ле дис­ка созда­на груп­па томов с име­нем vg_centos64, при уста­нов­ке поиме­но­ван­ная по име­ни сервера.

[root@centos64 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root vg_centos64 -wi-ao---- 6.71g
lv_swap vg_centos64 -wi-ao---- 816.00m

И на этой груп­пе томов рас­по­ла­га­ют­ся два тома под дан­ные и swap.

При­сту­пим к сборке:
Уста­нав­ли­ва­ют­ся совер­шен­но оди­на­ко­вые дис­ки и копи­ро­вать таб­ли­цу раз­де­лов мож­но один к одно­му, в про­тив­ном слу­чае раз­бив­ку луч­ше сде­лать вручную.

[root@centos64 ~]# sfdisk -d /dev/sda | sfdisk /dev/sdb --force

[root@centos64 ~]# fdisk /dev/sdb

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): fd

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): fd

Command (m for help): w

[root@centos64 ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Device Boot Start End Blocks Id System
/dev/sdb1 * 1 64 512000 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sdb2 64 1045 7875584 fd Linux raid autodetect

 

 

Что­бы быть уве­рен­ным, что на /dev/sdb не оста­лось ника­ких сле­дов от воз­мож­ных преды­ду­щих уста­но­вок RAID-мас­си­вов, выпол­ни­те сле­ду­ю­щие команды:

# mdadm --zero-superblock /dev/sdb1
mdadm: Unrecognised md component device — /dev/sdb1

# mdadm --zero-superblock /dev/sdb2
mdadm: Unrecognised md component device — /dev/sdb2

Если ника­ких остат­ков преды­ду­щих уста­но­вок RAID не обна­ру­жит­ся, то каж­дая из при­ве­ден­ных выше команд mdadm выдаст ошиб­ку (не надо бес­по­ко­ить­ся) при­мер­но сле­ду­ю­ще­го вида:

mdadm: Unrecognised md component device - /dev/sdb1
В про­тив­ном слу­чае ника­ко­го выво­да не будет.

 

Ста­вим mdadm и созда­ем RAID1 мас­сив с име­нем md2, в этот мас­сив поме­ща­ет­ся толь­ко один раз­дел со вто­ро­го (пусто­го) дис­ка, раз­дел с пер­во­го дис­ка пока поме­ча­ет­ся как отсутствующий.

[root@centos64 ~]# mdadm --create /dev/md2 --metadata=0.90 --level=1 --raid-disks=2 missing /dev/sdb2
mdadm: array /dev/md2 started.

Далее поме­ча­ем /dev/md2 как физи­че­ский том LVM, рас­ши­ря­ем на него груп­пу томов vg_web16, пере­но­сим все логи­че­ские тома лежа­щие на пер­вом дис­ке /dev/sda2 на создан­ный RAID-мас­сив /dev/md2.

[root@centos64 ~]# pvcreate /dev/md2
Physical volume "/dev/md2" successfully created

[root@centos64 ~]# vgextend vg_centos64 /dev/md2
Volume group "vg_centos64" successfully extended

vg_centos64 - смот­рим из коман­ды pvs

[root@centos64 ~]# pvmove /dev/sda2 /dev/md2

Может воз­ник­нуть сле­ду­ю­щая ошибка:

Insufficient free space: 1922 extents needed, but only 1921 available
Unable to allocate mirror extents for pvmove0.
Failed to convert pvmove LV to mirrored

для её устра­не­ния выпол­ним:
[root@centos64 ~]# fdisk -l /dev/sda2 | grep Disk |head -1
Disk /dev/sda2: 8064 MB, 8064598016 bytes

зна­че­ние в бай­тах при­ме­ня­ем в сле­ду­ю­щей команде:
[root@centos64 ~]# pvresize --setphysicalvolumesize 8064598016 /dev/md2
WARNING: /dev/md2: Overriding real size. You could lose data.
Physical volume "/dev/md2" changed
1 physical volume(s) resized / 0 physical volume(s) not resized

 

повто­рим команду:
pvmove /dev/sda2 /dev/md2

/dev/sda2: Moved: 0.2%
/dev/sda2: Moved: 30.1%
/dev/sda2: Moved: 62.0%
/dev/sda2: Moved: 89.4%
/dev/sda2: Moved: 100.0%

Опе­ра­ция pvmove может выпол­нять­ся дли­тель­ное вре­мя, для 500Гб SATA-дис­ков оно соста­ви­ло око­ло 45 минут. Теперь уда­ля­ем из груп­пы томов пер­вый диск и добав­ля­ем его в RAID

[root@centos64 ~]# vgreduce vg_centos64 /dev/sda2
Removed "/dev/sda2" from volume group "vg_centos64"

[root@centos64 ~]# mdadm --add /dev/md2 /dev/sda2

mdadm: added /dev/sda2

 

Ждем пока закон­чит­ся про­цесс син­хро­ни­за­ции дис­ков в RAID1

Every 1.0s: cat /proc/mdstat Sun Jul 29 06:58:03 2018

Personalities : [raid1]
md2 : active raid1 sda2[2] sdb2[1]
7875520 blocks [2/1] [_U]
[>.….….….….…] recovery = 3.8% (301312/7875520) finish=2.5min speed
=50218K/sec

unused devices: <none>

 

 Раздел Boot

Опять как и для преды­ду­ще­го раз­де­ла созда­ем RAID-мас­сив с одним дис­ком, и выби­ра­ем фор­мат супер­бло­ка 0.90 или 1.0, с дру­ги­ми фор­ма­та­ми GRUB 0.97 рабо­тать не умеет

[root@centos64 ~]# mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-dis ks=2 missing /dev/sdb1
mdadm: array /dev/md1 started.

Фор­ма­ти­ру­ем создан­ный раз­дел в ext4 и пере­но­сим на него дан­ные из дирек­то­рии /boot

[root@centos64 ~]# mkfs.ext4 /dev/md1

[root@centos64 ~]# mount /dev/md1 /mnt
[root@centos64 ~]# cp -R /boot/* /mnt
[root@centos64 ~]# umount /mnt

Раз­мон­ти­ру­ем /boot отклю­чив от него пер­вый раз­дел пер­во­го дис­ка и при­мон­ти­ру­ем туда RAID-мас­сив /dev/md1, а затем добав­ля­ем отмон­ти­ро­ван­ный диск в этот массив.

[root@centos64 ~]# umount /boot
[root@centos64 ~]# mount /dev/md1 /boot
[root@centos64 ~]# mdadm --add /dev/md1 /dev/sda1
mdadm: added /dev/sda1

 

Настройка initrd и grub

Итак, initrd или initramfs – это про­об­раз фай­ло­вой систе­мы исполь­зу­е­мый не эта­пе пер­во­на­чаль­ной загруз­ки, глав­ная его цель загру­зить все необ­хо­ди­мые драй­ве­ра, напри­мер соф­то­вый RAID или LVM, смон­ти­ро­вать фай­ло­вую систе­му, а за тем пре­дать управ­ле­ние даль­ше. Для того что бы систе­ма мог­ла загру­жать­ся с соф­то­во­го RAID-мас­си­ва initrd нуж­но пересоздать.

Для нача­ла фор­ми­ру­ем кон­фи­гу­ра­ци­он­ный файл mdadm.conf

[root@centos64 ~]# mdadm --examine --scan > /etc/mdadm.conf

Меня­ем в /etc/fstab точ­ку мон­ти­ро­ва­ния для /boot, все осталь­ные точ­ки мон­ти­ро­ва­ния нахо­дят­ся на LVM и поэто­му оста­ют­ся на сво­их местах.

[root@centos64 ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Jul 29 06:37:05 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_centos64-lv_root / ext4 defaults 1 1
/dev/md1 /boot ext4 defaults 1 2
/dev/mapper/vg_centos64-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

Пере­со­здать initramfs мож­но при помо­щи ути­ли­ты dracut, начи­ная с Fedora 12 она при­шла на сме­ну mkinitrd. Про­ве­ря­ем выклю­че­ны ли в кон­фи­гу­ра­цию LVM и MDADM, и пере­за­пи­сы­ва­ем ста­рый initramfs

[root@centos64 ~]# cat /etc/dracut.conf | egrep -v "^($|#)"
mdadmconf="yes"
lvmconf="yes"

[root@centos64 ~]# dracut --mdadmconf --force /boot/initramfs-`uname -r`.img `uname -r`
Из кон­фи­гу­ра­ци­он­но­го фай­ла Grub уби­ра­ем пара­мет­ры ядра отклю­ча­ю­щие загруз­ку mdraid.

[root@centos64 ~]# sed -i -e "s/rd_NO_DM //; s/rd_NO_MD //;" /boot/grub/grub.conf

 

Настраиваем Grub на обоих дисках

[root@centos64 ~]# grub

[root@centos64 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda1[0] sdb1[1]
511936 blocks [2/2] [UU]

md2 : active raid1 sda2[0] sdb2[1]
7875520 blocks [2/2] [UU]

unused devices: <none>

 

мож­но перезагружаться

для про­вер­ки можем отклю­чить пер­вый жёст­кий диск:

систе­ма загру­жа­ет­ся, про­ве­ря­ем что одно­го жёст­ко­го в рей­де не хватает:

[root@centos64 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda1[1]
511936 blocks [2/1] [_U]

md2 : active raid1 sda2[1]
7875520 blocks [2/1] [_U]

unused devices: <none>