前缀、文档修改记录
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、参考链接
附录1、视频操作演示
附录2、@Dasmz
博客内,所有教程为手打原创教程,如果技术教程对您有所帮助,欢迎打赏作者。技术层面,闻道有先后,如有疏漏、错误,欢迎指正。技术博客的内容,一般具有一定的环境依赖,具有一定的年代依赖,酌情参考其中的内容,请勿完全照搬照抄。
对于博客内已提及的专业知识,如果需要技术指导,欢迎联系我,仅需支付工时费
Twitter: Dasmz
Youtube: @DasmzStudio
Telegram: @Dasmz