标签归档:proxmox更换硬盘

Proxmox VE 8.1.4环境中,ZFS1的rpool替换故障的硬盘 2024-09-29

前缀、文档修改记录

20240929 初始化编辑此文章,未完稿,等采买一个新硬盘。
20241007 更换的硬盘到了,更新此文章。
20241008 更新此文章,关于修复引导。完成此文章

章节1、需求描述

突然发现PVE里面有一个硬盘坏了,本篇文章记录替换的过程。环境是ZFS1(512GB SSD * 4),PVE系统直接部署用的这个rpool,相当于一台单机版的虚拟化环境,无额外的存储。

章节2、故障现象

PVE中rpool显示已经降级,且在系统日志中,可以看到I/O错误提示,这种情况,如果不是电源线故障,基本可以断定是硬盘挂了一块。

章节3、故障修复的过程

3.1、ZFS的rpool修复

因为这块故障硬盘,已经显示为已移除(REMOVED),对rpool硬盘ZFS池子已经没有了作用,就可以直接把这块坏硬盘断电取下来,换上新的硬盘。

比如我这里,新硬盘还是 /dev/sdd,在PVE的磁盘页面上,对盘进行初始化,选择 /dev/sdd硬盘,选择上方的“使用GPT初始化磁盘”。

查看原硬盘的分区格式,我这里的4块盘,都是一个分区规格

Device       Start        End   Sectors   Size Type
/dev/sdc1       34       2047      2014  1007K BIOS boot
/dev/sdc2     2048    2099199   2097152     1G EFI System
/dev/sdc3  2099200 1000215182 998115983 475.9G Solaris /usr & Apple ZFS

使用fdisk/parted等工具,对新硬盘按其他3个盘的格式,进行一致的分区。

在新硬盘/dev/sdd上面,创建 /dev/sdd1的 BIOS boot分区

在新硬盘/dev/sdd上面,创建 /dev/sdd2的 EFI System分区

在新硬盘/dev/sdd上面,创建 /dev/sdd3的 Solaris /usr & Apple ZFS分区

跟其他磁盘,对比一下分区,3个分区格式,还有gpt都是一致的。

可以通过 ls -la /dev/disk/by-id 命令,查看新换的硬盘的ID号

初始化/dev/sdd新硬盘后,就可以用在ZFS的rpool中,用新硬盘替换旧硬盘

# 旧硬盘 ata-Netac_SSD_512GB_AA20231205512G621697-part3
# 新硬盘 ata-YSSDJQB-512GSQ_2C23F2707401407-part3

zpool replace rpool ata-Netac_SSD_512GB_AA20231205512G621697-part3 ata-YSSDJQB-512GSQ_2C23F2707401407-part3

执行命令后,等待ZFS对rpool池的重建同步完成即可。

完成后,如下,从20:28开始同步,花了大约2小时,整个rpool总的1.77TB(512GB * 4, ZFS1):

3.2、引导修复过程

因为我这里这4块盘做的ZFS1,安装的PVE,不纯粹为数据盘区,故而,还需要把UEFI引导文件同步一下。

最安全的确认引导方式的命令

efibootmgr -v
  • 如果上面的命令,返回一个消息,指出EFI变量不受支持,则在BIOS/Legacy中使用grub
  • 如果输出包含如“Boot0005* proxmox […] File(\EFI\proxmox\grubx64.efi)”内容的行,则在UEFI模式下使用grub
  • 如果输出包含如”Boot0006* Linux Boot Manager […] File(\EFI\systemd\systemd-bootx64.efi)”内容的行,则使用systemd-boot

我这里显示的 efibootmgr -v 命令结果如下,并有提示启动顺序BootOrder:

