RAID CentOS 7 UEFI

Проверяем тип загрузчика BIOS или UEFI:

[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
fdisk -l|grep EFI
yum install -y nano vim wget mdadm gdisk grub2-efi-modules && swapoff -a

Размечаем диск:

200M ef02 (EFI System fat16)

500M ef00 (Linux RAID ext2)

50G fd00 (Linux RAID ext4)

4G 8200 (Linux swap)

other fd00 (inux RAID ext4)

echo -e "o \ny \nn \n1 \n \n+200M \nef00\nn \n2 \n \n+500M \nfd00 \nn\n3 \n \n+50G \nfd00 \nn\n4 \n \n+4G \n8200 \nn\n5 \n \n \nfd00 \nw\ny\n" | gdisk /dev/sdb

Копируем разметку:

sgdisk -R /dev/sdc /dev/sdb && sgdisk -G /dev/sdc
sgdisk -R /dev/sdd /dev/sdb && sgdisk -G /dev/sdd

Убиваем предыдущие рейды, если такие были:

mdadm -S /dev/mdx , x-номер устройства

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

mdadm --zero-superblock /dev/sdb[0-9]

Создаем md девайсы. Если дисков больше двух, то нужно добавить ключ --assume-clean для каждого md. Это предотвратит синхронизацию пустых блоков, т.е. сохранит нам время

mdadm -C /dev/md0 -f -l 1 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb2 /dev/sdc2 /dev/sdd2 -e 0.90
yes | mdadm -C /dev/md1 -f -l 1 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb3 /dev/sdc3 /dev/sdd3
yes | mdadm -C /dev/md2 -f -l 10 -b internal --bitmap-chunk=131072 -n 4 missing /dev/sdb5 /dev/sdc5 /dev/sdd5 --assume-clean

Нарезаем fs:

mkfs.ext2  /dev/md0
mkfs.ext4  /dev/md1
mkfs.ext4  /dev/md2

mkswap /dev/sdb4
mkswap /dev/sdc4
mkswap /dev/sdd4

Маунтим md:

mount /dev/md1 /mnt
mkdir -p /mnt/home /mnt/boot /mnt/var/www
mount /dev/md0 /mnt/boot
mount /dev/md2 /mnt/home

"Генерируем" новый fstab:

mkdir /root/trash && cp -dprx /etc /root/trash && cp -dprx /boot /root/trash
cat << EOF > /etc/fstab
#mdadm fstab
#md devices
/dev/md0        /boot        ext2        defaults        1 2
/dev/md1        /            ext4        defaults        1 1
/dev/md2        /home        ext4        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
#/dev/sdb1 /boot/efi               vfat    umask=0077,shortname=winnt 0 0
#swaps
#/dev/sda4        swap        swap        defaults        0 0
#/dev/sdb4        swap        swap        defaults        0 0
#/dev/sdc4        swap        swap        defaults        0 0
#/dev/sdd4        swap        swap        defaults        0 0
EOF

и mdadm.conf :

echo "DEVICE /dev/hd*[0-9] /dev/sd*[0-9] /dev/vd*[0-9] /dev/cciss/*" > /etc/mdadm.conf 
mdadm --detail --scan >> /etc/mdadm.conf

Добавляем нужные модули в прелоад, отключаем UUID's:

sed -i"" -e "s/quiet/rd.auto rd.auto=1 selinux=0 quiet/g" /etc/default/grub
echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub
echo "GRUB_PRELOAD_MODULES=\"part_gpt raid mdraid mdraid09 mdraid1x \"" >> /etc/default/grub

Обновляем initramfs:

dracut --mdadmconf --fstab --add="mdraid" --add-drivers="raid1" --force /boot/initramfs-$(uname -r).img $(uname -r) -M

Копируем раздел /boot/efi на /dev/sdb1

dd if=/dev/sda1 of=/dev/sdb1

Делаем /dev/sdb загрузочным

umount /dev/sda1
mount /dev/sdb1 /boot/efi/
efibootmgr -c -d /dev/sdb -p 1 -L "CentOS-sdb" -l '\EFI\centos\shim.efi'

Генерируем grub.cfg:

grub2-mkconfig -o /boot/grub2/grub.cfg 
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

И меняем root:

grubby --update-kernel=ALL --args="root=/dev/md1"
grubby --update-kernel=ALL --args="root=/dev/md1" -c /boot/grub2/grub.cfg

Устанавливаем grub2 на диски:

grub2-install /dev/sdb
grub2-install /dev/sdc
grub2-install /dev/sdd

Копируем все на наши md:

cp -dpRxv / /mnt
cp -dpRxv /boot /mnt
reboot

После бута:

swapoff -a
sgdisk -R /dev/sda /dev/sdb && sgdisk -G /dev/sda

Сделаем загрузочным /dev/sda1. Перегенерируем grub.cfg ( уберется sdaX как пункт меню, сменим mduuid root на текущий) :

mount /dev/sdb1 /boot/efi
dd if=/dev/sdb1 of=/dev/sda1
umount /dev/sdb1 && mount /dev/sda1 /boot/efi/
efibootmgr -c -d /dev/sda -p 1 -L "CentOS-a" -l '\EFI\centos\shim.efi'
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

Добавляем sda в md и становим grub2 на sda:

mdadm --add /dev/md0 /dev/sda2
for((f=1;f>0;))do grep -q idle /sys/block/md0/md/sync_action ; f=$?; sleep 1;done && grub2-install /dev/sda
mdadm --add /dev/md1 /dev/sda3 
mdadm --add /dev/md2 /dev/sda5
mkswap /dev/sda4

Для себя укажем на каком диске загрузчик UEFI

Добавим диск в fstab чтобы знать на каком диске загрузочный /boot/efi
#/dev/sda1       /boot/efi    vfat    umask=0077,shortname=winnt 0 0

Off topic

Если предвидится замена диска /dev/sda на котором стоит /boot/efi, нужно предварительно сделать другой диск загрузочным, например сделаем загрузочным /dev/sdb1

dd if=/dev/sda1 of=/dev/sdb1
umount /dev/sda1 && mount /dev/sdb1 /boot/efi
efibootmgr -c -d /dev/sdb -p 1 -L "CentOS-b" -l '\EFI\centos\shim.efi'
grub2-mkconfig -o /boot/grub2/grub.cfg 
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#не факт, но возможно нужно поставить grub на все диски:
grub2-install /dev/sda
grub2-install /dev/sdb
grub2-install /dev/sdc
grub2-install /dev/sdd
echo 500000 > /proc/sys/dev/raid/speed_limit_max && echo 500000 > /proc/sys/dev/raid/speed_limit_min

Если нужно пропустить синхронизацию устройства md2 и начать синхронизацию следующего по очереди:

echo idle > /sys/block/md2/md/sync_action
- /boot/efi can’t be in a software raid because of the EUFI restrictions
- /boot/efi в fstab писать не желательно, это больше для себя, чтобы знать на каком диске /boot/efi загрузочный,оставлять закоментированым на случай если диск уберут из системы,чтобы не было проблем при загрузке   
- в данном мане, перед первым ребутом мы делаем загрузку /boot/efi с /dev/sdb, после ребута возвращаем на /dev/sda (не обязательно)
- efibootmgr -v - List current EFI boot config,для каждого диска з разделом /boot/efi свой, т.е. какой диск загрузочный тот efibootmgr и используется
- используется /boot/efi/EFI/centos/grub.cfg и /boot/grub2/grub.cfg, генерировать нужно оба
- parted /dev/sda unit s print - смотреть FS
- /dev/sda1 /boot/efi vfat umask=0077,shortname=winnt,nofail 0 0 - если нужно маунтим так
- mkfs.vfat -F 16 -n 'EFI System Partition' /dev/sdb1 - если нужно создать FS под /boot/efi
- efibootmgr -c -d /dev/sdb -p 1 -L "CentOS-b" -l '\EFI\centos\shim.efi'
               the -d flag specifies the device
               the -p flag specifies the partition
               the -L flag specifies the label
- возможно когда-то пригодится,нужно удалить /dev/cdc из efibootmgr:
               efibootmgr
               Boot0009* CentOS-sdc
               efibootmgr -b 0009 -B   - удаляем

results matching ""

    No results matching ""