Замена 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
Копируем таблицу разделов с исправного диска.
Реплицируйте таблицу разделов основного устройства на указанное подменное устройство. Обратите внимание, что
реплицированная таблица разделов является точной копией, включая все GUIDsgdisk /исправный-диск -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)
Для полной проверки проделанной работы можно перезагрузить сервер.
Дополнительная информация
- –