Home Archives Categories Tags Docs

OpenStack 镜像介绍

发布时间: 更新时间: 总字数:1827 阅读时间:4m 作者: 分享

简单介绍下OpenStack支持的镜像和现状。

virtual machine image

A virtual machine image is a single file which contains a virtual disk that has a bootable operating system installed on it

image disk formats

  • raw
    • 最简单的格式。kvm和xen都支持
    • 不支持snapshots
  • qcow2
    • 全称: QEMU copy-on-write version 2,通常被kvm使用。
    • 比raw小
    • 支持snapshots
  • AMI/AKI/ARI
    • Amazon EC2支持
      • AMI (Amazon Machine Image),是raw格式
      • AKI (Amazon Kernel Image),是一个kernel文件,即vmlinuz
      • ARI (Amazon Ramdisk Image),是启动时加载的ramdisk文件,即initrd
  • vmdk
    • VMware’s ESXi使用的格式
  • vdi
    • VirtualBox使用的格式,openstack不直接支持vdi格式,需要将其转换为其他格式才行。
  • vhd
    • Microsoft Hyper-V使用的格式
  • vhdx
    • 比vhd更先进的格式,支持更大的磁盘大小,防止宕机后数据丢失的问题。
  • ovf
    • 全称是:Open Virtualization Format,是虚拟机的packaging format,一个ovf package可以包含多个image files, .ovf xml文件定义了metadata
    • openstack不支持ovf package,必须从ovf中提取出image才行。
  • iso
    • 是被格式化为read-only ISO 9660的文件系统,被用作CD和DVD,iso包含可启动的操作系统,所有也可以视为一个虚拟机image

Container formats

The container format indicates whether the virtual machine image is in a file format that also contains metadata about the actual virtual machine

  • bare
  • ovf
  • aki
  • ari
  • ami

image制作的注意事项

  • 禁用不必要的服务(例如cups,postfix,sendmail,gnome界面进程等)
  • 默认运行级别不要设置为5
  • MAC地址不要写死
  • ssh server要自启动
  • 禁用防火墙(可以使用openstack安全组来控制instance的访问,instance的防火墙会导致排除问题困难)
  • boot时resize partitions
  • boot时从openstack metadata service获取ssh public key,放在本地
  • 保证image将boot log写在console上(在grub配置中加入 console=ttyS0)

NBD(Network Block Device)

https://en.wikipedia.org/wiki/Network_block_device

NBD是一个device,但内容不是本地提供的,而是远程提供的,通常nbd都是用于访问远程机器的一个storage device。

NBD分为server和client。在client主机上,有个内核模块会控制这个device,每当一个程序去访问这个device,内核模块就会转发到server端,通常server端都是userspace的一个程序,例如qemu-nbd。

举个例子:在一台linux上,如果想要修改本地一个qcow2格式的image,可以使用qemu-nbd命令将image的分区映射到nbd device上,此时qemu-nbd是作为server端的程序,一旦往nbd device上写东西的话,本地linux kernel模块就会转发给qemu-nbd,让qemu-nbd程序去处理,这样就达到了修改image内容的目的。

loop device

loop device是一个device,与NBD不同的是:内容是本地的一个file,而不是远程的device

Mount a qcow2 image

qemu-nbd - QEMU Disk Network Block Device Server: Export QEMU disk image using NBD protocol

qemu-nbd -c /dev/nbd0 imageName执行后,会出现/dev/nbd0p1、/dev/nbd0p2、/dev/nbd0p3,分别对应vm中的不同分区

vm_156e3:/dsx01/instances/instance-00000064 # l /dev/nbd*
brw-rw---- 1 root disk 43,   0 Oct 15 15:57 /dev/nbd0
brw-rw---- 1 root disk 43,   1 Oct 15 15:57 /dev/nbd0p1
brw-rw---- 1 root disk 43,   2 Oct 15 15:57 /dev/nbd0p2
brw-rw---- 1 root disk 43,   3 Oct 15 15:57 /dev/nbd0p3

可以直接mount虚拟机的某个分区: mount /dev/nbd0p1 /mnt,可以自行修改。

修改结束后,先umount /mnt,然后执行qemu-nbd -d /dev/nbd0,此时/dev/nbd0p1、/dev/nbd0p2、/dev/nbd0p3会消失。

注意: 如果image中带有LVM,在qemu-nbd之后必须执行vgscanvgchange -ay命令,让LVM的分区暴露成可以mount的设备,umount之后,先vgchange -an,然后再qemu-nbd -d

Mount a raw image (with LVM)

kpartx命令的作用:读device中的分区表,将扫描出的分区映射到device上。

  1. losetup -f 找一个空闲的设备
  2. losetup /dev/loop2 cirros-0.3.4-x86_64-disk.raw 关联image
  3. 查看一下/dev/loop0中是否有分区

    vm_156e3:~/xiexianbin_cn # kpartx -av /dev/loop0
    add map loop0p1 (253:7): 0 64260 linear /dev/loop0 16065
    
  4. 如果其中有分区的话,那么会有新设备: /dev/mapper/loop0p1

  5. 可以mount该分区: mount /dev/mapper/loop0p1 /mnt

  6. mount后就可以进行操作

  7. 如果image中使用了LVM,则需要执行vgscanvgchange -ay

  8. 结束先umount /mnt,然后kpartx -d /dev/loop0,然后losetup -d /dev/loop0

image格式间转换

qemu-img convert 命令可以在不同格式间转换。例如:从qcow2转换成raw格式

qemu-img convert -f qcow2 -O raw cirros-0.3.4-x86_64-disk.img.bak cirros-0.3.4-x86_64-disk.raw

完毕。

相关文章
最近更新
最新评论
加载中...