Pull to refresh

Онлайн миграция системного диска Enterprise Linux на другую СХД

Level of difficultyMedium
Reading time11 min
Views426

Иногда бывает, что наступает 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.

У меня все системы нормально перезагрузились в запланированное время, без приключений.

Tags:
Hubs:
+4
Comments1

Articles