我可以修改打开的磁盘映像,但不能修改 "save changes" 吗?

Can I modify a disk image while it is open, but not "save changes"?

我有一个脚本,我使用 hdiutil 创建 SD 卡的磁盘映像,然后装载该磁盘映像。然后,我使用 xattr 将扩展属性写入内部文件,并将它们重要地放入程序中。有什么办法可以逆转那些 xattr 的写入,这样当我卸载图像时它们就不会保存了吗?理想情况下,我会保留一份未动过的 SD 卡副本以供存档。有没有办法挂载磁盘映像,更改其中的文件,然后卸载它,而这些更改不是 "Saved"?由于时间原因,我尽量避免复制 SD 卡两次。

您可以使用 "shadow" 文件挂载映像;对卷的更改将存储在影子文件中,而原始图像文件保持不变。要重置回原始状态,只需弹出图像并删除影子文件即可。

实际上,如果您愿意,您甚至可以更狡猾,通过 "deleteing" 影子文件,同时图像仍处于挂载状态。文件的目录条目将立即被删除,但它会保留在磁盘上(并且可以读取和写入)直到最后一个程序关闭它,直到图像被弹出时才会发生。像这样:

hdiutil mount /path/to/image.dmg -shadow
rm /path/to/image.dmg.shadow

这样,图像弹出时,更改会立即消失;重新安装它可以使您获得干净的图像。不过,有一个警告:您必须 完全弹出磁盘映像,而不仅仅是卸载卷。卸载卷会使图像附加到 /dev 条目,影子文件更改仍然有效等。

详情见the hdiutil man page