
Иногда бывает, что наступает EndOfLife систем хранения данных (СХД) и их нужно выводить из работы, т.к. заканчиваются запчасти.
В нашем случае оказалось, что неcколько хостов с Enterprise Linux загружены с этой СХД и необходимо их плавно перевести на другую.
Подключить две СХД через SAN к серверам достаточно просто, но как перетащить систему так, чтобы это прошло с минимальным влиянием на бизнес-процессы?
В прошлой статье в блоге Bercut я знакомил читателя с утилитой fsarchiver, сегодня мы рассмотрим другой вариант миграции с pvmove и qaucli.
Начнем.
Перед работами обязательно проверяем, что у нас есть актуальный бэкап.
Будем мигрировать системный том с устройства mpatha на устройство mpatham, расположенное на другой СХД. Целевое устройство для миграции должно быть равного или бóльшего размера, чем исходное. Так получилось, что мне презентовали немного больше.
Подходит.
Так выглядит схема миграции:

Осмотримся на сервере.
# multipath -ll mpatha (360060e80100cf1600530471e0000026e) dm-10 HITACHI ,DF600F size=400G features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=0 status=active |- 7:0:0:0 sdb 8:16 active ready running |- 7:0:1:0 sdc 8:32 active ready running |- 16:0:0:0 sdn 8:208 active ready running `- 16:0:1:0 sdo 8:224 active ready running ... mpatham (3600a098038314751455d536d38464c6c) dm-19 NETAPP ,LUN C-Mode size=416G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 7:0:3:17 sdz 65:144 active ready running | `- 16:0:3:17 sdab 65:176 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 7:0:2:17 sdaa 65:160 active ready running `- 16:0:2:17 sdac 65:192 active ready running
Система запущена в Legacy BIOS режиме, это видно по отсутствию директории /sys/firmware/efi
# ls /sys/firmware/efi ls: cannot access /sys/firmware/efi: No such file or directory
На устройстве mpatha обнаруживаем MBR разметку.
# fdisk -l /dev/mapper/mpatha Disk /dev/mapper/mpatha: 429.5 GB, 429496729600 bytes, 838860800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 65536 bytes / 65536 bytes Disk label type: dos Disk identifier: 0x0003324c Device Boot Start End Blocks Id System /dev/mapper/mpatha1 * 2048 2099199 1048576 83 Linux /dev/mapper/mpatha2 2099200 2623487 262144 6 FAT16 /dev/mapper/mpatha3 2623488 838860799 418118656 8e Linux LVM
Устройство mpatha1 - ФС /boot для загрузчика GRUB.
# df -h -t ext3 Filesystem Size Used Avail Use% Mounted on /dev/mapper/mpatha1 976M 185M 740M 20% /boot
Устройство mpatha2 - ФС /boot/efi для UEFI режима загрузки. Как мы уже видели выше, UEFI не используется, это раздел на будущее (на всякий случай).
# df -h -t vfat Filesystem Size Used Avail Use% Mounted on /dev/mapper/mpatha2 256M 6.5M 250M 3% /boot/efi
Устройство mpatha3 - все системные тома на LVM.
# pvs PV VG Fmt Attr PSize PFree /dev/mapper/mpatha3 bercutvg lvm2 a-- <398.75g 0 # vgs VG #PV #LV #SN Attr VSize VFree bercutvg 1 5 0 wz--n- <398.75g 0 # lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert home bercutvg -wi-ao---- <14.65g root bercutvg -wi-ao---- <29.30g swap bercutvg -wi-ao---- <29.30g u01 bercutvg -wi-ao---- <310.86g var bercutvg -wi-ao---- <14.65g
LVM позволит нам сделать онлайн-миграцию данных.
Новое системное устройство будем размечать меткой GPT (старый диск размечен в MBR), поэтому будем использовать gdisk, а не fdisk.
# gdisk /dev/mapper/mpatham GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries. Command (? for help): p Disk /dev/mapper/mpatham: 872415232 sectors, 416.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): BD6A4CFE-76F5-4087-95EB-36C62E67223C Partition table holds up to 128 entries First usable sector is 34, last usable sector is 872415198 Partitions will be aligned on 2048-sector boundaries Total free space is 872415165 sectors (416.0 GiB) Number Start (sector) End (sector) Size Code Name Command (? for help): n Partition number (1-128, default 1): 1 First sector (34-872415198, default = 2048) or {+-}size{KMGTP}: Last sector (2048-872415198, default = 872415198) or {+-}size{KMGTP}: +900M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8300 Changed type of partition to 'Linux filesystem' Command (? for help): n Partition number (2-128, default 2): 2 First sector (34-872415198, default = 1845248) or {+-}size{KMGTP}: Last sector (1845248-872415198, default = 872415198) or {+-}size{KMGTP}: +1M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF02 Changed type of partition to 'BIOS boot partition' Command (? for help): n Partition number (3-128, default 3): 3 First sector (34-872415198, default = 1847296) or {+-}size{KMGTP}: Last sector (1847296-872415198, default = 872415198) or {+-}size{KMGTP}: +249M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): EF00 Changed type of partition to 'EFI System' Command (? for help): n Partition number (4-128, default 4): First sector (34-872415198, default = 2357248) or {+-}size{KMGTP}: Last sector (2357248-872415198, default = 872415198) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8E00 Changed type of partition to 'Linux LVM' Command (? for help): p Disk /dev/mapper/mpatham: 872415232 sectors, 416.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): BD6A4CFE-76F5-4087-95EB-36C62E67223C Partition table holds up to 128 entries First usable sector is 34, last usable sector is 872415198 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 1845247 900.0 MiB 8300 Linux filesystem 2 1845248 1847295 1024.0 KiB EF02 BIOS boot partition 3 1847296 2357247 249.0 MiB EF00 EFI System 4 2357248 872415198 414.9 GiB 8E00 Linux LVM Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): y OK; writing new GUID partition table (GPT) to /dev/mapper/mpatham. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot. The operation has completed successfully.
Обратите внимание на раздел в 1Мб, он необходим, чтобы у нас заработал BIOS-загрузчик c GPT-разметки.
Считываем новую таблицу разделов.
# partprobe /dev/mapper/mpatham
Создаем новый PV.
# pvcreate /dev/mapper/mpatham4 Physical volume "/dev/mapper/mpatham4" successfully created.
Расширяем на этот PV имеющуюся VG.
# vgextend bercutvg /dev/mapper/mpatham4 Volume group "bercutvg" successfully extended # vgs VG #PV #LV #SN Attr VSize VFree bercutvg 2 5 0 wz--n- <813.62g 414.87g # pvs PV VG Fmt Attr PSize PFree /dev/mapper/mpatha3 bercutvg lvm2 a-- <398.75g 0 /dev/mapper/mpatham4 bercutvg lvm2 a-- 414.87g 414.87g
Запускаем онлайн-миграцию данных.
# pvmove /dev/mapper/mpatha3 /dev/mapper/mpatha3: Moved: 0.01% /dev/mapper/mpatha3: Moved: 0.58% /dev/mapper/mpatha3: Moved: 1.13% ...
По её завершению отключаем старый PV и удаляем его из системы (на нем больше нет данных).
# pvs PV VG Fmt Attr PSize PFree /dev/mapper/mpatha3 bercutvg lvm2 a-- <398.75g <398.75g /dev/mapper/mpatham4 bercutvg lvm2 a-- 414.87g 16.12g # vgreduce bercutvg /dev/mapper/mpatha3 Removed "/dev/mapper/mpatha3" from volume group "bercutvg" # pvs PV VG Fmt Attr PSize PFree /dev/mapper/mpatha3 lvm2 --- <398.75g <398.75g /dev/mapper/mpatham4 bercutvg lvm2 a-- 414.87g 16.12g # pvremove /dev/mapper/mpatha3 Labels on physical volume "/dev/mapper/mpatha3" successfully wiped. # pvs PV VG Fmt Attr PSize PFree /dev/mapper/mpatham4 bercutvg lvm2 a-- 414.87g 16.12g
Проверяем, что у нас есть утилиты dump/restore, если нет, то инсталлируем их.
# yum install -y dump
Отцепляем старые ФС /boot и /boot/efi и делаем их копию с новыми UUID
# umount /boot/efi # umount /boot
Начнем с ФС /boot
# mkfs.ext3 /dev/mapper/mpatham1 # blkid /dev/mapper/mpatham1 -o export | grep ^UUID= UUID=b1e9b915-00b9-4461-8fcc-f8dad4ab57b5
Новый UID вписываем взамен старого в файле /etc/fstab
# vim /etc/fstab # mount /boot # cd /boot # dump -0u -f - /dev/mapper/mpatha1 | restore -rf -
Продолжим с ФС /boot/efi
# mkfs.vfat /dev/mapper/mpatham3 # blkid /dev/mapper/mpatham3 -o export | grep ^UUID= UUID=9B63-787B # vim /etc/fstab Новый UID вписываем взамен станого в файле /etc/fstab # mount /boot/efi # mount /dev/mapper/mpatha2 /mnt/ # cp -a /mnt/EFI /boot/efi/ # umount /mnt
Т.к. за /etc/fstab следит systemd, надо его попросить перечитать конфигурацию (чтобы в будущем не было непонятных глюков):
# systemctl daemon-reload
Исправляем friendly-name системного диска на mpatha (опционально):
# vim /etc/multipath/bindings
#mpatha 360060e80100cf1600530471e0000026e #комментируем старое загрузочное устройство #mpatham 3600a098038314751455d536d38464c6c #комментируем новое загрузочное устройство mpatha 3600a098038314751455d536d38464c6c #вписываем новое загрузочное устройство, как mpatha
Проверить наличие настроек dracut для multipath загрузки из SAN. Если этих строк там нет - надо добавить.
# egrep -v "^#|^$" /etc/dracut.conf add_dracutmodules+="multipath" add_drivers+="qla2xxx lpfc"
Пересобираем initramfs для текущего ядра (UEK) и ванильного.
# cd /boot # ls -l # dracut -f # dracut -f initramfs-3.10.0-1160.el7.x86_64.img 3.10.0-1160.el7.x86_64
Ядро старое, как и сама ОС, но на новых ОС процесс такой же.
Настройка загрузчика grub
# grub2-mkconfig -o /boot/grub2/grub.cfg # grub2-install /dev/mapper/mpatham
Посмотрим, какой FC HBA установлен в нашей системе.
# cat /sys/class/fc_host/host*/symbolic_name QML2692 FW:v8.08.231 DVR:v10.00.00.13-k QML2692 FW:v8.08.231 DVR:v10.00.00.13-k
Обнаружен QLogic. Желательно установить утилиту по его онлайн-администрированию, необходимая утилита называется "Marvell QConvergeConsole CLI".
Документация Marvell QConvergeConsole CLI находится тут.
Саму утилиту я почему-то на сайте Marvel на нашел, зато она есть у других вендоров, использующих их устройства, например, HPE Storage x64 QLogic QConvergeConsole Command Line (QCC CLI) for Linux можно взять тут.
Устанавливаем утилиту и проверяем ее работу.
# yum localinstall QConvergeConsoleCLI-3.1.0-6.x86_64.rpm # cd /opt/QLogic_Corporation/QConvergeConsoleCLI/ # ./qaucli -pr fc -g
Просмотрим текущие настройки загрузочного устройства в bios режиме. Утилитой можно пользоваться как интерактивно, так и задавая сразу точную команду.
# ./qaucli -pr fc -e all info --bios -------------------------------------------------------------------------------- HBA Instance 0: QML2692 Port 1 WWPN 21:00:f4:e9:d4:58:75:e2 PortID 2f:02:06 Link: Online (FEC) -------------------------------------------------------------------------------- Boot Settings: ----------------------------------- Adapter BIOS : Enabled Selectable Boot : Enabled ----------------------------------- Drive 0 WWPN LUN ------------------------- ------ 50:06:0e:80:10:0c:f1:69 0 ----------------------------------- Drive 1 WWPN LUN ------------------------- ------ 50:06:0e:80:10:0c:f1:61 0 ----------------------------------- Drive 2 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 ----------------------------------- Drive 3 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 -------------------------------------------------------------------------------- HBA Instance 1: QML2692 Port 2 WWPN 21:00:f4:e9:d4:58:75:e3 PortID 2e:02:10 Link: Online (FEC) -------------------------------------------------------------------------------- Boot Settings: ----------------------------------- Adapter BIOS : Enabled Selectable Boot : Enabled ----------------------------------- Drive 0 WWPN LUN ------------------------- ------ 50:06:0e:80:10:0c:f1:6a 0 ----------------------------------- Drive 1 WWPN LUN ------------------------- ------ 50:06:0e:80:10:0c:f1:62 0 ----------------------------------- Drive 2 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 ----------------------------------- Drive 3 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0
Перед тем как продолжить, отключим старое устройство mpatha (360060e80100cf1600530471e0000026e) dm-10 HITACHI ,DF600F из системы.
Мы с него взять все, что нам нужно, на нем остались только старые копии /boot и /boot/efi.
# multipath -l mpatha mpatha (360060e80100cf1600530471e0000026e) dm-10 HITACHI ,DF600F size=400G features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='service-time 0' prio=0 status=active |- 7:0:0:0 sdb 8:16 active undef running |- 7:0:1:0 sdc 8:32 active undef running |- 16:0:0:0 sdn 8:208 active undef running `- 16:0:1:0 sdo 8:224 active undef running
Убедимся в том, что устройство отключится без ошибок:
# multipath -f mpatha
Затем отключим его sd-пути (их sd-имена видно из предыдущей команды multipath -l mpatha):
# echo 1 > /sys/block/sdb/device/delete # echo 1 > /sys/block/sdc/device/delete # echo 1 > /sys/block/sdn/device/delete # echo 1 > /sys/block/sdo/device/delete
Теперь можно удалять зоны на SAN-доменах (этот процесс тут опущен, для SAN администратора там все обыденно).
Проверяем, что старое загрузочное устройство больше не доступно, с интервалом в 90 секунд посылаем LIP последовательно на оба FC порта.
# echo 1 > /sys/class/fc_host/host16/issue_lip # sleep 90 # echo 1 > /sys/class/fc_host/host7/issue_lip
Осталось сконфигурировать FC-HBA для загрузки с WWN 600a098038314751455d536d38464c6c. Важная особенность в том, что там загрузочный LUN 17 (так получилось, лучше бы, конечно, нулевой).
Это можно сделать либо с перезагрузкой, нажав Ctrl+Q для Qlogic (или Ctrl+E для Emulex) сразу после инициализации BIOS сервера, либо с помощью утилиты qaucli.
Запустим qaucli ы интерактивном режиме. Напоминаю, что она инсталлирована в /opt/QLogic_Corporation/QConvergeConsoleCLI, в которой находится CWD.
Тут я привожу выбираемые в интерактивном режиме пункты меню и соблюдаю отступы, чтобы легко было ориентироваться:
# ./qaucli 2: Adapter Configuration 6: Configure Boot Devices 1: Port 1: WWPN: 21:00:f4:e9:d4:58:75:e2 Online (FEC) 1: Legacy BIOS Boot Mode (на старых FC-HBA этот пункт может отсутствовать) 2: Boot-from-SAN with FCP Storage Device 2: Configure BIOS Boot Drive Mapping 1: Boot Drive 0 1: FCP Disk Drive 0 WWPN: 20:01:d0:39:ea:31:21:b2 18: LUN: 17 2: Boot Drive 1 2: FCP Disk Drive 1 WWPN: 20:03:d0:39:ea:31:21:b2 18: LUN: 17 5: Save Configuration updated. Changes have been saved to HBA 0 m: Main Menu 2: Adapter Configuration 6: Configure Boot Devices 2: Port 2: WWPN: 21:00:f4:e9:d4:58:75:e3 Online (FEC) 1: Legacy BIOS Boot Mode (на старых FC-HBA этот пункт может отсутствовать) 2: Boot-from-SAN with FCP Storage Device 2: Configure BIOS Boot Drive Mapping 1: Boot Drive 0 1: FCP Disk Drive 0 WWPN: 20:01:d0:39:ea:31:21:b2 18: LUN: 17 2: Boot Drive 1 2: FCP Disk Drive 1 WWPN: 20:03:d0:39:ea:31:21:b2 18: LUN: 17 5: Save Configuration updated. Changes have been saved to HBA 1 x: Quit
Текущие загрузочные устройство изменились:
# ./qaucli -pr fc -e all info --bios -------------------------------------------------------------------------------- HBA Instance 0: QML2692 Port 1 WWPN 21:00:f4:e9:d4:58:75:e2 PortID 2f:02:1e Link: Online (FEC) -------------------------------------------------------------------------------- Boot Settings: ----------------------------------- Adapter BIOS : Enabled Selectable Boot : Enabled ----------------------------------- Drive 0 WWPN LUN ------------------------- ------ 20:01:d0:39:ea:31:21:b2 17 ----------------------------------- Drive 1 WWPN LUN ------------------------- ------ 20:03:d0:39:ea:31:21:b2 17 ----------------------------------- Drive 2 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 ----------------------------------- Drive 3 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 -------------------------------------------------------------------------------- HBA Instance 1: QML2692 Port 2 WWPN 21:00:f4:e9:d4:58:75:e3 PortID 2e:02:28 Link: Online (FEC) -------------------------------------------------------------------------------- Boot Settings: ----------------------------------- Adapter BIOS : Enabled Selectable Boot : Enabled ----------------------------------- Drive 0 WWPN LUN ------------------------- ------ 20:02:d0:39:ea:31:21:b2 17 ----------------------------------- Drive 1 WWPN LUN ------------------------- ------ 20:04:d0:39:ea:31:21:b2 17 ----------------------------------- Drive 2 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0 ----------------------------------- Drive 3 WWPN LUN ------------------------- ------ 00:00:00:00:00:00:00:00 0
Теперь наши система полностью смигрированна на новое системное устройство.
Заключение
На этом можно было бы и остановиться, но желательно убедиться, что система может загрузиться сама и устроить плановую перезагрузку в следующее возможное окно.
Это для того чтобы полностью расслабиться и спать спокойно.
На время перезагрузки можно на всякий случай положить недалеко от себя SystemRescue, о котором я упоминал в предыдущей статье про fsarchiver.
У меня все системы нормально перезагрузились в запланированное время, без приключений.
