前言:大概从去年年底左右,我接到了一个很奇怪的任务,需要部署一个有着特殊功能的服务器,服务器本体是来自单位淘汰的一台老机器拿来利旧。结果没想到就是这么一个任务,让我断断续续的部署了半年的时间,因为这项任务并不怎么紧迫,只是“有就行,没有也无所谓“的状态,所以倒也没对工作本身造成什么影响,只是在部署的过程中遇到了大量的坑,还碰到了“疑似”硬件损坏,还意外得到了“高人指点”,解决的办法也是百转千回,期间多次想要放弃,但是最后不知道为啥我还是坚持下来了,我自己都不知道为什么。所以思来想去还是记录一下过程,或许会对有相同经历的人有所帮助。

避免傻逼来跳脸先做个声明:

1,不要问我这种服务器有没有意义
2,不要说什么“加钱上XXX不就得了“
3,不要说什么“电子垃圾别折腾了”
4,不要说什么“这种方案不安全”

这些问题我比你清楚,你就当我自己图一乐吧。

Screenshot From 2024-09-26 17-24-22.png


接受任务:一个特殊的“跳板服务器”

我们单位实行内外网分离方式来确保安全,运行业务的系统在独立的内网中,而连接互联网的网络和业务系统是物理分开的。

但是这就带来一个问题,有些外包公司的工程师需要远程维护服务器,就没有什么可靠途径。原来我们这边用的方法就是找几台双网卡的电脑,开机装个向日葵,需要的时候打开报数字,对方连接开始处理问题。

然后近年来开始严查“六关”,就是下班要求电脑都得关机,而且这些双网卡的电脑数量太少,一群人抢一台是常有的事情。

于是后来上面一个大头目就问我:能不能弄一个大内存的服务器,虚拟成好多个小系统,系统目的就是运行个类似向日葵的服务让人远程当跳板,别的功能都不怎么需要……

我一听,这特么不就是虚拟化么,但是双网卡的问题怎么解决?服务器接双网卡么?后来商量了一下,在网络层面做了一个映射,将内网的堡垒机的 Web 登陆界面映射到了外网的一个 IP 地址上,并且对特定的 IP 地址做了绑定。只有使用这个 IP 地址的机器,可以通过 Web 打开并登陆内网的堡垒机维护界面,进而进入内网进行数据维护。

后来头目问我这个东西能不能搞,最好还能实现定时管理,比如这些虚拟化的机器只有特定时间段可以使用,其他时间都无法连接……

我一想,用虚拟化平台来做,简直不要太简单,定时管理什么的只需要定时开关机就行了,恰巧我也想玩玩那种虚拟化服务系统,就有了点兴趣。头目表示说这个东西不急,毕竟现在大家还在排队用双网卡的机器,也就是费事点。能搞就搞,搞不成无所谓,实在不行,那就加钱上专业设备(如果能过审的话)。

其实我觉得这并不是什么好的解决办法,更好的其实是更为完善的堡垒机,带有网闸和账号管理之类的,但因为我自己想玩玩虚拟化,所以还是把这个任务接了下来。


记录1:没有视频信号,超出显示范围

接了任务之后就开始挑服务器,头目的意思是“利旧”,尽可能用淘汰的老硬件,如果有需求可以进行一些小升级。这个需求对于我这种垃圾佬来说居然莫名的感觉很“燃”,结果挑来挑去,发现符合配置要求的服务器只有 4 台,其中 3 台都是 IBM 时代的东西,最新的是一台 HP DL580 G7,这台机器居然有足足 64GB 的内存,还插满了四路 CPU,每颗 CPU 6 核 12 线程,总计 24 个核心,简直就是做虚拟化的最佳选择。

硬盘方面有 5 块,每块 600G,内置有 Raid 卡 P410i,虽然不多,但作为虚拟化应该是够用了。

于是就下载了 Proxmox VE 8.1,开始装系统。

结果第一步就遇到了大问题,启动自 Proxmox 的安装盘之后,直接屏幕就黑屏了,提示还是“没有信号,超出显示范围”。

这提示给我干懵了,我上次看到这个还是小时候连接 CRT 显示器,显卡不小心把刷新率设置到 85Hz 甚至更高的时候。

