root.img
我有一个生成一些分区映像(等)的构建脚本boot.img
。可以使用 将它们安装在正在运行的物理机或虚拟机上partclone
。
如何将这些分区映像组合成一个虚拟磁盘,以便虚拟机可以将其用作启动盘?我在使用 vSphere 6.7,我一直在尝试生成一个.vmdk
文件,但任何与 VMWare 兼容的格式都可以。
我尝试过的:
- 生成一个普通磁盘映像 (
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
。由于不必要地复制两次映像,因此速度很慢,但使用正确的兼容性选项可能可以正常工作。 - 从头开始生成图像,然后将其安装为块设备并将分区图像写入其中。
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 文件作为块设备安装时对其进行操作。