如何写入 Mac OSX 只读文件系统?

the*_*ror 12 mac mount filesystems macos

我有需要挂载和写入文件的 DMG。当我安装它时,finder 将根和所有内容都显示为只读。

然后我发现了'mount -w'。但是当我运行它时,我得到'mount:未知的特殊文件或文件系统'。

如何将此磁盘映像挂载为可写,或强制将文件放入其中?

Spi*_*iff 16

几乎所有只读 DMG 实际上都经过压缩(UDZ0-- 请参阅hdiutil(1)手册页),因此它们的文件格式不支持简单地“稍微翻转一下”以使其可写。

您可以使用磁盘工具或

hdiutil imageinfo filename.dmg  
Run Code Online (Sandbox Code Playgroud)

...查看您的磁盘映像的格式。然后您可以使用磁盘工具或类似的东西

hdiutil convert filename.dmg -format UDSP -o filename.sparseimage  
Run Code Online (Sandbox Code Playgroud)

...将其转换为读写格式。请注意,转换不会就地发生,因此您必须告诉它把输出文件放在一个文件系统上,该文件系统有足够的空间来存放.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  
Run Code Online (Sandbox Code Playgroud)


小智 5

这是我刚刚用于一个项目的方法,是迄今为止最好的方法。在这里找到它:

http://myjeeva.com/best-possible-way-edit-read-only-dmg.html

使用 hdiutil 附加只读 dmg 文件

hdiutil attach -owners on /path/to/your.dmg -shadow
Run Code Online (Sandbox Code Playgroud)

修改您的 DM。使用命令行添加、编辑或删除内容 - 在 GUI 中执行此操作可能会产生奇怪的副作用或权限问题。此外,您可能需要sudo命令

通过以下命令分离安装的驱动器或从 Finder 中弹出它

# fill disk number at <number>
hdiutil detach /dev/disk<number>
Run Code Online (Sandbox Code Playgroud)

将阴影 dmg 转换/写入只读 DMG

hdiutil convert -format UDZO -o /path/to/new.dmg /path/to/your.dmg -shadow
Run Code Online (Sandbox Code Playgroud)