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 配置 ...
随机推荐
- android 开发 命名规范
标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字 ...
- zoj 3659 第37届ACM/ICPC 长春赛区现场赛E题 (并查集)
题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...
- 【BZOJ-3532】Lis 最小割 + 退流
3532: [Sdoi2014]Lis Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 704 Solved: 264[Submit][Status] ...
- 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 ...
- FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)
用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- WPF中的3D变换PlaneProjection
在UWP中有一个比较好用的伪3D变换PlaneProjection,可以以一种轻量级和非常简单的方式实现3D的效果.这种效果在Silverlight中也有这种变换,但在WPF中确一直没有提供. 虽然W ...
- hdu5094 Maze
--就是爬管道-- 还好内存给的多-- 不然就不会做了-- #include<iostream> #include<map> #include<string> #i ...
- WebLogic使用总结(五)——Web项目使用Sigar在WebLogic服务器部署遇到的问题
今天在WebLogic 12c服务器上部署Web项目时,碰到了一个问题.项目中使用到了"Sigar.jar"监控Window平台下的cpu使用率.内存使用率和硬盘信息,sigar. ...
- C#编程(二十九)----------泛型接口
泛型接口 定义 先来看一个简单的例子: public class Sharp {} public class Rectangle:Sharp {} 上面定义了两个简单的类,一个是图形类,一个是矩形类; ...