利用Qemu(qemu-img)磁盘为Xen服务

来源:互联网 发布:java特点 编辑:程序博客网 时间:2024/06/14 02:11

来一段常规的开场白,放狗:

QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。

至此,Qemu是什么东西已经介绍完了。但是今天主题不是用Qemu来模拟一台完整的主机,而是只用它的磁盘模拟部分。

1、怎么用Qemu创建一个虚拟磁盘?

qemu和块设备相关联命令式qemu-img,这个命令的各个详细参数我就不解释了,网上一搜一大堆。

qemu-img create -f qcow2 filename.img

这个指令就是创建一个qcow2格式的磁盘,qcow2格式的优点如下:

QEMU image format, the most versatile format. Use it to have smaller images (useful if your filesystem does not supports holes, for example on Windows), optional AES encryption, zlib based compression and support of multiple VM snapshots.

大意就是这种格式支持AES加密,支持压缩,支持快照。

qemu-img create -f raw filename.img

qemu-img create -f filename.img(这个和上面的指令是一个意思,下面有解释)

这个指令就是创建一个raw格式的磁盘,raw格式的优点如下:

Raw disk image format (default). This format has the advantage of being simple and easily exportable to all other emulators. If your file system supports holes (for example in ext2 or ext3 on Linux or NTFS on Windows), then only the written sectors will reserve space. Use qemu-img info to know the real size used by the image or ls -ls on Unix/Linux.

简单,能很容易的转换为其他虚拟机的格式;

根据实际使用量来占用空间,但是和qcow2不同,raw需要宿主机支持hole(比如ext2,ext3,ntfs等);

能够调节空间最大值;

能够直接被宿主机挂载,以传输数据;

由于采用直接写文件的方式,性能高于qcow2;

注:由于raw格式是qemu-img创建磁盘的默认格式,所以如果不指定文件类型的话,默认是raw。

2、怎么用qemu-img创建一块增量磁盘呢?

qemu-img -b basefile.img -f qcow2 filename.img

这个指令就能创建出一块增量磁盘。在网上发现很多关于qemu实现增量磁盘的文章,但都是大同小异的在这个命令的结尾指定了filenam.img的大小。

qemu-img -b basefile.img -f qcow2 filename.img 10G

qemu-img -b basefile.img -f qcow2 filename.img 10000M

我当初实验增量磁盘的时候为这个困惑了一段时间,后来发现加上的这个大小确实没有实际的意义。后来索性就不写大小了。

创建好增量磁盘后分配给虚拟机,然后开机,发现创建的这个文件才慢慢地变大,而basefile.img的大小没有变化,而且登陆系统后,发现内容和basefile.img中的内容一模一样的。到此,说明增量磁盘创建成功了。如果虚拟机创建成功之后开机发现和basefile.img的虚拟机有区别,不好意思,好好检查为什么失败了。

ps:如果哪位高手知道这个大小是干什么的希望一定不吝赐教。

pss:这个指令很简单,但是在libvirt中怎么用呢?为了让大家别像我一样走弯路,在此列出libvirt中块设备写法。

    <disk type="file" device="disk">      <driver name="tap" type="qcow2"/>      <source file="/storage/nfs/win2003_template.img"/>      <target dev="hdb"/>    </disk>
其实关键是
<driver name="tap" type="qcow2"/>

这一行代码。

psss:当basefile.img作为一个base盘之后就不能对它所属的虚拟机进行开机操作了,最好是删除掉他所属的虚拟机。(只是删除所属的虚拟机啊!)

3、qemu如何将对qcow格式的磁盘进行快照相关操作?

qcow-img snapshot -l filename.img

列出filename.img文件下所有快照

qcow-img snapshot -c snapshotname filename.img

为filename.img文件创建一个名称为snapshotname的快照

qcow-img snapshot -a snapshotname filename.img

用名称为snapshotname的快照为文件名为filename.img的qcow2磁盘进行快照

qcow-img snapshot -d snapshotname filename.img

将名称为snapshotname的快照从文件名为filename.img中删除

qemu的快照确实很好用,而且做一次快照几乎不占用什么空间。但是在实验的过程中,反复的执行多次”快照还原后使用“的操作,偶尔会出现蓝屏的问题,而且有时是无法修复的。所以,这个功能一定要慎用。

小结:qemu的增量磁盘的出现对虚拟机的快速部署提供了很大的方便,而且qcow2格式更节省空间。其实不能说那个好那个不好,具体使用raw还是qcow2,就要看用户的需求了。