Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
citrix:software_raid_xenserver_7.6 [2018/12/20 07:20] – [Добавление второго диска в массивы] admincitrix:software_raid_xenserver_7.6 [2019/02/11 09:13] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +Выполнено по мотивам https://habr.com/post/307234/ , однако - некоторые моменты сделаны более аккуратно. На **mdadm RAID** переносим рабочую систему с виртуалками на борту. Виртуалки нужно останавливать только на время переноса со старой SR на новую.
  
 +====== Назначение разделов ======
 +https://docs.citrix.com/en-us/xenserver/current-release/install/partition-layout.html \\
 +На свежеустановленном **Xenserver 7.6** диск разбивается на **6** разделов:
 +<code>sda1 - 18.0 GiB / type ext3
 +sda2 - 18.0 GiB backup partition
 +sda3 - XenStorage LVM Physycal Volume 
 +sda4 - 512.0 MiB /boot/efi type vfat
 +sda5 - 4.0 GiB /var/log type ext3
 +sda6 - 1.0 GiB swap
 +</code>
 +
 +====== Подготовка первого диска массива RAID ======
 +Подразумевается, что у нас два одинаковых диска, на **/dev/sda** установлен **Xenserver 7.6**. Копируем таблицу разделов с **/dev/sda** на **/dev/sdb**.
 +  sgdisk -R /dev/sdb /dev/sda
 +Делаем прописываем новым разделам тип **fd00** и создаем массивы:
 +<code>sgdisk --typecode=1:fd00 /dev/sdb
 +sgdisk --typecode=2:fd00 /dev/sdb
 +sgdisk --typecode=3:fd00 /dev/sdb
 +sgdisk --typecode=4:fd00 /dev/sdb
 +sgdisk --typecode=5:fd00 /dev/sdb
 +sgdisk --typecode=6:fd00 /dev/sdb
 +
 +yes|mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb1 missing
 +yes|mdadm --create /dev/md2 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb2 missing
 +yes|mdadm --create /dev/md3 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb3 missing
 +yes|mdadm --create /dev/md4 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb4 missing
 +yes|mdadm --create /dev/md5 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb5 missing
 +yes|mdadm --create /dev/md6 --level=1 --raid-devices=2 --metadata=0.90 /dev/sdb6 missing
 +</code>
 +Во избежание путаницы, я нумерую массивы с 1, (а не с 0) - как и разделы.
 +====== Копирование системы на массивы RAID ======
 +Форматируем разделы:
 +<code>mkfs.ext3 /dev/md1
 +mkfs.ext3 /dev/md5
 +mkswap /dev/md6
 +</code>
 +Так как утилита **mkfs.vfat** отсутствует в **XenServer 7.6** я просто скопировал раздел **EFI** с помощью **dd**: 
 +  dd if=/dev/sda4 of=/dev/md4 bs=512
 +Монтируем новые разделы:
 +  mount /dev/md1 /mnt
 +  mkdir -p /mnt/var/log
 +  mount /dev/md5 /mnt/var/log
 +Если в результате выполнеения следующих команд (монтирования **/dev/md4**) происходит ошибка - вероятно **EFI**-партиция просто пустая, потому что вы загружаетесь с помощью **Legacy BIOS**. Не обращаем на это внимания.
 +  mkdir -p /mnt/boot/efi/
 +  mount /dev/md4 /mnt/boot/efi/
 +
 +Копируем систему:
 +  cp -xR --preserve=all / /mnt
 +
 +Настраиваем **mdadm**:
 +<code>
 +echo "MAILADDR root" > /mnt/etc/mdadm.conf
 +echo "AUTO +imsm +1.x -all" >> /mnt/etc/mdadm.conf
 +echo "DEVICE /dev/sd*[a-z][1-9]" >> /mnt/etc/mdadm.conf
 +mdadm --detail --scan >> /mnt/etc/mdadm.conf
 +cp /mnt/etc/mdadm.conf /etc
 +</code>
 +Настраиваем **fstab**:
 +<code> 
 +sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md1/' /mnt/etc/fstab
 +sed -i 's/LABEL=logs-[a-zA-Z\-]*/\/dev\/md5/' /mnt/etc/fstab
 +sed -i 's/LABEL=swap-[a-zA-Z\-]*/\/dev\/md6/' /mnt/etc/fstab
 +e2label /dev/sda1 |xargs -t e2label /dev/sdb1
 +</code>
 +
 +Монтируем системыные файловые системы для **chroot**:
 +<code>
 +mount --bind /dev /mnt/dev
 +mount --bind /sys /mnt/sys
 +mount --bind /proc /mnt/proc
 +mount --bind /run /mnt/run
 +</code>
 +И выполняем **chroot**: 
 +  chroot /mnt  /bin/bash
 +
 +Так как я скопировал **EFI**-раздел с помощью **dd**, то ставить **grub** нужды нет. В **chroot** нужно пересобрать ram-диск **dracut**.
 +  dracut --mdadmconf --fstab --add="mdraid" --add-drivers="raid1 raid456" --force /boot/initrd-$(uname -r).img $(uname -r) -M
 +Меняем некоторые параметры **grub**:
 +<code>
 +sed -i 's/quiet/rd.auto rd.auto=1 rhgb quiet/' /boot/efi/EFI/xenserver/grub.cfg
 +sed -i 's/LABEL=root-[a-zA-Z\-]*/\/dev\/md1/' /boot/efi/EFI/xenserver/grub.cfg
 +sed -i '/search/ i\   insmod gzio' /boot/efi/EFI/xenserver/grub.cfg
 +sed -i '/search/ i\   insmod part_msdos' /boot/efi/EFI/xenserver/grub.cfg
 +sed -i '/search/ i\   insmod diskfilter mdraid09' /boot/efi/EFI/xenserver/grub.cfg
 +sed -i '/search/ c\   set root=(md/md1)' /boot/efi/EFI/xenserver/grub.cfg
 +</code>
 +
 +Выходим из **chroot** и перезагружаемся:
 +  exit
 +  reboot
 +Отключаем первый диск и загружаемся со второго диска (того, который мы уже добавили в **RAID**). Если что-то пошло не так - можно опять загрузиться с первого и сделать все заново. У меня всё раработало с первого раза. \\
 +После загрузки смотрим:
 +  cat /proc/mdstat
 +  mount | grep md
 +И убеждаемся, что мы работаем на **RAID**.
 +
 +====== Добавление второго диска в массивы ======
 +Теперь - добавляем в рейд разделы первого диска (за исключением раздела №3), делаем на **RAID** новую **Storage Repository** и переносим виртуалки с **sda3** на **md3**. \\
 +Чтобы не лазить в биос я просто отключил первый диск на время загрузки, а потом подключил его **hot swap**'ом, поэтому первый диск (на котором, кстати, живые виртуалки) у меня стал **/dev/sdb**. Так как таблицы разделов на дисках одинаковые, нам нужно сейчас только поменять типы для свех разделов первого диска, за исключением третьего раздела со **Storage Repository**.
 +  sgdisk --typecode=1:fd00 /dev/sdb
 +  sgdisk --typecode=2:fd00 /dev/sdb
 +  sgdisk --typecode=4:fd00 /dev/sdb
 +  sgdisk --typecode=5:fd00 /dev/sdb
 +  sgdisk --typecode=6:fd00 /dev/sdb
 +И добавляем эти диски в массивы:
 +  mdadm -a /dev/md1 /dev/sdb1
 +  mdadm -a /dev/md2 /dev/sdb2
 +  mdadm -a /dev/md4 /dev/sdb4
 +  mdadm -a /dev/md5 /dev/sdb5
 +  mdadm -a /dev/md6 /dev/sdb6
 +Теперь создаем новую **Storage Repository** на **md3**.
 +  xe sr-create content-type=user device-config:device=/dev/md3 host-uuid=__HOST_UUID__ name-label="RAID1 Local" shared=false type=lvm
 +Виртуалки я переношу с помощью **XenCenter**: **VM -> Move VM...**, Важно понимать, что при таком способе переноса, процессом управляет **XenCenter**. Процесс двухстадийный. На первой стадии делаются копии дисков, а потом вносятся изменения в конфигурацию **VM** и удаляются копии на прежней **SR**. Если при переносе **XenCenter** закрывается или теряет связь с хостом, то в **XenCenter** будут ошибки, а задачи с переносом **Async.VDI.copy** будут видны на хосте в **xe task-list** состоянии **pending**. \\
 +Эта ситуация может привести в ступор, однако не все так плохо.  Состояние задач **pending** означает лишь, что задача ждет ответа от подсистемы хранения, которая как раз занимается копированием. В результате диски нормально скопируются, но в конфигурации **VM** будут прописаны старые диски (на прежней **SR**). Чтобы все было правильно нужно будет удалить диски на новой **SR** и повторить процесс. \\
 +Поэтому - я рекомендую запускать **XenCenter** из виртуалки, работающей на этом хосте. Таким образом можно избежать проблем со связью между **XenCenter** и хостом **XenServer**. \\
 +
 +После переезда виртуалок на новую **Storage Repository** отлючаем от старой **SR** её **pdb**(**/dev/sda3**) и добавляем его в зеркало:
 +  xe pbd-list
 +  xe pbd-unplug uuid=~~~pdb_uuid~~~
 +  xe sr-destroy uuid=~~~sr_uuid~~~
 +  sgdisk --typecode=3:fd00 /dev/sda
 +  mdadm -a /dev/md3 /dev/sda3
 +И вытирая слезу радости наблюдаем за перестроением зеркала:
 +  cat /proc/mdstat 
 +
 +
 +====== Система не загружается, если массив degraded ======
 +Если просто физически выдернуть один диск из массива и попытаться загрузиться - система не загрузится. 
 +Она скажет:
 +  Started dracut premount hook
 +  A start job is running for dev-md1.device
 +И будет бесконечно тупить.
 +Я пока не нашел что сделать для того, чтобы исправить это. Однако, если диск вышел из строя в процессе работы сервера, то достаточно пометить его как сбойный во всех массивах и система будет загружаться нормально.
 +  mdadm /dev/md1 -f /dev/sdb1
 +  mdadm /dev/md2 -f /dev/sdb2
 +  mdadm /dev/md3 -f /dev/sdb3
 +  mdadm /dev/md4 -f /dev/sdb4
 +  mdadm /dev/md5 -f /dev/sdb4
 +  mdadm /dev/md5 -f /dev/sdb5
 +  mdadm /dev/md6 -f /dev/sdb6
 +
 +
 +https://www.centos.org/forums/viewtopic.php?t=50893
 +
 +http://man7.org/linux/man-pages/man7/dracut.cmdline.7.html
  • citrix/software_raid_xenserver_7.6.txt
  • Last modified: 2019/02/11 09:13
  • by 127.0.0.1