索性开始搜索,很快就找到了问题所在:

https://forum.proxmox.com/threads/out-of-range-issue-on-hp-servers.111086/

大概意思就是这机器显卡太老了,无法正常启动显卡驱动,解决办法也很简单,在安装的 Grub 界面按下 E,添加 nomodeset 就行了。


记录2:Raid 卡不支持 HBA,且主板仅支持 MBR

系统安装的时候发现不能装 Grub,因为分配的 Raid 5 不能作为启动盘使用。

因为是 5 块硬盘,全插在 P410i 的 Raid 卡上,想着不如弄成 HBA 模式吧,用 Proxmox VE 来管理全部硬盘,还能弄个 ZFS。但是这个 Raid 卡居然不支持 HBA 直通,网上有直通的教程,也是通过修改 Linux 内核来支持,太麻烦了。

研究了一圈,想要在上面安装系统的话,你需要单独划出来一块硬盘,自己创建一个 Raid0,并且在 Raid 设置中将其设置为启动盘,把系统装在上面。

而剩余的 4 块硬盘做个 Raid 5 的话……容量太小了,放不下太多镜像,想着直接做个条带什么的。结果不行,理由是做出来的 Raid 容量大于了 2TB,系统无法识别,强行用也可以,就是你多出 2T 的空间就浪费了。

2024-09-26T09:25:09.png

这时候就不得不说这个服务器的主板了,完全不支持 UEFI,这就意味着和 GPT 磁盘完全说拜拜了,只有 MBR 的启动引导,而 MBR 最大支持的硬盘空间是 2TB,超过 2TB 的硬盘是无法被识别的……毕竟是利旧服务器,不想搞硬 Raid 了,于是就想着不然让 Proxmox VE 接管硬盘管理,做软 Raid 吧。

但我们前面说了,P410i 在这个主板上不支持 HBA,怎么办呢?故技重施,每个硬盘单独创建一个单磁盘 Raid0,用来实现做类似 HBA 的形式,虽然会失去 Smart 信息,但是对于这么一个老古董来说,谁在乎呢?


记录3:CPU 核多但低能

最后兜兜转转终于开始安装系统了, Proxmox VE 的安装还是很快的,毕竟是基于 Debian 的魔改系统。装好之后搭配 ZFS 分区,发现磁盘性能并不怎么快,尝试在上面简单装了个 Win10 LTSC,速度慢的无法忍受,无论是虚拟磁盘读写,还是系统的 CPU 占用都居高不下……

这时候我才发现了重要的问题:这个机器的 CPU 居然是 E7-4807,6 核 12 线程,主频却只有 1.86GHz,而且没有 Turbo Boost,这个主频实在是太低了,跑虚拟机压根不知道能跑的动什么系统。如果我没记错的话,ATOM 的 X5 8550 主频也比这个高吧?

一开始我尝试多给虚拟机分配核心,然后关掉 Windows 10 大量的特效和占用并对服务进行精简,但依然收效甚微,这个 CPU 性能实在是太低了……尤其是图形性能,低的发指,而 Proxmox VE 对 Windows 的支持也是基于 KVM 的,迄今为止也没有什么好的 GPU 驱动。目前倒是有一个在开发的,结果还是不可用状态:
https://github.com/virtio-win/kvm-guest-drivers-windows/pull/943

我现在都不知道这个服务器的配置是干嘛来的,核心这么多,内存这么多,但主频又不行,问了下这个服务器原来是跑的一个“知识数据库”,查了下最早的负责人居然还他妈是我,我都没印象,我就记得他们工程师来了两次升级了一下数据,公司就跑路了。

我于是开始想,有什么办法来提升这台机器的虚拟化。既然是跑 Windows,那或许装 Windows Server 就是最优解?


记录4:除了“它”你别无选择

安装 Windows Server 在这台机器上可谓是困难重重,首当其冲的就是驱动问题。

首先是这机器原来是跑 Windows Server 2003 的,还是他妈的 32bit 版本,这已经不能用古董来形容了,尝试安装 Windows Server 2008,似乎也没有 Hyper-V 这种东西。想要跑虚拟化的话至少要走 Windows Server 2012 甚至更高。

