KVM已删除卷仍在客户机VM中可见的技术求助
解决KVM虚拟机删除卷后客户机仍可见的问题
你遇到的情况是因为仅删除存储池中的卷文件,没有从虚拟机配置中移除对应磁盘设备,也未通知客户机断开该设备,导致客户机依然能识别到这些“已删除”的卷。下面是一步步的解决方法:
1. 确认虚拟机配置中仍存在已删除的卷
首先检查你的虚拟机XML配置,看看那些被删除的卷是不是还挂在虚拟机上:
virsh dumpxml <你的VM名称>
在输出中查找<disk>节点,你会发现类似这样的条目(指向你已删除的卷文件):
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/deleted_vol.img'/> <target dev='vdb' bus='virtio'/> </disk>
2. 从虚拟机配置中移除磁盘设备
方法一:使用virsh命令 detach 磁盘
先关闭虚拟机(如果是运行状态,热移除需要客户机支持,优先推荐关机操作):
virsh shutdown <你的VM名称>
然后执行 detach 命令,这里的<目标设备名>是XML里<target dev='xxx'>中的值(比如vdb):
virsh detach-disk <你的VM名称> <目标设备名>
如果需要热移除(不关机),确保客户机里先卸载该设备(比如umount /dev/vdb),然后加上--live参数:
virsh detach-disk --live <你的VM名称> <目标设备名>
方法二:手动编辑XML配置
直接编辑虚拟机的XML文件,删除对应的<disk>节点:
virsh edit <你的VM名称>
找到对应已删除卷的<disk>块,删除后保存退出即可。
3. 确认存储池中的卷已彻底删除
再次检查存储池,确保卷确实被移除:
virsh vol-list <你的存储池名称>
如果还能看到目标卷,重新执行删除命令:
virsh vol-delete --pool <你的存储池名称> <卷名称>
4. 清理客户机侧的残留设备(若重启后仍存在)
如果重启客户机后还是能看到这些设备,可以手动刷新块设备:
- 针对单个设备执行重新扫描:
echo 1 > /sys/class/block/<设备名>/device/rescan
比如你的设备是vdb,就执行:
echo 1 > /sys/class/block/vdb/device/rescan
- 或者扫描所有SCSI主机:
echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -" > /sys/class/scsi_host/host1/scan # 可以用lsscsi命令查看所有hostX编号
如果涉及LVM卷组,还需要清理残留的卷组信息:
vgscan vgremove <残留的卷组名>
5. 验证结果
启动虚拟机并登录客户机:
virsh start <你的VM名称>
执行lsblk或fdisk -l检查,那些已删除的卷应该不再显示了。
内容的提问来源于stack exchange,提问作者syam




