bochs 中文文档 下载 App

格式转换与磁盘调整——flat sparse VMDK VHDX 互转

各格式的元数据和 bochsrc 差异

格式有元数据bochsrc 需 C/H/S可撤销典型用途
flat❌ 无必须手动指定❌OS 开发、纯原始数据
sparse✅ 有自动推断✅ 可以套 undoable实验环境
vmware3 / vmware4(VMDK)✅ 有自动推断✅ VMware 快照VMware 导入
vhdx✅ 有自动推断✅ Hyper-V 快照Hyper-V 导入
undone✅ 有(红日志)自动推断✅ 天然可回滚Bochs 特有的 undoable

从格式复杂度来看:flat(最简单)< sparse < vmware4(最复杂)< vhdx。

bximage 格式转换

flat → sparse

bximage -q -convert flat-to-sparse -filename flat.img -target sparse.img

转换后 bochsrc 里 C/H/S 不再需要:

ata0-master: type=disk, path="sparse.img", mode=sparse

flat → VMDK(给 VMware)

bximage -q -convert flat-to-vmware4 -filename flat.img -target disk.vmdk

然后在 VMware 里用"使用现有虚拟磁盘"打开 disk.vmdk。注意:转换后的 VMDK 是单文件、非拆分的——VMware 默认喜欢拆分成多个 2GB 片段,可能需要后续处理。

VMDK → flat(从 VMware 镜像转回 Bochs)

bximage -q -convert vmware4-to-flat -filename disk.vmdk -target bochs.img

转换后 bochsrc 里要重新手动指定 C/H/S——bximage 转换时不会输出这些参数,你需要自己算:文件大小 ÷ 512 = 总扇区数,然后选一组合理的 C/H/S。

VHDX → flat(Hyper-V 转回 Bochs)

bximage -q -convert vhdx-to-flat -filename disk.vhdx -target bochs.img

同样,转换后需要手动指定 C/H/S。

磁盘大小调整

扩大磁盘

bximage -q -resize -filename hd60M.img -size 120M

磁盘文件会被扩大到新大小(追加零填充)。但磁盘上的分区表不会自动更新——扩大后需要:

  1. 在 Bochs 里用 fdisk 重新分区
  2. 或者导出后在宿主用 GParted 调整分区

缩小磁盘

bximage -q -resize -filename hd60M.img -size 20M

警告:缩小会直接截断文件——如果磁盘上的数据超过新大小,数据会被物理切掉!务必先备份。

缩小后同样需要更新分区表(通常是用 fdisk 删除旧分区、重建新分区)。

其他调整工具

Bochs 的 bximage 做格式转换够用,但对于更复杂的场景可以用专门的工具:

工具平台优势
qemu-img跨平台支持所有 Bochs 格式 + qcow2 + 更多;可以直接用
VBoxManage(VirtualBox)跨平台支持 VDI/VMDK/VHD
OSFMountWindows可以挂载后在资源管理器里操作
HxDWindows十六进制编辑磁盘(OS 开发调试)
ddrescue / ddLinux原始复制

示例:用 qemu-img 把 flat 转 qcow2(更高效的压缩格式):

qemu-img convert -f raw flat.img -O qcow2 bochs.qcow2

qcow2 格式有内建压缩,节省空间——但 Bochs 不直接支持 qcow2(bochsrc 没有 qcow2 mode),所以转完还得转回来。

undoable:Bochs 特有的可撤销格式

bximage -q -create -mode undoable -size 60M -filename base.img

undoable 格式会在基映像旁边自动生成一个红日志文件(base.img.redolog)。所有对磁盘的修改都写在红日志里,基映像永远不变。如果想"撤销"所有修改:

bximage -q -commit -filename base.img -redolog base.img.redolog

或者直接删掉红日志重新来——就像 VMware 的快照一样。

bochsrc 里用 undoable:

ata0-master: type=disk, path="base.img", mode=undoable

OS 开发实验(反复启动、每次想回到干净状态)这个模式非常方便——删红日志比每次都重建 flat 磁盘快得多。