
Иногда бывает, что наступает 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.
У меня все системы нормально перезагрузились в запланированное время, без приключений.