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


11

我有DMG,需要挂载并向其中写入文件。当我安装它时,finder会显示根目录和所有目录均为只读。

然后我发现了“ mount -w”。但是,当我运行该命令时,会得到“ mount:未知的特殊文件或文件系统”。

如何将该磁盘映像挂载为可写状态,或将文件强制插入其中?

Answers:


16

实际上,几乎所有的只读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)手册页上,这是a .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  

我没有假定UDZ0,但是除UDRW和UDSP(可能是UDxx UDSB或UDT0)以外的所有类型都是只读的。我以为所有dmg都用某种东西压缩过了,所以不能写...我从来没有有意识地遇到过非压缩的DMG ...
Brian Postow

@Brian-我通常使用加密的UDSP在笔记本电脑上存储敏感信息(密码,银行信息等)。
KeithB 2010年

1
嘿,这很有帮助,谢谢!我找到了一种超级简单的方法来查看此答案。很想听听您的想法。
MW Felker 2014年

1
@MaxFelker很高兴我使用阴影文件的建议对您有所帮助。感谢您阐明执行此操作的一种好方法。
Spiff

超级有用,我的兄弟+1!
MW Felker 2014年

5

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

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

使用hdiutil附加只读dmg文件

hdiutil attach -owners on /path/to/your.dmg -shadow

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

通过以下命令卸下已安装的驱动器,或从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

我在Sierra上,这对我不起作用。它创建“ .shadow”文件并挂载dmg,但是挂载的驱动器仍然是只读的。我什至尝试使.dmg可写,并验证.shadow文件可写。
TechSavvySam

1

如果Rd-onry DMG上有足够的“空间”,则可以使用“磁盘工具”将其转换为R / W DMG,然后根据需要将其转换回压缩的DMG。否则,您可以使用hdiutil“扩展” DMG


-2

您无法写DMG。这个不成立。您需要复制所有内容,进行编辑并制作新的DMG。

抱歉。


那不是真的。您可以创建读写.dmg文件。另外,您无需复制所有内容,只需将磁盘映像转换为可写格式即可。见我的答案。
Spiff 2010年

1
我想@Spiff,但是您的解决方案实际上与我的相同,因为它必须解压缩,然后再添加新文件并重新压缩。如果没有就位,那么您就不是真正在写现有的DMG ... ...
Brian Postow,2010年

您的答案包含虚假信息。
布莱恩

1
-1,但如果将“您无法写入DMG”行更改为真实的内容,例如“您无法写入只读DMG”,我将更改我的投票。谢谢!
丹·罗森斯塔克

-2

常规DMG图像不可写,因为无法为其添加空间。@Brian_Postow指出的解决方案是复制整个内容并创建一个全新的DMG文件。如果您打算大量执行此操作,则下次可创建稀疏图像,因为它们可写。


1
那不是真的。.dmg扩展名不一定意味着它是只读的。见我的答案。
Spiff 2010年

我应该说“默认”而不是“常规”。关于转换它们的好信息。
克里斯·纳瓦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.