BootCurrent: 000D
Timeout: 2 seconds
BootOrder: 0010,0005,000D,000E,000F,000B,000A,0001,0004,0003,0002,0000,000C
Boot0000* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0001* Linux Boot Manager	HD(2,GPT,f17f77b6-f394-46a5-b8b7-14b91d7b5b2e,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot0002* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0003* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0004* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot0005* Linux Boot Manager	HD(2,GPT,5bd1d45d-90ae-c64f-9cdb-8c86455bbac3,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000A* Linux Boot Manager	HD(2,GPT,f4cac5de-9b0b-4ca2-9c9e-2bfff1c2adfc,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000B* Linux Boot Manager	HD(2,GPT,1f5f4da2-e8cf-4c7d-86a8-e697c5055e91,0x800,0x200000)/File(\EFI\SYSTEMD\SYSTEMD-BOOTX64.EFI)
Boot000C* Linux Boot Manager	VenHw(99e275e7-75a0-4b37-a2e6-c5385e6c00cb)
Boot000D* UEFI OS	HD(2,GPT,f17f77b6-f394-46a5-b8b7-14b91d7b5b2e,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot000E* UEFI OS	HD(2,GPT,f4cac5de-9b0b-4ca2-9c9e-2bfff1c2adfc,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot000F* UEFI OS	HD(2,GPT,1f5f4da2-e8cf-4c7d-86a8-e697c5055e91,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO
Boot0010* UEFI OS	HD(2,GPT,5bd1d45d-90ae-c64f-9cdb-8c86455bbac3,0x800,0x200000)/File(\EFI\BOOT\BOOTX64.EFI)..BO

实际根据官方文档,

If systemd-boot is used as a bootloader (see Determine which Bootloader is used), some additional setup is needed. This is only the case if Proxmox VE was installed with ZFS-on-root.

使用命令确认一下,如果/分区是 rpool/ROOT/pve-1,基本就可以确定,我这里使用的是systemd-boot方式的引导。

root@PVE03SSD:~# findmnt /
TARGET SOURCE           FSTYPE OPTIONS
/      rpool/ROOT/pve-1 zfs    rw,relatime,xattr,posixacl,casesensitive
root@PVE03SSD:~# 

继续用 proxmox-boot-tool status 命令看看,这里比较重要的是,启动用的uefi还是grub的提示

// 显示的文本格式内容
System currently booted with uefi
19A9-F481 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sda2
19AA-6DD8 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sdb2
19AA-E4C2 is configured with: uefi (versions: 6.5.11-8-pve)  // 这个对应到 sdc2
WARN: /dev/disk/by-uuid/19AB-5A9E does not exist - clean '/etc/kernel/proxmox-boot-uuids'! - skipping     // 19AB-5A9E 这个对应到 故障盘的旧盘sdd2,应该替换为 新的 sdd2

接下来就是正式的在新盘的/dev/sdd2修复引导过程

格式化/dev/sdd2分区

proxmox-boot-tool format /dev/sdd2

确认一下,分区已经格式化正确,并且一致,命令如下:

 lsblk -o +FSTYPE

对/dev/sdd2修复引导

proxmox-boot-tool init /dev/sdd2 uefi

上面的命令执行完,再次确认引导的状态,我这里是能看到4个盘都有,就是对的。

 proxmox-boot-tool status

备注,这里,提示的2个旧的不存在的UUID,直接在文件 /etc/kernel/proxmox-boot-uuids 中删除对应的行即可。

Done,完美收官。

附录1、文件系统类型

  4 BIOS boot                      21686148-6449-6E6F-744E-656564454649
  1 EFI System                     C12A7328-F81F-11D2-BA4B-00A0C93EC93B
157 Solaris /usr & Apple ZFS       6A898CC3-1DD2-11B2-99A6-080020736631

附录2、参考链接

https://pve.proxmox.com/wiki/Host_Bootloader#:~:text=proxmox%2Dboot%2Dtool%20is%20a,from%20the%20vfat%20formatted%20ESPs.

附录1、视频操作演示

附录2、@Dasmz

博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。

对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费

Twitter: Dasmz

Youtube: @DasmzStudio

Telegram: @Dasmz

Donate
云乞讨