那么问题来了,HP DL580 G7 这个老古董的机器,官方提供最后的驱动支持似乎是只有 2008 的,好像还是 32bit……什么 Windows Server 2012 之类的,压根没驱动。

我尝试了强行安装,代价就是主板芯片组都驱动不起来,你想在任务管理器里看框框都看不到。

没办法,只能根据设备管理器里看到的硬件 ID,一个一个在网上找驱动,没想到还真让我找齐了,大部分都驱动起来了……除了那块型号很奇怪的 ATI 的显卡。

ATI,啊,多么怀念的名字,想起我小学的 Rage 128 了,虽然现在叫 AMD 了,但没想到时隔多年我又他妈被这玩意给囚禁了。显卡驱动装不上就会导致 Hyper-V 压根不可用,我本来就是冲着图形性能来的,你没显卡驱动,那还 GPU 个毛线啊。

我原本还想着要是 Hyper-V 不行,我就弄个 Virtualbox 或者 Vmware 之类的开虚拟机也行,结果全被这个傻逼显卡驱动干碎了。

搜来搜去,发现这个问题是无解的,在 2024 年,能提供这块显卡支持的,只有 Linux 了。我有想过找一个 PCI-E 的显卡插上,但是一看服务器机器的挡板不好找,还是算了。

虽然 Linux 下可以跑 Virtualbox,但是缺乏好用的远程管理,Virtualbox 有个项目叫做 phpvirtualbox,但是这个项目死了很久了。有人 Fork 了这个项目,提供了最新版本的支持,但是支持很有限,Virtualbox 的每次小版本更新,你就得重新编译一次,而且还有大部分功能处于不稳定状态……

结果就是兜兜转转,发现能用的选项还是只有 Proxmox VE。

不如说,我除了 Proxmox VE 之外,别无选择。


记录5:闲鱼大法和最终的 Proxmox VE

想来想去,还是不愿意放弃,解决单核性能太差的方法有很多,既然软件不行,那就从硬件入手,最终我选择了闲鱼大法。

我发现闲鱼上能用不到 70 元的价格买到 4 颗 E7-4860,直接干到 10 核 20 线程,除了核心更多之外,频率终于提升了,默频 2.26 GHz, 可以 Turbo 到 2.67 GHz,单核性能也有了很大的改善。要说不爽的是 CPU 本体不贵,但购买邮费占比太高。

收到 CPU 后立即拆开服务器,HP 的服务器不但网上有手册,而且机箱上也有图示,拆起来很方便,不仅更换了 4 颗 CPU,而且还重新涂抹了硅脂,改良了散热。

更换后一次点亮,重新装回 Proxmox VE 8.1,再次运行虚拟机,虽然感觉还是不算太快,但至少比原来好太多了。至于图形性能,直接用 QXL,放弃所有 3D,只提供 2D 加速,至少跑个向日葵什么的当个跳板机是完全够用了。

于是在 Proxmox VE 中配置了 NAT 网络:
https://blog.einverne.info/post/2021/10/proxmox-ve-config-nat-vm-use-same-public-ip.html

设置了 ZFS 的最大内存占用:
https://www.cnblogs.com/surplus/p/14055003.html

更换了国内的数据源:
https://mirrors.tuna.tsinghua.edu.cn/help/proxmox/

并且通过自己的计划任务,实现了对应虚拟机的自动启动和关闭。

就此,这台“虚拟平台服务器”就开始了内部测试阶段,我也找了几个用户来进行测试,看起来运转良好,直到两个月后的一天……


记录6:为提升性能,升级出了大错

这个”土垃圾虚拟服务器“运行了大概两个月,属于”内部测试试运行“阶段,给了大概 3-4 个人来跑,反响还算 OK,毕竟不需要去排队抢机器了。但是伴随着运行时间变长,我发现服务器本身的响应速度也开始变慢。

可能是因为平常使用 Linux 有强迫症,总觉得这个服务器还可以优化的速度更快,所以在 Swap 上还有内核调度上也进行了一些调整,虽然有效果,但也一般般。

