以编程方式从头开始为 ESXi 6.7 创建和分区虚拟机磁盘

以编程方式从头开始为 ESXi 6.7 创建和分区虚拟机磁盘

root.img我有一个生成一些分区映像(等)的构建脚本boot.img。可以使用 将它们安装在正在运行的物理机或虚拟机上partclone

如何将这些分区映像组合成一个虚拟磁盘,以便虚拟机可以将其用作启动盘?我在使用 vSphere 6.7,我一直在尝试生成一个.vmdk文件,但任何与 VMWare 兼容的格式都可以。

我尝试过的:

  1. 生成一个普通磁盘映像 ( truncate -S disk.img 100G; parted -s disk.img mklabel gpt; parted -s mkpart..; kpartx -av disk.img; partclone.ext4 -b -s root.img -t /dev/mapper/loop1p2;),然后使用 进行转换qemu-img convert -S 64k -o compat6 -O vmdk disk.img disk.vmdk。由于不必要地复制两次映像,因此速度很慢,但使用正确的兼容性选项可能可以正常工作。
  2. 从头开始生成图像,然后将其安装为块设备并将分区图像写入其中。
  • qemu-img create -f vmdk -o subformat=streamOptimized test.vmdk 100G
  • sudo modprobe nbd
  • sudo qemu-nbd -c /dev/nbd0 test.vmdk
  • sudo parted -s /dev/nbd0 mklabel gpt(失败Error: Input/output error during write on /dev/nbd0

我发现了很多关于如何在磁盘安装到 VMWare 虚拟机后执行此操作的资料,但关于如何以编程方式构建这些虚拟磁盘文件的资料却很少。

答案1

问题出在subformat=streamOptimized选项上。VMWare 文档暗示它指的是“不支持随机读取或写入的流优化格式”,因此它不适合通用磁盘。删除该选项允许parted在将 vmdk 文件作为块设备安装时对其进行操作。

相关内容