赞
踩
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
此时可以看到原来整个系统的目录和文件都在
需要先找到原来的镜像存在哪里了
参考佛西博客 - Proxmox VE磁盘/目录详解,并且安装第二个硬盘,修改ISO/虚拟机存放位置。
可以看到 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数据恢复思路整理完成,教训就是虚拟机有自己的便捷性,但还是做好备份最重要。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。