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 配置 ...
随机推荐
- js的sort()方法
说明 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. arra ...
- BZOJ3779 : 重组病毒
一个点的感染时间为它到根路径上虚边数+1. 用Link-Cut Tree模拟虚实边切换,每次切换时等价于在一段或两段DFS序区间更新,线段树维护即可. 时间复杂度$O(n\log^2n)$. #inc ...
- 16、Redis手动创建集群
写在前面的话:读书破万卷,编码如有神 --------------------------------------------------------------------------------- ...
- [原创]SpotLight性能监控工具使用介绍
[原创]SpotLight性能监控工具使用介绍 1 Spotlight工具是什么? SpotLight 是由Quest公司出品的一款第三方性能监控的图形化工具.SpotLight有一些的产品诸如可以 ...
- oracle linux dtrace
http://docs.oracle.com/cd/E37670_01/E38608/html/pref.html
- WinForm多语言版本实战项目演练
一.课程介绍 关于如何实现“WinForm多语言版本”网上有很多实现技术方案,可以说是“琳琅满目”,"包罗万象".俗话说的好:一千个读者就有一千个哈姆雷特!如果您工作中恰好也遇到这 ...
- .Net Discovery系列之四 深入理解.Net垃圾收集机制(下)
上一节给大家介绍了 .Net GC的运行机制,下面来讲下与GC相关的重要方法. 第二节.GC关键方法解析 1.Dispose()方法 Dispose可用于释放所有资源,包括托管的和非托管的,需要自己实 ...
- 基于设备树的TQ2440 DMA学习(1)—— 芯片手册
作者 彭东林pengdonglin137@163.com 平台 TQ2440内核Linux4.9 概述 一直想抽时间学习一下DMA驱动,今天就以S3C2440为例,这款芯片的DMA控制器足够简单,也比 ...
- Delphi 包的设计思想及它与PAS、BPL、DCU、DLL、OXC的关系
一.Delphi中各种文件的介绍,及其关系. OXC: ActiveX控件.会被安装到某一个组件包DPK中,在Imports中会创建PAS.DCU.DCR三个文件. DLL: 动态链接库文件,它的Ex ...
- poi excel导入导出
pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artif ...