Openstack中为虚拟机使用CDROM光驱设备
在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光驱设备的更多相关文章
- 也谈OpenStack中的虚拟机HA
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目. 它的社区拥有超过130家企业及1350位开发人员,这些机构与个人都将OpenStack作为基础设施即服务(IaaS)资源的通 ...
- Openstack中查看虚拟机console log的几种方法
Openstack中有时候虚拟机启动不正常,这时可以通过查看虚拟机console log能得到一些有用的信息. 有这些方法可以查看或获取虚拟机console log: 1)openstack控制台图形 ...
- OpenStack中的虚拟机(/dev/mapper/centos-root)进行磁盘扩容
一.虚拟机上先扩展分区: 二.centos系统root登入,新建分区 2.1 [fdisk -l] 最大分区为/dev/sda2,说明新创建的分区将会是sda3(在后面的步骤会进行选择) 2.2 输入 ...
- 云计算---记一次黑客攻击openstack创建的虚拟机
一:问题定位 现象: 近期发现有几台openstack云主机被修改密码并被肉鸡. 黑客操作日志: -- :: ##### root tty1 : #### -- :: top -- :: ##### ...
- Ceph在OpenStack中的地位
对Ceph在OpenStack中的价值进行简要介绍,并且对Ceph和Swift进行对比. 对于一个IaaS系统,涉及到存储的部分主要是块存储服务模块.对象存储服务模块.镜像管理模块和计算服务模块.具体 ...
- DPDK在OpenStack中的实现
随着云计算与大数据的快速发展,其对数据中心网络的性能和管理提出了更高的要求,但传统云计算架构存在多个I/O瓶颈,由于云平台基本上是采用传统的X86服务器加上虚拟化方式组建,随着40G.100G高速网卡 ...
- 设置VMware Player中的虚拟机和宿主机共享文件
设置VMware Player中的虚拟机和宿主机共享文件 试验环境: 虚拟机软件:VMware Player 6.0.3 宿主机os:windows7 虚拟机os:centos6.6(32位) 完 ...
- OpenStack 网络总结之:openstack中网络的基本概念
原文:openstack-install-guide-yum-icehouse.pdf/7. Add a networking service/Networking concepts OpenStac ...
- OpenStack Nova 高性能虚拟机之 CPU 绑定
目录 文章目录 目录 前文列表 KVM KVM 的功能列表 KVM 工具集 KVM 虚拟机的本质是什么 vCPU 的调度与性能问题 Nova 支持的 vCPU 绑定 vcpu\_pin\_set 配置 ...
随机推荐
- BZOJ1170 : [Balkan2007]Cipher
首先对于每个位置,求出它开始长度为y的横行的hash值,然后对于hash值再求一次竖列的hash值,排序后求出众数即可. 时间复杂度$O(n^2\log n)$. #include<cstdio ...
- 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基
4184: shallot Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 356 Solved: 180[Submit][Status][Discu ...
- error/exception/runtime exception区别
(1)java中的异常是什么? 异常指的是程序运行过程中出现的非正常情况或错误,当程序违反了语义规则时,jvm就会将出现的错误表示为一个异常抛出.在java中,一切皆对象,异常也是,它被当作一个对象, ...
- C#调用C++Dll封装时遇到的一系列问题
最近帮底层开发的同时用C#重新封装一下dll,也就是用C#类来封装C++Dll里的方法,以供用户使用. 之前也用到过类似的应用,大多数问题都出在类型转换上,但是这次的应用层出不穷,所以在这里总结一下, ...
- ChromeDriver启动Chrome浏览器后,地址栏只显示data;——chromeDriver版本不对
ChromeDriver启动Chrome浏览器后,地址栏只显示data; 错误原因: chromeDriver版本不对,不同版本的chromeDriver对应不同版本的chrome浏览器 chrome ...
- TCPIP网络协议层对应的RFC文档
原文地址:TCPIP网络协议层对应的RFC文档作者:西木 RFC - Request For Comments 请求注解 TCP/IP层 网络协议 RFC文档 Physical Layer Data ...
- asp.net core读取appsettings.json,如何读取多环境开发配置
摘要 在读取appsettings.json文件中配置的时候,觉得最简单的方式就是使用asp.net core注入的方式进行读取了. 步骤 首先根据配置项的结构定义一个配置类,比如叫AppSettin ...
- vs2012\vs2013\vs2015碰到生成时报该错误:项目中不存在目标“GatherAllFilesToPublish”
手头一个vs2010升级到vs2012后,web项目发布到本地目录时项目报错:“该项目中不存在目标“GatherAllFilesToPublish”” 通过谷歌大神的帮助,找到了解决方法.共享之. 原 ...
- Delphi下让窗口不显示在任务栏的另类方法
刚才看到了这篇东西<使窗口不在任务栏上显示(利用ITaskbarList接口)>,作者用ITaskList接口实现了隐藏窗口在任务栏按钮的功能,想起我好多年以前做的程序也有这样的功能,但是 ...
- lufylegend:Lbuttion等UI组件
1,矩形按钮LButtonSample1 首先来看看LButtonSample1按钮的绘制. 在lufylegend.js引擎中可以利用LButton类来添加一个按钮,但是你需要传入按钮弹起和按钮按下 ...