这时候 Proxmox VE 发布了 8.2 版本更新,我看了下 Changelog 发现了很多似乎很有用的新特性。

  • 新的 6.8 内核
  • 新的 ZFS 模块,可能会有新的性能提升
  • 新的 QEMU ,同样也有性能提升

我并非十分激进的人,但是我现在服务器已经装上了 Proxmox VE 8.1,我心想从 8.1 升级到 8.2 完全不是什么“大版本升级”吧,应该是没什么问题的……

所以为了进一步优化性能,选择了升级,然后为了安全起见,进行了 ZFS 的快照和备份,速度慢的发指,但好歹是完成了。

升级还算顺利,就在 Proxmox VE 自带的 Web UI 下就可以,但是升级到一半的时候就发现不对劲了,系统开始出现卡死,出现了类似 I/O 读写错误,心想不妙,尝试了许多方式,没有办法拯救,于是只能重启。

重启后系统就进入了彻底的完蛋模式,启动后发现 rootfs 都难以挂载,多次重启后 zfs 挂载也报错。

我心想坏了,不会是硬盘炸了吧?

找了个 Ubuntu Live CD 修复了 ZFS 的文件头,重启后的确又可以挂载了,结果没运行一会,再次出现了 I/O 读写错误。

其实这时候我已经基本放弃上面的数据了,其实上面也没啥数据,都是跳板机,备份也是怕麻烦再重新配置一次,于是跟试用的 3 个用户打了招呼,找了台 16G 内存的 PC 机,单独又装了个 Proxmox VE,配置了三个虚拟机,给他们临时先用着。值得一提的是我装的就是 Proxmox VE 8.2,一切正常。

2024-09-26T09:27:14.png

然后抱着重新来过,死马当活马医的态度,开始了对这个“被我升级挂”的服务器的修复历程。


记录5:到底是硬盘还是 CPU

因为系统出现的问题就是 I/O 读写错误,正常人第一个想到的就是硬盘挂了。现在连全新安装 Proxmox VE 8.2 的系统都很勉强,装到一半就会卡死,怎么看都像是硬盘问题。

但是服务器上的硬盘灯一切正常,我甚至弄了个 Ubuntu Live CD 对硬盘进行了检查,每个都好得很。

但硬盘这种事情,谁说得清呢,没准是暗病呢?但是这时候我在日志里又看到了另一个操蛋的记录:

NMI: IOCK error (debug interrupt?) for reason 61 on CPU 0

这就给我干懵逼了,不会是 CPU 坏了吧,难道被闲鱼上的贩子骗了?但不应该啊,我活了这么久,这是第一次见到 CPU 还能非物理损伤坏掉的?上次看到 CPU 挂还是早些年 AMD 毒龙之类的冒烟。

我拆掉了机器,仅仅保留 1 颗 CPU,再次安装 Proxmox VE 8.2,居然一切顺利。

果然是 CPU 的问题?

装好系统后进行了一些简单配置,结果过了 20 分钟之后,系统再次失去响应,依然是熟悉的 I/O 读写错误。

2024-09-26T09:27:36.png

草!到底是 CPU 还是硬盘?

我开始了排除法,得到了以下的结果:

  • 硬盘无论怎么测试,都显示没问题
  • 主板上插的 CPU 个数越少,系统稳定性越高,插满 4 颗甚至连 Proxmox VE 8.2 的安装都过不去
  • 无论如何安装 Proxmox VE 8.2,只要服务器运行超过 20 分钟左右,全部都会出现 I/O 读写错误
  • 无论保留哪一颗 CPU 安装系统,I/O 错误稳定出现

我陷入了疑惑,如果是 CPU 问题,不能 4 颗同时挂了?概率太小了。如果是硬盘问题,为啥怎么测试都没毛病?

但硬要我选择的话,我还是倾向于硬盘,这时候我看到了主板 Raid 卡也有了新的报错,P410i 说 Raid 卡电池没电了,缓存读写被关闭,而且有些时候还读不出 Raid 信息,更加坚定了我认为是硬盘问题的信念,于是我决定就此入手。


记录6:吕布骑狗,土垃圾用新固态

折腾了有半个星期,机器到底是 CPU 坏了还是硬盘坏了一直无法确定,我甚至觉得可能是内存坏了,进行了内存的插拔测试,发现和内存无关。但是这个问题一直无法解决,就放置了下来。

