27.11.2024

Proxmox замена диска в ZFS

Замена nvme накопителя из программного зеркала на базе ZFS.

Предварительная подготовка

Крайне желательно выполнить бекап VM, которые расположены на этом пуле.

Определяем неисправный диск в пуле rpool.

zpool status -v rpool

#pool: rpool
#state: DEGRADED
#status: One or more devices could not be used because the label is missing or
#invalid. Sufficient replicas exist for the pool to continue
#functioning in a degraded state.
#action: Replace the device using 'zpool replace'.
#see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
#scan: scrub repaired 0B in 00:02:33 with 0 errors on Sun Oct 13 00:26:36 2024
#config:

#NAME STATE READ WRITE CKSUM
#rpool DEGRADED 0 0 0
#mirror-0 DEGRADED 0 0 0
#nvme0n1p3 ONLINE 0 0 0
#866736851086649664 UNAVAIL 0 0 0 was /dev/nvme1n1p3

#errors: No known data errors

В строю остался только один диск nvme0n1, проверим наличие разделов на дисках, для того, что бы исключить ошибку копирования таблицы разделов

Для исправного диска (источника)

sgdisk -p /dev/nvme0n1

#Disk /dev/nvme0n1: 1000215216 sectors, 476.9 GiB
#Model: SAMSUNG MZVL2512HCJQ-00B00
#Sector size (logical/physical): 512/512 bytes
#Disk identifier (GUID): 5DD4AA67-2B5D-4B94-B3A5-5DD2D5F609B8
#Partition table holds up to 128 entries
#Main partition table begins at sector 2 and ends at sector 33
#First usable sector is 34, last usable sector is 1000215182
#Partitions will be aligned on 8-sector boundaries
#Total free space is 0 sectors (0 bytes)

#Number Start (sector) End (sector) Size Code Name
#1 34 2047 1007.0 KiB EF02
#2 2048 2099199 1024.0 MiB EF00
#3 2099200 1000215182 475.9 GiB BF01

Для подменного диска (назначение)

sgdisk -p /dev/nvme1n1

#Creating new GPT entries in memory.
#Disk /dev/nvme1n1: 1000215216 sectors, 476.9 GiB
#Model: SAMSUNG MZVL2512HCJQ-00B07
#Sector size (logical/physical): 512/512 bytes
#Disk identifier (GUID): 0736733E-B892-426F-928F-B6F4F31FF23C
#Partition table holds up to 128 entries
#Main partition table begins at sector 2 and ends at sector 33
#First usable sector is 34, last usable sector is 1000215182
#Partitions will be aligned on 2048-sector boundaries
#Total free space is 1000215149 sectors (476.9 GiB)

#Number Start (sector) End (sector) Size Code Name

Копируем таблицу разделов с исправного диска.

Реплицируйте таблицу разделов основного устройства на указанное подменное устройство. Обратите внимание, что
реплицированная таблица разделов является точной копией, включая все GUID

sgdisk /исправный-диск -R /новый-диск

Можно выполнить процедуру через сохранение в промежуточный фаил

sfdisk -d /dev/nvme0n1 > partitions.txt

sfdisk /dev/nvme1n1 < partitions.txt

sgdisk /dev/nvme0n1 -R /dev/nvme1n1

#The operation has completed successfully.

Создаем новый GUID для диска для нового диска nvme1n1

sgdisk -G /dev/nvme1n1
The operation has completed successfully.

Производим замену диска с номером 866736851086649664 на  /dev/nvme1n1p3

Вместо 866736851086649664 могут использоваться имена или метки дисков, будьте внимательны

zpool replace -f rpool 866736851086649664 /dev/nvme1n1p3

Проверяем статус пула rpool

zpool status -v rpool

#pool: rpool
#state: DEGRADED
#status: One or more devices is currently being resilvered. The pool will
#continue to function, possibly in a degraded state.
#action: Wait for the resilver to complete.
#scan: resilver in progress since Mon Oct 14 11:40:41 2024
#140G / 140G scanned, 1.60G / 140G issued at 547M/s
#1.59G resilvered, 1.14% done, 00:04:20 to go
#config:

