我有 DMG,需要挂载并写入文件。挂载时,finder 将根目录和所有内容显示为只读。
然后我发现了“mount -w”。但是当我运行它时,我得到了“mount:未知的特殊文件或文件系统”。
我如何才能将该磁盘映像安装为可写,或者强制将文件写入其中?
答案1
几乎所有只读 DMG 实际上都是压缩的(UDZ0
——参见hdiutil(1)
手册页),因此它们的文件格式不支持简单地“翻转一点”来使它们可写。
您可以使用磁盘工具或
hdiutil imageinfo filename.dmg
...查看磁盘映像的格式。然后您可以使用磁盘工具或类似工具
hdiutil convert filename.dmg -format UDSP -o filename.sparseimage
...将其转换为读写格式。请注意,转换不会就地进行,因此您必须告诉它将输出文件放在有足够空间容纳所有数据的未压缩副本的文件系统上.dmg
。
该.dmg
扩展并不能保证图像确实被压缩,但这是迄今为止最有可能的可能性。
您还可以使用 实现其他几种可能hdiutil
。例如,如果您的文件.dmg
实际上是未压缩的只读文件 ( UDRO
),则可能可以强制将其安装为读写文件。此外,如果您希望保留.dmg
压缩文件但仍希望以可写方式安装,则可以使用“影子文件”安装它;所有写入实际上都会写入影子文件。
更新:这个问题的其他答案似乎.dmg
总是认为这意味着,UDZ0
但事实并非如此。从hdiutil(1)
手册页中,以下是可以具有的内部格式列表.dmg
(请注意,其中一些格式可以具有不同的默认文件扩展名类似于.sparseimage
,但我很确定这也不是硬性规定。
UDRW - UDIF read/write image
UDRO - UDIF read-only image
UDCO - UDIF ADC-compressed image
UDZO - UDIF zlib-compressed image
UDBZ - UDIF bzip2-compressed image (OS X 10.4+ only)
UFBI - UDIF entire image with MD5 checksum
UDRo - UDIF read-only (obsolete format)
UDCo - UDIF compressed (obsolete format)
UDTO - DVD/CD-R master for export
UDxx - UDIF stub image
UDSP - SPARSE (grows with content)
UDSB - SPARSEBUNDLE (grows with content; bundle-backed)
RdWr - NDIF read/write image (deprecated)
Rdxx - NDIF read-only image (Disk Copy 6.3.3 format)
ROCo - NDIF compressed image (deprecated)
Rken - NDIF compressed (obsolete format)
DC42 - Disk Copy 4.2 image
答案2
这是我刚刚在一个项目中使用的方法,也是迄今为止最好的方法。在这里找到它:
http://myjeeva.com/best-possible-way-edit-read-only-dmg.html
使用 hdiutil 附加只读 dmg 文件
hdiutil attach -owners on /path/to/your.dmg -shadow
修改您的 DM。使用命令行添加、编辑或删除内容 - 在 GUI 中执行此操作可能会产生奇怪的副作用或权限问题。此外,您可能需要须藤命令
通过以下命令分离已安装的驱动器或将其从 Finder 中弹出
# fill disk number at <number>
hdiutil detach /dev/disk<number>
将阴影 dmg 转换/写入只读 DMG
hdiutil convert -format UDZO -o /path/to/new.dmg /path/to/your.dmg -shadow
答案3
如果 Rd-onry DMG 上有足够的“空间”,您可以使用磁盘实用程序将其转换为 R/W DMG,并根据需要将其转换回压缩 DMG。否则,您可以使用 hdiutil“扩展”DMG
答案4
常规 DMG 映像不可写入,因为无法为其添加空间。@Brian_Postow 指出的解决方案是复制所有内容并创建一个全新的 DMG 文件。如果您打算经常这样做,下次创建一个稀疏图像因为这些是可写的。