• 简体中文
  • 在虚拟机之间共享磁盘空间

    vm rebase 让一台已停止的虚拟机与另一台虚拟机或模板共用相同的磁盘块,相同的数据只存储一份。对未使用模板恢复或通过导入得到的虚拟机使用它,可以收回磁盘空间。

    从同一个 IPSW 分别恢复的两台虚拟机在磁盘上不共享任何内容,尽管它们的磁盘映像大部分相同:两台 iOS 27.0 iPhone 在各自约 20 GB 的数据中,有大约 8.6 GB 位于相同位置的字节完全相同,主要是系统宗卷。

    变基虚拟机

    1. 停止两台虚拟机。它们必须位于同一个 APFS 宗卷上。

    2. 查看变基能节省多少空间:

      vphone-cli vm rebase second --onto first --dry-run
    3. 变基到一台虚拟机或一个模板上:

      vphone-cli vm rebase second --onto first
      vphone-cli vm rebase second --onto 3f2a91c0d4e7

    --onto 接受虚拟机名称,或 vm template list 中的模板标识符(或其唯一前缀);名称同时匹配两者时,以虚拟机为准。--dry-run 只报告会共享和写入哪些内容,不写入任何数据。

    在旧映像释放之前,宗卷需要有足够的可用空间来存放写入的块。

    工作原理

    变基会以基准磁盘映像的 APFS 克隆为起点重建 second 的磁盘映像,只写入不同的块。替换映像之前,每个字节都会与原映像比对,因此客户机看到的磁盘完全一致。

    只有磁盘映像会改变:SEPStorage、nvram.bin、config.plist 和设备身份保持不变。变基到模板上不会改动模板,虚拟机也不会成为该模板的克隆:vm template show 不会列出它。

    理解结果

    节省的空间是 newly shared(新共享)的数值。相同且在磁盘上已经是同一批块的字节会报告为 already shared(已共享),对它们变基不会释放任何空间。

    vm create 从同一个模板创建的虚拟机已经共享该模板的块,因此把其中一台变基到另一台或该模板上,释放的空间很少。命令会在比对前提示这一点,节省量不足 0.1 GB 时也会再次提示。值得变基的是未使用模板恢复(--no-template)或导入的虚拟机。

    注意事项

    • 只有在没有其他东西持有旧映像的块时,空间才会真正收回。虚拟机的快照以及从它克隆出的虚拟机都会保留这些块;请先删除它们,否则不会节省空间。
    • du 和访达仍按完整大小计算每个映像。宗卷的可用空间(df)才是准确的衡量标准。
    • 任何一台虚拟机写入磁盘后,两个映像都会再次产生差异。从不启动的基准(例如模板)始终是最好的基准,以后再次变基即可收回产生差异的部分。
    • 被中断的变基不会改动虚拟机,但可能在其中留下一个隐藏的 .rebase-* 文件夹;请删除该文件夹。

    另请参阅