作者:田逸

2024年12月30日,某网站的一个项目主页访问故障。该网站运行在虚拟机上,基础环境是基于Centos 7 的PHP。其中MySQL数据库与Redis是单独的虚拟主机,与网站在同一局域网,都是运行在 Proxmox VE 集群中。


登录数据库MySQL,检查服务正常、客户端登录MySQL,状态正常。撰写一PHP测试脚本,也正常。后经多轮排查,程序员确定是Redis故障。因为当时忙于别的事情,就让他们自行处理。折腾了一阵子,没有结果,就把操作系统重启。虚拟机重启系统,一般来说是物理机安装的系统要快很多,因为没有硬件自检那个过程。可是几分钟过去了,还是没有正常启动,操作系统直接卡在引导进度条那里,再也不往下进入登录界面,也没有任何报错,如下图所示。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_Web



以单用户启动Centos 7,可以进入系统,查看系统日志,未能发现异常信息。怀疑文件系统损坏,运行工具“fsck”进行检查,也没有得到答案。正常启动Centos 7,仍然卡在引导进度白条那里。


为了保险起见,不在继续在原系统上做修复,而是打算从Proxmox Backup Server(以下简称PBS)恢复历史备份。恢复好几个不同日期的系统备份,引导系统后,还是卡在那个白色进度条那里。


无奈之下,重新创建一个虚拟机,安装同一版本的Centos 7.记录下不能正常启动的系统所隶属的虚拟磁盘(如下图所示),接着登录新创建虚拟机所在的Proxmox VE集群节点,编辑虚拟机配置文件(如142153.conf),将故障机所属的磁盘镜像追加到该文件中。注意,新的虚拟机系统已经有了一个镜像磁盘,编号为“scsi0”,那么需要将追加的行的第一个字段由“scsi0”更改为“scsi1”。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_Redis_02



追加完故障系统所属的镜像磁盘后,在Proxmox VE集群的Web管理后台,可以立即看到所添加的磁盘已经生效,如下图所示。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_Redis_03



启动新部署的Centos 7,最后还是卡住,不能成功引导进入系统。夜已深,快坚持不住了,但又不得不咬牙继续坚持。


怀疑集群有问题,将估计虚拟机的备份从PBS恢复到别的单节点Proxmox VE,还是不行。与Proxmox VE集群相比较,单节点这个Proxmox VE 版本为7.2,比集群的版本高(Proxmox VE 6.4).从这个点节点Proxmox VE Web管理后台,查看PBS的备份信息,选中故障节点的最新的备份,再单击左上侧菜单按钮“文件还原”,弹出备份文件的浏览界面,如下图所示。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_备份文件_04



依次点开lvm及其子项,发现我们需要的Redis数据库目录及文件,如下图所示。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_Redis_05



鼠标选中redis_db,再尝试单击底部按钮Download Zip,弹出对话框,将目录及其所属文件压缩并保存到操作者本地的系统,如下图所示。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_备份文件_06




由于IDC托管机房所采购的带宽很低,而且所下载的文件很大,大概有10多个G。将其远程下载到我的windows主机,完成后还要将其上传到远程的虚拟机系统,估计得好几天。咋办?


在Proxmox VE 集群创建一个新的虚拟机(或者用前边已经部署好Centos 7的虚拟机,并将手动挂接的故障虚拟机磁盘镜像删除,保证Centos 能正常启动),部署好Centos 7,安装图形界面及vncserver。用vncserver客户端远程连接Centos 7,用Firefox浏览器访问Proxmox VE Web管理后台,找到欲恢复的备份文件的目录,点击下载,压缩文件默认被保存在目录/root/Downlods.由于是本地局域网,下载速度非常的快。用unzip解压zip文件,将整个目录移动到Redis配置文件所定义的位置,启动Redis服务,任务完成。


提示:Proxmox VE 6版本,Web管理后台,可能看不到备份文件所需要的信息。

从Proxmox Backup Server(PBS) 备份恢复的虚拟机启动不了​_备份文件_07