如何从 OS X 上的 sparsebundle 回收所有/大部分可用空间

use*_*854 36 mac-osx

是否有可能对稀疏包图像进行“碎片整理”并回收(大部分)可用空间?

这是背景:我正在使用稀疏包,我不时地想从它们中回收空间,所以我运行:

hdiutil compact image.sparsebundle

但是,如手册页中所述,它仅回收完全未使用的带文件,因此在我的情况下,它说:

Reclaimed 0 bytes out of 90.4 GB possible.

当然,可以将这个图像的内容复制到一个新的稀疏包中,然后作为替代使用,但这既麻烦又需要足够的可用空间来进行此操作。

同时,我发现 compact 命令的输出有些误导(我目前运行的是 OS X 10.5.7),因为它有时会列出尽可能大于硬盘上图像包当前占用的大小的大小驾驶。我没有仔细看,但输出似乎是最大尺寸或“最大尺寸”-“已用尺寸”。

0sc*_*car 23

有趣的!

据我所知,稀疏包将数据划分为 8Mb 的频段。如果幸运的话,改变表带尺寸可能会有所帮助。我的意思是,你永远不会得到 100% 回收的空间,但可能比你现在得到的更好。(取决于图像上的数据等)

我用两个 500Mb 的稀疏包做了一个简单的测试,一个是 8Mb(默认)带宽,一个是 1Mb(据我所知,允许的最小大小)。我复制了超过 400MB 的 mp3 文件,然后删除了所有其他文件,然后hdiutil compact在他们的屁股上运行。

Size after compact
8Mb bands: 271Mb
1Mb bands: 215Mb
Run Code Online (Sandbox Code Playgroud)

转换稀疏包的命令是

hdiutil convert src.sparsebundle -format UDSB -tgtimagekey sparse-band-size=2048 -o dst.sparsebundle
Run Code Online (Sandbox Code Playgroud)

带大小以 512 字节为单位。所以上面的例子将频带大小设置为 512 * 2048 = 1Mb。如果您正在处理 TimeMachine 图像或用户主文件夹图像等,请小心。您偏离了 Apple 路径 :) 保持故障安全备份!

至于碎片整理:我有一种有趣的感觉,使用 hdiutil 将稀疏文件转换为具有相同格式的新稀疏文件同样快(或更快!)。我认为它试图变得聪明。但我不知道。

(请注意,对稀疏包进行碎片整理只是对磁盘数据进行碎片整理,而不是对稀疏包带进行碎片整理,除非它是稀疏包感知碎片整理程序。hdiutil convert我相信带“碎片整理”。)

  • 对于加密,只需在命令中添加 `-encryption` 开关。 (3认同)

小智 9

我认为 90.4 GB 可能是完全错误的。当我跑:

hdiutil compact *.sparsebundle
Run Code Online (Sandbox Code Playgroud)

...它释放了 16 GB 的空间,这大致是我的预期。有趣的是,它说大约“可能有 800 GB”,这远远超过我的 HD 容量。所以我假设第二个数字只是一些(有缺陷的)理论数字。