过了有好几个月,单位的组长问这个服务器咋样了,就说了这事儿,对方说不行换个硬盘看看,于是从仓库里拿出来一个新硬盘,一看,好家伙,还是服务器用的固态。这玩意插到这个老古董的服务器上真的是“吕布骑狗“了。

既然如此那就来试试吧,插上固态之后立即开始 Proxmox VE 8.2 的安装,居然安装很顺利,不需要我禁用 CPU 核心就可以装上不死机,难道真的是硬盘的问题吗?

结果机器放了半个小时,再次出现了 I/O 读写错误。

…………

果然不是硬盘的问题,那问题在哪儿呢?我看到了启动时报错的 Raid 卡信息,想起了这个问题……

难道是这块 P410i 有问题吗?

拆开机器进行了研究,发现这块 P410i 是可以整个拆下来的,上面除了 Raid 还有一些其他的模块,搜了下网上的确有 Raid 卡损坏导致的类似故障,就想着……不如换一块 P410i 看看?

2024-09-26T09:26:10.png

但是找遍了机房仓库,找不到类似的设备和备件,原来那么多 HP 的服务器居然都不见了…

这时候我想起了闲鱼,搜了一下,发现这板子居然只要 80 块钱,既然都折腾这么久了,还是不想放弃,不如就更换一下看看?


记录7:偶遇高人

闲鱼上卖给我这个板子的人是一个海南的,他看我要买,还给了点优惠,送了我一块 Raid 的电池,还有上面插的扩展缓存。

板子收到后经过检查成色非常新,应该是难得的库存备件,闲鱼上的老哥居然还给我详细的安装手册,照着装了下来,成功启动。

2024-09-26T09:26:30.png

2024-09-26T09:26:50.png

Raid 卡报错全部消失,安装系统也一切顺利。

看来问题真的要解决了,只需要等待半小时看会不会再次 I/O 错误了。

20 分钟过去了,依然正常

30 分钟来到了,错误还是如约而至……

这时候我真的是打算放弃了,能换的都换了,能测的都测了,难不成让我换主板吗?闲鱼上这种机器都可以买到,也就 200 块钱,可是真的有必要吗?

这时候闲鱼上的老哥还很热情的问我解决了没,我只能如实相告。

结果那个老哥的兴致起来了,开始给我提建议,让我进入 HP 的检测模式进行全部硬件的检测,他几乎知无不尽,完全了解 HP 服务器的全部设置。在他的帮助下,我对服务器进行了全方位的体检,得到了一个很疑惑的结论:

硬件都没有问题。

我就好奇的问那个老哥,你为啥这么了解?作为贩子来说这有点过于反常理了。

老哥意味深长的回答:“我以前是惠普金牌工程师,后来不干了,现在卖一些烂在手里的备件。“

最后老哥还说自己因为疫情收入下降,降薪,从惠普离职后自己给别的小公司做项目,还被赖账,现在还有很多钱没拿到手之类的……

居然能在闲鱼遇到金牌工程师……要知道这服务器都过保好多年了,你打电话给惠普付费都不一定会有人理你。

老哥最后告诉我说他几乎可以确定硬件没问题,唯一的问题可能就是原来的 Raid 卡电池没电了,会关闭缓存,让磁盘性能下降,现在电池补上了,应该磁盘性能会大幅上升,别的没理由会出现硬盘错误。

“我觉得你还是从软件方面找找原因”。

这是“前惠普金牌工程师”留下的建议。


记录8:被忽略的错误

那个工程师老哥的话更让我疑惑了,软件问题?软件能有什么问题?

我只是从 8.1 升级到 8.2,弄了个新内核,新 QEMU,新 ZFS,能有什么问题?如果有问题应开始就应该挂载不上,不应该是准时半小时后报错啊?

如果有问题为啥禁用部分 CPU 就可以安装,可以改变问题出现的时间呢?

重新复盘之后,发现问题出现在 8.1 升级到 8.2 时,如果真的是软件问题,那只能是这两者之间的问题了。

于是我仔细看,发现了盲点:
https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_8.2

里面有这么一句话: