在Libvirt里抓鱼
尝试了以下有几种方法,为虚拟机加载光盘文件:
1.使用ide方式挂载:
xml格式如下:
====’hda’/></disk>
2.使用scsi方式挂载:
xml格式如下:
====’sda’/></disk>
以上两种方法的区别就在于设备的驱动类型,使用hd×盘符挂载,挂载之后的设备会默认认为是ide设备,而使用sd×盘符挂载,会默认认为是scsi设备。
由于有些windows镜像缺少scsi驱动无法识别使用sd×盘符挂载的光驱设备,所以选择了hd×盘符来挂载光驱设备。
然后ide同样存在问题,ide设备是不支持热拔插的:
virsh attach-disk {instance_name} {iso_path} hdaerror: Failed to attach diskerror: Operation not supported: disk bus ‘ide’ cannot be hotplugged.
研究了一番发现如果给这个光驱设备写一个空的source_path,挂载时只要替换这个source_path的值,它就不会认为这是一个拔插动作。
virsh domblklist {instance_name}TargetSource————————————————vda{volume_path}vdb{volume_path}hdb-virsh attach-disk {instance_name} {iso_path} hdb –sourcetype block –driver qemu –subdriver raw –type cdromDisk attached successfullyvirsh domblklist {instance_name}TargetSource————————————————vda{volume_path}vdb{volume_path}hdb{iso_path}在nova里生炉子
在nova里要做的就是给虚拟机添加一个光驱设备,并给予这个光驱设备一个空的默认路径。虚拟机磁盘设备的xml加工是在nova.virt.libvirt.driver.py中完成的。
磁盘设备的xml类是nova.virt.libvirt.config.py中的LibvirtConfigGuestDisk类,可以根据它的属性来创建一个新的实例。
这里加入了一个判定条件用于更灵活地控制这个设备是否开启,判定的依据是flavor的extra_specs中的hw_set_cdrom属性。
在nova.virt.libvirt.driver.py的get_guest_storage_config函数中加入以下代码(注意,盘符必须为hda):
for vol in block_device_mapping:connection_info = vol[‘connection_info’]vol_dev = block_device.prepend_dev(vol[‘mount_device’])info = disk_mapping[vol_dev]cfg = self.volume_driver_method(‘connect_volume’,connection_info,info)devices.append(cfg)# new code beginif inst_type[‘extra_specs’].get(‘hw_set_cdrom’, False):LOG.info(“** setting cdrom **”)cd_cfg = vconfig.LibvirtConfigGuestDisk()_cfg.driver_format = _cfg.target_bus = _cfg.root_name = _cfg.source_path = ”devices.append(cd_cfg)# new code end实际效果
挂载操作不用多说,,方法多种多样的……
看看效果
挂载前:
windows 2003:
windows 2008:
挂载后:
windows 2003:
windows 2008:
linux:
怎么卸载
给光驱更新一个空的source_path就可以了:
virsh domblklist {instance_name}TargetSource————————————————vda{volume_path}vdb{volume_path}hda{iso_path}virsh attach-disk {instance_name} “” hda –sourcetype block –driver qemu –subdriver raw –type cdromDisk attached successfullyvirsh domblklist {instance_name}TargetSource————————————————vda{volume_path}vdb{volume_path}hda-
另一个地址:
那我想明天可以是我的来世。