Всякий раз, проводя миграцию системного диска под AIX, я задумывался, а можно ли на linux поменять загрузочный диск на лету. Можно, когда понадобилось.
Условимся по исходным данным, должно быть:
Model: ATA ST1000DM010-2EP1
Disk /dev/sda: 314572800s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 411647s 409600s fat16 EFI System Partition boot
2 411648s 2508799s 2097152s xfs
3 2508800s 115505151s 112996352s lvm
Видим три партиции: первая - это UEFI, вторая - boot, и третья это lvm партиция, в которой находятся root и swap.
Создаем партиции на новом диске, задавая границы в секторах:
# parted --script /dev/sdb mklabel gpt
# parted --script /dev/sdb mkpart primary fat16 2048s 411647s \ toggle 1 boot
# parted --script /dev/sdb mkpart primary xfs 411648s 2508799s
# parted --script /dev/sdb mkpart primary 2508800s 115505151s
Model: ATA ST1000DM010-2EP1
Disk /dev/sdb: 314572800s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 411647s 409600s primary boot
2 411648s 2508799s 2097152s primary
3 2508800s 115505151s 112996352s primary
# umount /boot/
# dd if=/dev/sda1 of=/dev/sdb1
409600+0 records in
409600+0 records out
209715200 bytes (210 MB) copied, 12.0039 s, 17.5 MB/s
# dd if=/dev/sda2 of=/dev/sdb2
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 17.7454 s, 60.5 MB/s
/dev/sdb1: SEC_TYPE="msdos" UUID="DDB7-FB03" TYPE="vfat" PARTLABEL="primary" PARTUUID="e5120b6d-2f2b-4f22-ac60-0c323c0ea290"
# blkid /dev/sdb2
/dev/sdb2: UUID="554bd0c3-c9a9-42a3-a860-2ede07f3a9f4" TYPE="xfs" PARTLABEL="primary" PARTUUID="1a9e1cb5-96b1-4435-a9a6-b75f3f15dea3"
# grep boot /etc/fstab
UUID=554bd0c3-c9a9-42a3-a860-2ede07f3a9f4 /boot xfs defaults 0 0
UUID=DDB7-FB03 /boot/efi vfat umask=0077,shortname=winnt 0 0
# mount -a
Условимся по исходным данным, должно быть:
- Два диска, примем что sda - старый диск а sdb - новый диск. Понятно что sdb не должен быть меньше sda.
- Сервер с загрузчиком UEFI
- Использование LVM для системных разделов.
Таблица разделов
Смотрим таблицу разделов на старом диске:
# parted --script /dev/sda unit s \ printModel: ATA ST1000DM010-2EP1
Disk /dev/sda: 314572800s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 411647s 409600s fat16 EFI System Partition boot
2 411648s 2508799s 2097152s xfs
3 2508800s 115505151s 112996352s lvm
Видим три партиции: первая - это UEFI, вторая - boot, и третья это lvm партиция, в которой находятся root и swap.
Создаем партиции на новом диске, задавая границы в секторах:
# parted --script /dev/sdb mklabel gpt
# parted --script /dev/sdb mkpart primary fat16 2048s 411647s \ toggle 1 boot
# parted --script /dev/sdb mkpart primary xfs 411648s 2508799s
# parted --script /dev/sdb mkpart primary 2508800s 115505151s
Проверяем, что получилось:
# parted --script /dev/sdb unit s \ printModel: ATA ST1000DM010-2EP1
Disk /dev/sdb: 314572800s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 2048s 411647s 409600s primary boot
2 411648s 2508799s 2097152s primary
3 2508800s 115505151s 112996352s primary
Перенос разделов
Переносим разделы UEFI и boot:
# umount /boot/efi/# umount /boot/
# dd if=/dev/sda1 of=/dev/sdb1
409600+0 records in
409600+0 records out
209715200 bytes (210 MB) copied, 12.0039 s, 17.5 MB/s
# dd if=/dev/sda2 of=/dev/sdb2
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 17.7454 s, 60.5 MB/s
Поправим fstab в соответствии с новыми разделами и примонтируем их. В fstab, в данном случае, используется UUID:
# blkid /dev/sdb1/dev/sdb1: SEC_TYPE="msdos" UUID="DDB7-FB03" TYPE="vfat" PARTLABEL="primary" PARTUUID="e5120b6d-2f2b-4f22-ac60-0c323c0ea290"
# blkid /dev/sdb2
/dev/sdb2: UUID="554bd0c3-c9a9-42a3-a860-2ede07f3a9f4" TYPE="xfs" PARTLABEL="primary" PARTUUID="1a9e1cb5-96b1-4435-a9a6-b75f3f15dea3"
# grep boot /etc/fstab
UUID=554bd0c3-c9a9-42a3-a860-2ede07f3a9f4 /boot xfs defaults 0 0
UUID=DDB7-FB03 /boot/efi vfat umask=0077,shortname=winnt 0 0
# mount -a
Проводим мигацию lvm разделов. Точнее, увеличиваем группу томов (VG) за счет sdb3, перемещаем экстенты с данными и выводим sda3 из группы:
# vgextend rhel /dev/sdb3
# pvmove -i 3 /dev/sda3
# vgreduce rhel /dev/sda3
Настройка загрузчика UEFFI
Текущее конфигурация:
# efibootmgr -v
BootCurrent: 0000
BootOrder: 0000,0001,0002,0003,0004
Boot0000* Red Hat Enterprise Linux HD(1,GPT,4cedfdcd-b8c3-490b-98ca-3ad3cf915259,0x800,0x64000)/File(\EFI\redhat\shimx64.efi)
Boot0001* EFI Floppy /Pci(0x7,0x0)/
Boot0002* EFI IDE CDROM Drive (IDE 1:0) /Pci(0x7,0x1)/Ata(1,0,0)
Boot0003* EFI Network /Pci(0x16,0x0)/Pci(0x0,0x0)/MAC(005056b748e1,1)
Boot0004* EFI Internal Shell (Unsupported option) MemoryMapped(11,0xe1a2000,0xe42ffff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Первым в списке загрузки используется вариант 0000. Кратенько по формату:
- Заголовок, в нашем случае - Red Hat Enterprise Linux
- Источник загрузки - HD, т.е. жесткий диск и его определение в скобках.
- 1 - номер раздела,
- GPT - формат таблицы разделов,
- 4cedfdcd-b8c3-490b-98ca-3ad3cf915259 - это PARTUUID раздела
- 0x800 и 0x64000 - начало и размер раздела в LBA адресации.
# efibootmgr --create --disk /dev/sdb --part 1 --loader /EFI/redhat/shimx64.efi --label "RHEL" --verbose
BootCurrent: 0000
BootOrder: 0005,0000,0001,0002,0003,0004
Boot0000* Red Hat Enterprise Linux HD(1,GPT,4cedfdcd-b8c3-490b-98ca-3ad3cf915259,0x800,0x64000)/File(\EFI\redhat\shimx64.efi)
Boot0001* EFI Floppy /Pci(0x7,0x0)/
Boot0002* EFI VMware Virtual IDE CDROM Drive (IDE 1:0) /Pci(0x7,0x1)/Ata(1,0,0)
Boot0003* EFI Network /Pci(0x16,0x0)/Pci(0x0,0x0)/MAC(005056b748e1,1)
Boot0004* EFI Internal Shell (Unsupported option) MemoryMapped(11,0xe1a2000,0xe42ffff)/FvFile(c57ad6b7-0515-40a8-9d21-551652854e37)
Boot0005* RHEL HD(1,GPT,e5120b6d-2f2b-4f22-ac60-0c323c0ea290,0x800,0x64000)/File(\EFI\redhat\shimx64.efi)
Все. Можно проверить перезагрузкой и потом удалить старый диск, или сразу удалить старый диск. Учитывая, что добавление\удаление дисков производится онлайн, действительно, замену системного диска можно провести без остановки работы.