虚拟化问题定位--存在持续IO的情况无法卸载云硬盘

问题背景介绍:

虚拟机操作系统centos

挂载数据盘vdb(将数据盘进行格式化,并挂载到文件中)

执行命令数据copy命令:

time dd if=/dev/zero of=vdb/test bs=1M count=100000 

通过命令卸载云硬盘发现卸载不成功,命令如下:

virsh detach-disk domain vdb --live
virsh qemu-monitor-command domain --hmp info block

代码分析

virDomainDetachDeviceFlags
	|
	|--conn->driver->domainDetachDeviceFlags
		|
		|--qemuDomainDetachDeviceFlags
			|
			|--qemuDomainObjFromDomain{获取domain}
			|
			|--virDomainDetachDeviceFlagsEnsureACL
			|
			|--qemuDomainObjBeginJob{QEMU_JOB_MODIFY}
			|
			|--virDomainObjUpdateModificationImpact{检查flags是否满足要求}
			|
			|--qemuDomainDetachDeviceLiveAndConfig(driver, vm, xml, flags){开启真正的卸载过程}
				|
				|--virDomainDeviceDefParse
				|
				|--qemuDomainDetachDeviceLive
				|	|
				|	|--qemuDomainDetachPrepDisk
				|	|
				|	|--qemuDomainDeleteDevice{qemu层删除设备}
				|	|	|
				|	|	|--qemuMonitorDelDevice{"execute":"device_del","arguments":{"id":"virtio-disk1"}}
				|	|
				|	|--qemuDomainWaitForDeviceRemoval
				|	|	|
				|	|	|-virDomainObjWaitUntils
				|	|
				|	|--qemuDomainRemoveDevice{libvirt层删除设备}
				|		|
				|		|--qemuDomainRemoveDiskDevice
				|			|
				|			|--virDomainDiskRemove
				|						
				|
				|--qemuDomainUpdateDeviceList
				|
				|--qemuDomainSaveStatus
				|
				|--virDomainDefSave
qemu层热卸载云硬盘的代码:
hmp_device_del
	|
	|--qmp_device_del
		|
		|--find_device_state{返回一个DeviceState对象}
		|
		|--qdev_unplug
			|
			|--qbus_is_hotpluggable{判断是否支持热插拔}
			|
			|--qdev_get_hotplug_handler
			|
			|--hotplug_handler_unplug_request{async}
			|	|
			|	|--hdc->unplug_request(plug_handler, plugged_dev, errp)
			|
			|--hotplug_handler_unplug{sync}
				|
				|--hdc->unplug(plug_handler, plugged_dev, errp)

当前libvirt只是通过qemu-monitor-command向qemu发送"device_del"命令,实际上若存在I/O读写的情况,qemu层并不会立即将云硬盘卸载掉,会持续一段时间才能卸载。

但是为什么会持续一段时间才能卸载,这个问题现在还不能确定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值