温馨提示:本文最后更新于 2022年6月3日 一些文章具有时效性,如有错误或已失效,请在下方为我 留言 或者直接 联系

PVE 突然坏掉了?!(虽然还是修好了)

封面图: 銀髪ゴス Pixiv ID: 72346170 Member: カット3日目東タ-46b

开端

大概是昨天 11:40 左右的时候,Uptimerobot 连续发送了数条邮件到了邮箱,很显然这是异常的,毕竟大部分时间他们都是几乎 100% 的在线率,结果却突然全部暴毙了(包括这边的博客)然后设备的 SSH 也登不上去,然后决定去 PVE 面板看看,好家伙面板也打不开,这明显是出大事了。

接下来能怎么办呢,也只能去 IPMI 看看发生了什么,打开远程控制,一看我的天哪(如下图)


这怕是倒了八辈子的血霉了,一眼看上去,像极了磁盘暴毙(才用了不到一年就暴毙只能说是倒霉了)

因为是 SSD 所以姑且没盲目去 reboot 先开了个工单,尝试联系一下服务商,让他们检查一下然后得到的回复是......


很显然不是什么很好的情况了,不过既然说到了重启,那就重启一下看看吧

机器成功重启,这时才让人松了一口气,但是马上其他问题就接踵而至了,仔细一看 Hostname 变了而且密码怎么都不正确

不过另外一位和我合租这台设备的老哥很快就进 recovery mode 干掉了密码,然后却发现.....密码改了


检查后发现是 passwd 和 shadow 文件的权限变了(多了个 i ),处理方法也很简单

chattr -i /etc/passwd
chattr -i /etc/shadow

去掉 i 之后就可以正常修改密码了,但是此时网络依旧是异常的,因为母鸡有多个 IP 也是为了防止出现额外的问题,这里就直接发工单让服务商那边解决了(同时也让他们帮忙检查了磁盘状况)


很显然,配置文件变得乱七八糟了,不过服务商很快就给修好了(果然让那边处理是没错了)

问题能快速解决自然是很好的,简单检查来看,似乎也没发生数据丢失,但是 PVE 没法启动了报错来看是没法找到节点


至少数据没丢算是不幸中的万幸了


高潮(高潮了?)

那么接下来就得找到问题的来源了,初步判断应该是和 Hostname “擅自”改变有关系吧,毕竟 PVE 的 nodes 名称和 Hostname 是一致的,通过资料查找也能看出,原本修改 Hostname 之后是需要对 node 进行修改的

既然知道大概原因那就从这个角度出发吧,姑且先把 Hostname 给该回去,因为 PVE 是基于 Deiban 的,那么用 hostnamectl 就行了大致按照 hostnamectl set-hostname hostname 来使用就行

改完了自然先 reboot 看看吧?啊,一堆 Failed


大致来看,PVE 的 cluster 没能成功启动,不过原因也很明显了,启动后可以看到 Hostname 又被改回去了???

好吧,那就去把 /etc/hosts/etc/hostname 进行一下修改吧,当然结果是还是不行.....

但是这次启动时的 cloud-init 信息倒是让人印象深刻,所以为什么物理机里面会有 cloud-init ?!记得 PVE 默认是不会安装这个东西的啊,再一看 hosts 果然有一些被注释掉的东西,是和 cloud-init 相关的东西


也就是说, cloud-init 贴心的把 Hostname 给改回来了......

这里稍微注释掉 /etc/cloud/cloud.cfg 中和 Hostname 相关的东西后,再修改重启,果然不出所料 PVE 恢复正常了

尾声

同样的也可以注意到 cloud-init 不但可以修改 hosts 也可以修改 network 相关设置以及 ssh 设置(包括 passwd ),那么这次的问题就近怎么出现的呢?可能很大程度上和 cloud-init 是有关系的,但是很显然这也很奇怪, cloud-init 不可能会凭空出现吧?但是这个问题也不由得而知了(如果有大佬知道还望解读一下)

这里指的一提的是 /etc/pve 这里的东西是在 pve-cluster 启动的时候产生的,且会在 pve-cluster 停止的时候被清空,实际文件由 sqlite 来处理,位置是 /var/lib/pve-cluster 文件名为 config.db ,这里值得注意的是,在 Hostname 不正确的时候, cluster 是无法启动的,这一点和网络上面关于 PVE 启动状态下修改 Hostname 的方法是有所差别的,在 PVE 正常启动状态下, /etc/pve 内的文件是正常且存在的且是被存储在内存中,因此可以进入直接修改 node 但是在 cluster 未启动时,这个文件夹时不存在的

当然,这个事情也可以说是强调了 备份 的重要性,就算是杜甫也不例外,因为你也不知道什么时候会出现突发状况摧毁你的数据,或许稍不注意你的数据就“上云”了(物理)

关于备份这一块,实际上站点目录用 rclone 定期同步到其他存储设施就行,而数据库则可以通过主从复制的方式来进行备份,然后关于主从复制的事情,之后也谈一谈吧