You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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名称>

执行lsblkfdisk -l检查,那些已删除的卷应该不再显示了。


内容的提问来源于stack exchange,提问作者syam

火山引擎 最新活动