这是一个创建于 1868 天前的主题,其中的信息可能已经有所发展或是发生改变。
手头有几个 dd 出来的 img 镜像,想以只读模式挂给虚拟机,但是添加虚拟磁盘向导里提示“不是虚拟磁盘文件”,不让加。
经过一番折腾,找到了办法:
1.用向导新建一个预分配空间的 vmdk 虚拟磁盘,为了节省时间,大小填最小值 1GB。
2.会生成两个 vmdk 文件,比如 vdisk.vmdk 和 vdisk-flat.vmdk。其中 vdisk.vmdk 其实就是个文本配置文件,可以用文本编辑器(比如记事本)打开,可以找到里面有这样的内容:
# Extent description
RW 2097152 FLAT "vdisk-flat.vmdk" 0
搜了一下,Github 上的 libvmdk 项目有一份文档《 VMware Virtual Disk (VMDK) format specification 》,里面有这些参数的含义说明:
RW:读写访问,改成 RDONLY 就是只读了。
2097152:扇区数,每扇区 512 字节(好像还有一些盘不用 512 字节?这就不知道了,我也没见过),所以这里就是文件大小字节数除以 512 (文件大小也应该是 512 的整数倍吧)。
FLAT:extent type,FLAT 就是直接 dd 出来那种,完全填充过的文件。
"vdisk-flat.vmdk":实际保存磁盘数据的文件名。
0:偏移量,跳过开头的 0 个扇区,也就是不跳过扇区。如果镜像文件是整个磁盘的,只想暴露单个分区给虚拟机,这个参数应该会有用。
3.我把这两行改成类似这样:
# Extent description
RDONLY 1000000 FLAT "myimage-flat.vmdk" 0
4.搞定!可以开机了。
5.如果虚拟机有写入动作,VMware 可能会弹警告,但是 Ubuntu 貌似没啥问题,就是 dmesg 里记录了一个 I/O Error 而已,还有就是需要手动 mount -o ro 来挂载。