Собираем программный 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, в этот массив помещается только один раздел со второго (пустого) диска, раздел с первого диска пока помечается как отсутствующий.
1 |
yum -y install mdadm |
[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
1 |
watch -n1 cat /proc/mdstat |
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 и поэтому остаются на своих местах.
1 |
/dev/md1 /boot ext4 defaults 1 2 |
[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
1 2 3 4 5 6 7 8 |
grub> <strong>root (hd0,0)</strong> grub> <strong>setup (hd0)</strong> grub> <strong>root (hd1,0)</strong> grub> <strong>setup (hd1)</strong> grub> <strong>quit </strong>Проверяем что raid1 собран |
[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>