pve(proxmox)宿主机奔溃无法进入系统,lxc容器和虚拟机迁移,无备份,硬盘未损坏,记录数据找回过程及思考

pve的主机突然CPU满载,然后远程断电后pve就无法启动了,之前一直上面的虚拟机和容器也没有备份,折腾了两天总算找回来了记录一下处理过程和思路,方便后续查找。

一、隐患分析

1.周四突然手欠,由于之前家里的pve主机老给我发邮件,提示我硬盘有问题,但可以正常使用,我从网上找了半天也没有好的关闭方案,随后我就看看smart这个硬盘检测服务关闭能不能生效

硬盘smart检查服务关闭
systemctl disable smartmontools
systemctl enable smartmontools
systemctl stop smartmontools

2.看到pve有个ceph从来没用过(不知道干啥的),于是手欠尝试了一下,安装完成后,连接地址配置到了pve本机,但好像没啥用。

3.我的pve主机i3-2120 16g内存小马拉大车,硬盘一个ssd+一个hdd,混合存储,删除了local-lvm卷都合并到local下

二、问题解决之路

我本人对Linux的了解,只是会用一点儿命令,然后知道Linux万物皆文件。

主要参考文档Proxmox VE 中文手册 v7.3 — Promxox VE 中文文档 7.1 文档

1.pve开机直接进入initramfs 模式,比较高级我也不懂,我只知道

参考这篇文章http://www.zztongyun.com/article/pve%E5%90%AF%E5%8A%A8%E5%8D%A1%E5%9C%A8loading

blkid  //查看硬盘信息,你只要查出硬盘格式为type=ext4 的分区

fsck -t ext4 /dev/sdb2  -y 
用这个命令修复了几次还是报错

但至少硬盘没坏,后来我也把硬盘拆下来,放连到另一台Linux电脑上试了一下(本以为都是Linux可能可以直接打开),结果提示让格式化,应该是pve的文件系统在deepin上不识别。

然后也尝试了用pve的安装镜像进debug模式折腾半天也没啥用。

2.重装系统打算用pve来识别自己原来的系统盘

重装完成后用,插上原来的两个硬盘数据盘,了解了pve有vg,lv,lvm等概念

vgdisplay查看 默认的vg名称都叫pve所以系统识别时会有重名的风险

 用 命令

vgrename OFZVRn-M7NP-nomv-ooqg-XCwZ-8cSx-Wenkck vg 
# vg的ID是不重复的 vgrename vgid vg新名称

把旧存储的vg名称改成其他名字防止冲突,此时有报了另一个错,而且再改回去这个错也还在,可能时系统报错的真正原因但是不知道怎么处理。

此时在pve的页面上是可以看到这两个硬盘的,但是从挂载需要先格式化硬盘,于是查一下pve挂载原数据盘

 参考这篇文章Proxmox VE重装后,如何无损挂载原有的数据盘? - 知乎

挂载了半天我的 /dev/sdb3 因为报错挂不上去,后来想到可能是我的两个硬盘做了融合,不能在再单独挂载于是查了一下,有人提了lvm这个存储的挂载

先用lvdisplay 看一下情况,发现旧的路径是 dev/vgname/swap 和  dev/vgname/root

 此时挂载应该挂载 lv的路径 

mkdir /mnt/vgold  #创建挂载点
mount /dev/vg/root  /mnt/vgold

此时可以看到原来整个系统的目录和文件都在 

3.系统的虚拟机和容器恢复

需要先找到原来的镜像存在哪里了

参考佛西博客 - Proxmox VE磁盘/目录详解,并且安装第二个硬盘,修改ISO/虚拟机存放位置。

参考佛西博客 - PVE的local和local-lvm 

可以看到 local-lvm删除后的虚拟机等数据是存在 /var/lib/vz下 

3.1 pve中虚拟机的恢复:按照官网的做法可以创建一个虚拟机将raw文件或者qcow2文件挂载上去

以的100虚拟机ikuai为例

qm create 100 --memory 2048 --net0 virtio,bridge=vmbr0
qm importdisk 100 /mnt/vgold/var/lib/vz/images/100/vm-100-disk-0.raw local --format=raw
qm importdisk 100 /mnt/vgold/var/lib/vz/images/100/vm-100-disk-0.qcow2 local --format=qcow2

#查看对应文件夹 有哪个文件就用哪个 local 是你新存储文件的位置 我之前删掉了local-lvm

 等待成功

页面查看并启动验证

出现未使用硬盘

编辑一下,保持默认,并保存

 选项中修改:引导顺序

启动测试正常

 3.2 pve中备份文件的恢复 

查看 ls /mnt/vgold/var/lib/vz/dump/ 的备份,lxc为容器,qemu为虚拟机

备份恢复

qmrestore help 查看帮助
-storage local-lvm 配置新的虚拟机的存储位置
-unique true  配置是否生成新网卡
# 虚拟机恢复 102为新机器编号

qmrestore vzdump-qemu-102-2023_07_06-10_42_50.vma.zst 102


#容器恢复 103为新容器编号
pct restore 103 vzdump-lxc-103-2023_07_27-11_05_34.tar.zst

3.3 无备份容器恢复,我的大多数服务都是直接使用pve的容器创建,且无备份,使用虚拟挂载硬盘的方式无法恢复,于是想到直接把容器的镜像拷贝的新的pve目录下,发现并没有直接识别

查看全局搜了一下新增的容器增加了那些文件 发现在/var/lib下和vz同级有一个lxc的目录

发现这里也有lxc的配置, 从旧硬盘拷贝对应文件到 /var/lib/lxc/104 目录

拷贝容器配置
cp -r /mnt/vgold/var/lib/lxc/110 /var/lib/lxc/

root@pve:/var/lib/lxc# ls /var/lib/lxc/  #确认多了目录
103  104  110

拷贝镜像
cp -r /mnt/vgold/var/lib/vz/images/110 /var/lib/vz/images/

 本以为这就可以启动了,pct start 110,发现少一个配置文件

找了一下新主机别的已有容器的配置文件,在/etc/pve/nodes/pve/lxc 这个目录下,然后去旧目录找居然没找到配置

查看新机器上的配置,发现并不复杂,自己复制写一份

 代码如下

root@pve:/etc/pve/nodes/pve/lxc# cat 110.conf 
arch: amd64
cores: 2
hostname: devops-vm4
memory: 8192
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.3.1,hwaddr=4E:70:6A:70:B6:EB,ip=192.168.3.112/24,type=veth
onboot: 1
ostype: centos
rootfs: local:110/vm-110-disk-0.raw,size=40G
swap: 8192
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop: 
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir

主要修改 raw文件的位置和名称 最好和镜像一致 ,此处文件内容根据自己的实际情况修改

查看界面发现多了一个110容器,修改网卡配置因为配置是拷贝其他机器的,所以网卡的hwaddr会重复,重新添加网卡测试一下,

 验证一下镜像是否正常,之前的docker服务启动都正常

4. 按照容器备份思路应该可以对未备份虚拟机进行恢复, 配置在

/etc/pve/nodes/pve/qemu-server 目录下,看了一下还是用3.1的步骤比较简单,防止某些虚拟ID重复。

支持pve数据恢复思路整理完成,教训就是虚拟机有自己的便捷性,但还是做好备份最重要。

  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值