云计算国产化之路 vnc登录 文件系统直通(virtio-9p) 扩展qemu接口 gpg WARNING 珍藏博客 虚拟内存情况dommemstat分析 免密码自动登录脚本 Linux网桥 测试网段IP占用情况 Linux 进程状态 systemc强制依赖 调试openstack ut uefi p2v 重做ubuntu内核 virsh创建虚拟机简介 virtio IO路径 虚拟化层升级后磁盘无法卸载卷 vmtouch使用 Taint flags 主机和虚拟机文件共享处理的几种方法 kvm分析工具 kvm中对磁盘的io cache 虚拟化不同导致的guestos中软件安装差异(未解决) 设备直通(PCI Assignment)到底是咋整的 virtio到底是咋整的 内核启动参数 虚拟化实时性提升(零)之配置步骤 中断虚拟化(pic)到底是咋整的 中断虚拟化(apic)到底是咋整的 Raid卡配置丢失导致服务器无法启动 tainted kernels cpu stuck for 23s问题分析 虚拟化实时性提升(一)之hostOS切换为强实时系统 内存虚拟化到底是咋整的 qemu-kvm中vcpu虚拟化到底是咋整的 风河虚拟化技术点分析 使用qga的好处 qemu迁移代码分析 虚拟机串口配置及其导出到主机pts和console.log System-based I/O vs. Raw I/O 虚拟机使用Hugepage(大页) 硬件辅助分页(hardware assisted paging) 修改centos7默认启动项目 virtio的工作流程——kernel中virtio-pci初始化(2) virtio的工作流程——qemu中virtio-backend初始化(1) qmp ceilometer取不到memory.usage指标 Virtio-Balloon超详细分析 slabtop输出 虚拟机磁盘cache导致的host os kernel崩溃 虚拟机cpu和memory性能优化测评 PCI配置空间(PCI Configuration Space) centos下网卡设备直通(VT-dpci passthrough)遇到的问题及其解决思路 libguestfs详解 yum卸载软件包及其依赖 通过原始Centos ISO来定制自己的ISO centos下网卡设备直通(VT-d,pci passthrough) (占位符)window虚拟机中拔盘如何通知到libvirt和qemu后端的 cirrus漏洞分析CVE-2017-2615 XSA-208 qcow2随笔 控制寄存器概览 ceilometer对接postgresql 解压initrd和vmlinuz qemu guest agent验证 QEMU升级指南(待续) ubuntu中kdump的配置 qemu(2.3)接口梳理 热迁移导致的FC存储场景下的multipath卷残留问题分析 virsh命令(4)secret,snapshot,pool,volume部分 virsh命令(3)之interface,filter,network virsh命令(2)monitor,host,nodedev部分 virsh命令(1)之domain部分 QEMU内存管理之FlatView模型(QEMU2.0.0) ovirt基于sanock的高可用(主机粒度HA) Sanlock防脑裂场景功能测试用例 gnocchi配置及与ceilometer对接指南 make patch for libvirt in centos centos使用sanlock指导 高可用nfs资料 ubuntu14中使用sanlock指导 LVM操作指南 sanlock相关功能验证流程汇总 make patch for libvirt in ubuntu libvirt.so.0-version `LIBVIRT_PRIVATE_1.2.7' not found gdb debug libvirt 基于ubuntu社区源码包编译libvirt compile libvirt(centos) No PCI buses available nfs lead to Linux halt nfs install and config anti-virus for cloud platform nova fetch image from glance(something about _base) token auth process ovs入门指南 virt software anti-virus something about ceilometer disk sample context interview questions openstack vm injection openstack Restful and RPC murano 概览 创建虚拟机流程(compute节点)之网络创建 创建虚拟机流程之compute_api之虚拟机实例填充之配额检测 创建虚拟机流程之compute_api之基本参数生成 创建虚拟机流程之compute_api 创建虚拟机流程(主) 创建虚拟机之image 创建虚拟机流程之准备网桥 创建虚拟机流程之virt 创建虚拟机流程之compute节点 CI/CD研发流程之工程创建 CI/CD研发流程之代码合入 CI/CD研发流程之UT(单元测试) 向openstack社区合入代码记 openstack/ceilometer/gnocchi杂谈 影子页表原理 mem_add(exec.c) qemu编译安装调试 openstack/ceilometer/gnocchi之Grafana简介 openstack wiki etcd openstack计量ceilometer openstack计费cloudKitty enventlet backdoor USB 安装VMWARE ESX pycharm设置指南 无法执行modprobe -a kvm-intel解决办法 QEMU配置项 网络不通小记 libvirt之XML(虚拟机定义文件) openstack-horizon 证书认证 ceilometer与ceph对接 openstack定时任务剖析(TODO) 服务器重启后mongodb进程无法启动 ubuntu14下新增openstack服务到service的导引 ERROR 1045(28000)-数据库连不上 Python两个内置函数—locals和globals unknown exit, hardware reason 31

使用操作系统的ISO文件启动虚拟机

2015年12月03日

本人使用操作系统的ISO启动虚拟机的过程中遇到一系列问题,现在将不同启动方式及其后端存储梳理如下。 由于我们的后端使用的ceph,这里只着重针对后端存储为ceph场景进行分析。

创建镜像

创建一个镜像,镜像格式选为ISO 注意这里格式需要同你的镜像文件相匹配,glance不会做转换,这里即使选为其他格式(如raw)也不会转换为RAW 另外,压缩包格式,目前有bug https://bugs.launchpad.net/glance/+bug/1482436 https://bugs.launchpad.net/horizon/+bug/147996

启动虚拟机

使用刚刚创建的镜像启动一台虚拟机,horizon默认多种启动方式。具体使用那种呢,让我们具体分析各种启动方式在后端存储的不同: (可以先参考本人的块设备相关的文章)

镜像启动(boot from image)

将启动时指定的镜像做一份拷贝,此拷贝作为虚拟机的根磁盘,此拷贝放置于vm pool中由nova进行对接管理。 这种实例通常称之为“易失性实例(ephemeral instance)”,在Amazon、Eucalyptus等侧重公有云的云平台实现中,这种实例没有关机操作(Stop),终止实例,根磁盘随之删除。Openstack有些不一样,实现了关机操作。

在libvirt的配置文件(具体分析可参考本人这篇博客)中显示如下, 可见虚拟机创建成功在ceph的vms pool中创建了一个块设备,作为虚拟机的vda盘。

在openstack的block_device_mapping表中,根据对应的实例id过滤出相关信息如下:

  • 可见bott_index为0说明是启动盘
  • destination_type为local说明是nova接管的虚拟机本地盘
  • delete_on_termination为1说明虚拟机删除的时候会删除此盘
  • image_id:指定了当前虚拟机启动的时候指定的那个镜像iodfkld

vnc登陆进去此虚拟机,发现磁盘大小为1G。这是因为我们指定的tiny的flavor, 启动虚拟机的磁盘大小取决于flavor。

实例快照

镜像启动的虚拟机做成的快照

做快照的时候,实质是利用当前虚拟机的文件和backing file生成了一个新的镜像。 在制作实例快照时,Openstack会先将disk上传至nova compute的临时文件夹中,上传到Ceph的image pool里,两次传输很耗时间。 后续Openstack应该会优化直接在Ceph内部做clone。 这种情况下的快照启动虚拟机,类似于镜像启动虚拟机。

卷启动的虚拟机做成的快照

会对虚拟机所有的磁盘做一个快照,然后生成一个镜像,镜像的meatadata指定生成的所有磁盘快照。 卷启动的虚拟机,有两个磁盘

做完快照后,所有磁盘都有快照

另外还有一个镜像,对没错,是镜像

卷启动

从存储卷启动实例。这种方式使用上面方式将镜像做成一个可启动(bootable)的volume,然后启动这个volume,并将instance的/dev/sda映射到这个volume上。 包括Amazon、Eucalyptus、Openstack在内的所有云平台都支持这种实例的关机操作(stop)。Openstack可以配置终止实例时是否同时删除对应的volume。

镜像启动(创建一个卷)(boot_from_image_crate_volume)

使用启动时指定的镜像做一个卷,然后使用这个卷启动虚拟机。 从用户的角度来看,仿佛是直接从镜像启动的,实际上Openstack在后台启动了一个用uuid命名的volume。

卷快照启动

基于快照创建一个新的存储卷volume_snapshot 由上面可见,我们的选择方式有从镜像启动和从镜像启动(创建一个卷)两种情况,分别创建两个虚拟机

然后看两个虚拟机的详情

VNC登陆进去,发现没有安装系统,安装过程发现没有分区,隐隐感觉有点不对。

点继续,分区就会失败了,报无法创建文件系统。

经过分析,发现当镜像是ISO时,上述的描述不准确,上述创建的磁盘只是作为引导盘。 需要新attach一个盘作为数据盘。

创建卷

创建一个卷,挂载到刚才创建的虚拟机上,然后安装系统
注意这里需要关机操作,因为磁盘驱动位ide不支持热插拔。 详见libvirt hotplugged ide volume error

解挂卷

detach卷,并设置卷为可启动。

卷启动虚拟机

但是使用镜像启动(创建一个卷)方式做出的卷,无法启动虚拟机。

怀疑是把部分数据安装到引导盘了(待确认)

上面问题的修复方法:需要在启动卷,安装系统的时候手动修改根目录在新attach的盘,即可