博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openstack中为虚拟机使用CDROM光驱设备
阅读量:6695 次
发布时间:2019-06-25

本文共 3295 字,大约阅读时间需要 10 分钟。

在Libvirt里处理

尝试了下面有几种方法,为虚拟机载入光盘文件:

1.使用ide方式挂载:

virsh attach-disk {instance_name} {iso_path} hda --sourcetype block --driver qemu --subdriver raw  --type cdrom

xml格式例如以下:

2.使用scsi方式挂载:

virsh attach-disk {instance_name} {iso_path} sda --sourcetype block --driver qemu --subdriver raw  --type cdrom

xml格式例如以下:

以上两种方法的差别就在于设备的驱动类型,使用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}Target     Source------------------------------------------------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}Target     Source------------------------------------------------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 begin                if inst_type['extra_specs'].get('hw_set_cdrom', False):                    LOG.info("** setting cdrom **")                    cd_cfg = vconfig.LibvirtConfigGuestDisk()                    cd_cfg.driver_name = 'qemu'                    cd_cfg.source_device = 'cdrom'                    cd_cfg.driver_format = 'raw'                    cd_cfg.driver_cache = 'none'                    cd_cfg.target_bus = 'ide'                    cd_cfg.target_dev = 'hda'                    cd_cfg.root_name = 'disk'                    cd_cfg.source_type = 'block'                    cd_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}Target     Source------------------------------------------------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}Target     Source------------------------------------------------vda        {volume_path}vdb        {volume_path}hda        -

转载地址:http://jbvoo.baihongyu.com/

你可能感兴趣的文章
前端地址大全
查看>>
DAY19-Django之model进阶
查看>>
从0移植uboot(六) _实现网络功能
查看>>
Linux命令——du
查看>>
Cube Stacking
查看>>
WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)
查看>>
UIViewContentMode各类型效果
查看>>
转:开启nginx的gzip压缩的相关参数设置
查看>>
转:网站架构-从无到有
查看>>
MUI的一些笔记
查看>>
Jenkins可持续集成Python自动化脚本
查看>>
Linux系统起源及主流发行版
查看>>
跨域问题、跨域cookie问题
查看>>
smarty获取php中的变量
查看>>
linux中wget 、apt-get、yum rpm区别
查看>>
关于Hogan的学习笔记
查看>>
coredump功能介绍
查看>>
Linux内核学习第五周 系统调用
查看>>
第三天,小作业,表达式,while循环
查看>>
HTML5编写规范
查看>>