我正在我的家庭服务器上试验基于 KVM 的虚拟机。主机运行 Ubuntu Server 16.04.1 LTS,来宾也运行。
我能够使用 vmbuilder 创建来宾。它输出一个 qcow2 映像,然后我将其转换为 LVM 逻辑卷上的原始映像以提高性能。该图像的总大小约为 900MB,可以很好地满足我的需要。
但是,当我手动创建 VM 并从 ubuntu 服务器 ISO 安装 Ubuntu 时,我能够将逻辑卷作为块原始设备而不是文件原始映像公开给 VM guest。在我的测试中,这似乎通常会进一步提高磁盘性能,幅度不小,具体取决于我的测试方式。然而,这个虚拟机并没有那么精简(安装了 1.8GB 左右),而且启动时间也慢得多(vmbuilder 创建的块设备虚拟机启动时间约为 5 秒,我手动安装的基于文件的虚拟机启动时间约为 15 秒) 。
所以我的目标是拥有一个类似于 vmbuilder 安装的虚拟机、更少的软件包、快速启动等,但让它使用原始块设备作为存储而不是基于文件的原始映像。
问题:
vmbuilder 创建的虚拟机与我手动安装的虚拟机有何不同?
我看到 Ubuntu(过去)有 Ubuntu JeOS,并且看到可以从服务器 iso 安装它的参考资料,但我不知道如何安装。这仍然是一个选择吗?如果是这样,那是 vmbuilder 安装的吗?
如何手动创建类似 vmbuilder 的系统,或者如何将 qcow2 映像转换为原始块而不是原始文件映像。
答案1
这还没有得到答案,但我能够找到部分解决方案。我发现的是这个文章,它描述了如何将 Qcow2 映像转换为原始块设备,而不是原始文件映像。
基本步骤:
- VM 需要关闭
使用以下命令将 qcow2 转换为原始图像文件:
qemu-img 转换 [qcow2] [rawimg]
获取原始图像的大小(以字节为单位):
ls -l [原始]
123456789
创建 LV 并精确匹配原始图像的大小:
lvcreate -L 123456789b -n [lvname] [vgroup]
将原始图像写入LV:
dd if=[rawimg] of=[路径/到/lv]
相应地更改 VM 的 XML 定义,例如:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='none'/>
<source file='/srv/virtual/vm_web/tmp5GWO4q.qcow2'/>
<target dev='hda' bus='virtio'/>
</disk>
到:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source dev='/dev/vgroup/lv_disk'/>
<target dev='vda' bus='virtio'/>
</disk>