1. 问题
物理机raid5由多块磁盘组成,其中一块损坏后,没有及时补充,之后又有一块磁盘损坏,通过降级状态添加磁盘进行了rebuild进行恢复。但克隆虚拟机或者创建虚拟机会直接卡死,命令不继续执行
plain
$ virt-clone -o CentOS7-template2 -n 192-168-0-189 -f /data/kvm/images/192-168-0-189.qcow2 --auto-clone
执行后卡着不动
2. 排查
- 查看服务日志
plain
$ journalctl -u libvirtd -f
2024-05-15 03:09:20.275+0000: 202836: error : virNetSocketReadWire:1806 : 读取数据时进入文件终点: 输入/输出错误
2024-05-15 03:21:26.725+0000: 202836: error : virNetSocketReadWire:1806 : 读取数据时进入文件终点: 输入/输出错误
- 复制虚拟机qcow2文件,发现文件大小会变得特别大,原来是 10GB,复制到其他物理机变成 100GB。怀疑磁盘相关数据文件损坏,libvirt服务相关依赖损坏,之后准备升级重启服务。
3. 解决
升级libvirt服务,用于修复 libvirt 异常组件
plain
$ yum update qemu-kvm libvirt libvirt-client -y
如果 qcow2 迁移后文件过大有异常,可尝试用下边命令,将虚拟机磁盘镜像从一种格式转换为另一种格式,并在此过程中进行压缩:
plain
$ qemu-img convert -O qcow2 -c 源.qcow2 目标.qcow2