在Libvirt里处理

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

1.使用ide方式挂载:

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

xml格式例如以下:

<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<source dev='{iso_path}'/>
<target dev='hda'/>
</disk>

2.使用scsi方式挂载:

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

xml格式例如以下:

<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<source dev='/var/lib/nova/instances/virtio-win-0.1-100.iso'/>
<target dev='sda'/>
</disk>

以上两种方法的差别就在于设备的驱动类型,使用hd×盘符挂载,挂载之后的设备会默认觉得是ide设备,而使用sd×盘符挂载。会默认觉得是scsi设备。

因为有些windows镜像缺少scsi驱动无法识别使用sd×盘符挂载的光驱设备。所以选择了hd×盘符来挂载光驱设备。

然后ide相同存在问题,ide设备是不支持热拔插的:

virsh attach-disk {instance_name} {iso_path} hda
error: Failed to attach disk
error: 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 cdrom
Disk attached successfully virsh 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 cdrom
Disk attached successfully virsh domblklist {instance_name}
Target Source
------------------------------------------------
vda {volume_path}
vdb {volume_path}
hda -

Openstack中为虚拟机使用CDROM光驱设备的更多相关文章

  1. 也谈OpenStack中的虚拟机HA

    OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目. 它的社区拥有超过130家企业及1350位开发人员,这些机构与个人都将OpenStack作为基础设施即服务(IaaS)资源的通 ...

  2. Openstack中查看虚拟机console log的几种方法

    Openstack中有时候虚拟机启动不正常,这时可以通过查看虚拟机console log能得到一些有用的信息. 有这些方法可以查看或获取虚拟机console log: 1)openstack控制台图形 ...

  3. OpenStack中的虚拟机(/dev/mapper/centos-root)进行磁盘扩容

    一.虚拟机上先扩展分区: 二.centos系统root登入,新建分区 2.1 [fdisk -l] 最大分区为/dev/sda2,说明新创建的分区将会是sda3(在后面的步骤会进行选择) 2.2 输入 ...

  4. 云计算---记一次黑客攻击openstack创建的虚拟机

    一:问题定位 现象: 近期发现有几台openstack云主机被修改密码并被肉鸡. 黑客操作日志: -- :: ##### root tty1 : #### -- :: top -- :: ##### ...

  5. Ceph在OpenStack中的地位

    对Ceph在OpenStack中的价值进行简要介绍,并且对Ceph和Swift进行对比. 对于一个IaaS系统,涉及到存储的部分主要是块存储服务模块.对象存储服务模块.镜像管理模块和计算服务模块.具体 ...

  6. DPDK在OpenStack中的实现

    随着云计算与大数据的快速发展,其对数据中心网络的性能和管理提出了更高的要求,但传统云计算架构存在多个I/O瓶颈,由于云平台基本上是采用传统的X86服务器加上虚拟化方式组建,随着40G.100G高速网卡 ...

  7. 设置VMware Player中的虚拟机和宿主机共享文件

    设置VMware Player中的虚拟机和宿主机共享文件 试验环境: 虚拟机软件:VMware Player 6.0.3 宿主机os:windows7 虚拟机os:centos6.6(32位)   完 ...

  8. OpenStack 网络总结之:openstack中网络的基本概念

    原文:openstack-install-guide-yum-icehouse.pdf/7. Add a networking service/Networking concepts OpenStac ...

  9. OpenStack Nova 高性能虚拟机之 CPU 绑定

    目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...

随机推荐

  1. android 开发 命名规范

    标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...

  2. zoj 3659 第37届ACM/ICPC 长春赛区现场赛E题 (并查集)

    题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...

  3. 【BZOJ-3532】Lis 最小割 + 退流

    3532: [Sdoi2014]Lis Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 704  Solved: 264[Submit][Status] ...

  4. Codeforces Round #375 (Div. 2) E. One-Way Reform 欧拉路径

    E. One-Way Reform 题目连接: http://codeforces.com/contest/723/problem/E Description There are n cities a ...

  5. FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)

    用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin ...

  6. Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)

    最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...

  7. WPF中的3D变换PlaneProjection

    在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果.这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供. 虽然W ...

  8. hdu5094 Maze

    --就是爬管道-- 还好内存给的多-- 不然就不会做了-- #include<iostream> #include<map> #include<string> #i ...

  9. WebLogic使用总结(五)——Web项目使用Sigar在WebLogic服务器部署遇到的问题

    今天在WebLogic 12c服务器上部署Web项目时,碰到了一个问题.项目中使用到了"Sigar.jar"监控Window平台下的cpu使用率.内存使用率和硬盘信息,sigar. ...

  10. C#编程(二十九)----------泛型接口

    泛型接口 定义 先来看一个简单的例子: public class Sharp {} public class Rectangle:Sharp {} 上面定义了两个简单的类,一个是图形类,一个是矩形类; ...