我前段时间买了两台OVH独立服务器,其中这台KS-LE-E各种问题不断,刚拿到手的时候就发现少了16GB内存,连IPMI上去发现确实是有一根内存条有问题:
当时就只想着解决这个内存的问题去了,发了个工单让他们给我把内存换了一根就好了。其他的硬件,比如硬盘的信息就简单看了下没发现什么大问题就没管它了,直接装了个PVE就拿来用了。这两天看邮箱的垃圾箱突然发现PVE给我发了很多封SMART错误的邮件:
登录服务器一看还真是,这块/dev/sdb的盘确实是有点问题了:
虽然这块盘现在还是能用的,但出于谨慎的态度我还是发了个工单问了下,OVH那边也不墨迹,二话不说直接就把这块盘给换了。在换之前我也没有在服务器上特别设置什么,就是简单看了下硬盘的分区以及当时的ZFS池状态:
OVH那边换完之后,我再次登录服务器查看,可以看到/dev/sdb这块盘是新换的了,没有了之前的分区表:
查看ZFS池状态,变成降级状态了,因为我这个是RAID10阵列,挂了一块盘也能正常运行:
关于在ZFS中更换硬盘,主要分为两种情况:系统盘(bootable device)、非系统盘。
如果是更换系统盘,则需要复制硬盘的分区表、生成GUID、以及重建EFI分区。而非系统盘的话不需要这些操作,直接更换就好了。
我现在的情况是属于更换系统盘,所以现在我需要把一块健康硬盘的分区表复制到这块新的/dev/sdb。现在我的服务器上除了sdb外还有sda、sdc、sdd三块盘,这些硬盘都是健康的,随便选一个复制就行:
sgdisk /dev/sda -R /dev/sdb
生成随机的GUID:
sgdisk -G /dev/sdb
然后更换ZFS池中的硬盘:
zpool replace -f rpool /dev/sdb3 /dev/sdb3
这个命令可能具有迷惑性,为什么新旧硬盘的分区都是/dev/sdb3?因为新盘的分区表是按照原来的分区表原封不动复制过来的,又因为新换的硬盘设备名正好还是sdb,所以完全相同。如果不是很明白,看看这个命令就懂了:
zpool replace -f [pool] [old zfs partition] [new zfs partition]
再次查看ZFS池状态可以看到在重建了,因为问题发现的早,我也没存多少数据,重建是非常快的:
重建完成后再次查看,全部都在线了:
现在还需要重建EFI分区:
proxmox-boot-tool format /dev/sdb2 proxmox-boot-tool init /dev/sdb2
更新配置:
proxmox-boot-tool refresh
重新生成/etc/kernel/proxmox-boot-uuids:
proxmox-boot-tool clean
查看状态:
proxmox-boot-tool status
如有下回显说明一切正常:
至此就全部完成了,可以重启一下测试服务器是否能够正常引导:
systemctl reboot
这个方法是通用的,不限于RAID10阵列,无论是RAIDZ-1、RAIDZ-2,或者RAID1,都可以用这个办法在ZFS中更换硬盘。
参考资料:
https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysadmin_zfs_change_failed_dev
https://forum.proxmox.com/threads/how-to-regenerate-etc-kernel-proxmox-boot-uuids.99333/
https://pve.proxmox.com/pve-docs/chapter-sysadmin.html#sysboot_proxmox_boot_tool
lala好高产 ,话说买这么多服务器是要跑什么大型业务吗
买了挂探针吃灰,哈哈=。=后续有打算生小鸡出来免费送几台=。=