如何像 vmbuilder 一样手动为虚拟机提供信用

如何像 vmbuilder 一样手动为虚拟机提供信用

我正在我的家庭服务器上试验基于 KVM 的虚拟机。主机运行 Ubuntu Server 16.04.1 LTS,来宾也运行。

我能够使用 vmbuilder 创建来宾。它输出一个 qcow2 映像,然后我将其转换为 LVM 逻辑卷上的原始映像以提高性能。该图像的总大小约为 900MB,可以很好地满足我的需要。

但是,当我手动创建 VM 并从 ubuntu 服务器 ISO 安装 Ubuntu 时,我能够将逻辑卷作为块原始设备而不是文件原始映像公开给 VM guest。在我的测试中,这似乎通常会进一步提高磁盘性能,幅度不小,具体取决于我的测试方式。然而,这个虚拟机并没有那么精简(安装了 1.8GB 左右),而且启动时间也慢得多(vmbuilder 创建的块设备虚拟机启动时间约为 5 秒,我手动安装的基于文件的虚拟机启动时间约为 15 秒) 。

所以我的目标是拥有一个类似于 vmbuilder 安装的虚拟机、更少的软件包、快速启动等,但让它使用原始块设备作为存储而不是基于文件的原始映像。

问题:

  1. vmbuilder 创建的虚拟机与我手动安装的虚拟机有何不同?

  2. 我看到 Ubuntu(过去)有 Ubuntu JeOS,并且看到可以从服务器 iso 安装它的参考资料,但我不知道如何安装。这仍然是一个选择吗?如果是这样,那是 vmbuilder 安装的吗?

  3. 如何手动创建类似 vmbuilder 的系统,或者如何将 qcow2 映像转换为原始块而不是原始文件映像。

答案1

这还没有得到答案,但我能够找到部分解决方案。我发现的是这个文章,它描述了如何将 Qcow2 映像转换为原始块设备,而不是原始文件映像。

基本步骤:

  1. VM 需要关闭
  2. 使用以下命令将 qcow2 转换为原始图像文件:

    qemu-img 转换 [qcow2] [rawimg]

  3. 获取原始图像的大小(以字节为单位):

    ls -l [原始]

    123456789

  4. 创建 LV 并精确匹配原始图像的大小:

    lvcreate -L 123456789b -n [lvname] [vgroup]

  5. 将原始图像写入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>

相关内容