#NAME STATE READ WRITE CKSUM
#rpool DEGRADED 0 0 0
#mirror-0 DEGRADED 0 0 0
#nvme0n1p3 ONLINE 0 0 0
#replacing-1 DEGRADED 0 0 0
#866736851086649664 UNAVAIL 0 0 0 was /dev/nvme1n1p3/old
#nvme1n1p3 ONLINE 0 0 0 (resilvering)

#errors: No known data errors

Ждем указанное время, в этом случае 4 минуты 20 секунд, после проверяем и получаем

zpool status rpool

#pool: rpool
#state: ONLINE
#scan: resilvered 141G in 00:02:53 with 0 errors on Mon Oct 14 11:43:34 2024
#config:

#NAME STATE READ WRITE CKSUM
#rpool ONLINE 0 0 0
#mirror-0 ONLINE 0 0 0
#nvme0n1p3 ONLINE 0 0 0
#nvme1n1p3 ONLINE 0 0 0

#errors: No known data errors

Синхронизация rpool прошла успешно, теперь нужно восстановить возможность загрузки ОС с нового диска

Предварительно нужно проверить статус

proxmox-boot-tool status
#3136-92C6 is configured with: grub (versions: 6.8.12-2-pve)
#WARN: /dev/disk/by-uuid/3138-3AA6 does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping

Видим, что диск отсутствует, поэтому сначала отформатируем на новом диске раздел

proxmox-boot-tool format /dev/nvme1n1p2

#UUID="" SIZE="1073741824" FSTYPE="" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="nvme1n1" MOUNTPOINT=""
#Formatting '/dev/nvme1n1p2' as vfat..
#mkfs.fat 4.2 (2021-01-31)
#Done.

Теперь нужно обновить загрузочные среды на всех загрузочных разделах EFI/BIOS в системе. На этом этапе он обновится, так как все 3 диска на этом этапе являются загрузочными.

proxmox-boot-tool init /dev/nvme1n1p2

#Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
#UUID="4BF1-6A8F" SIZE="1073741824" FSTYPE="vfat" PARTTYPE="c12a7328-f81f-11d2-ba4b-00a0c93ec93b" PKNAME="nvme1n1" MOUNTPOINT=""
#Mounting '/dev/nvme1n1p2' on '/var/tmp/espmounts/4BF1-6A8F'.
#Installing grub i386-pc target..
#Installing for i386-pc platform.
#Installation finished. No error reported.
#Unmounting '/dev/nvme1n1p2'.
#Adding '/dev/nvme1n1p2' to list of synced ESPs..
#Refreshing kernels and initrds..
#Running hook script 'proxmox-auto-removal'..
#Running hook script 'zz-proxmox-boot'..
#Copying and configuring kernels on /dev/disk/by-uuid/3136-92C6
#Copying kernel 6.8.12-2-pve
#Generating grub configuration file ...
#Found linux image: /boot/vmlinuz-6.8.12-2-pve
#Found initrd image: /boot/initrd.img-6.8.12-2-pve
#done
#WARN: /dev/disk/by-uuid/3138-3AA6 does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping
#Copying and configuring kernels on /dev/disk/by-uuid/4BF1-6A8F
#Copying kernel 6.8.12-2-pve
#Generating grub configuration file ...
#Found linux image: /boot/vmlinuz-6.8.12-2-pve
#done

Затем нужно произвести очистку от старых записей в Grub

proxmox-boot-tool clean

#Checking whether ESP '3136-92C6' exists.. Found!
#Checking whether ESP '3138-3AA6' exists.. Not found!
#Checking whether ESP '4BF1-6A8F' exists.. Found!
#Sorting and removing duplicate ESPs..

В завершении нужно выполнить проверку статуса дисков, для того что бы быть уверенными в правильной работе

proxmox-boot-tool status

#Re-executing '/usr/sbin/proxmox-boot-tool' in new private mount namespace..
#System currently booted with legacy bios
#3136-92C6 is configured with: grub (versions: 6.8.12-2-pve)
#4BF1-6A8F is configured with: grub (versions: 6.8.12-2-pve)

Для полной проверки проделанной работы можно перезагрузить сервер.


Дополнительная информация

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *