如何在OS X上从稀疏包中回收所有/大部分可用空间


30

是否可以对稀疏的捆绑包映像进行碎片整理并回收(大部分)可用空间?

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

hdiutil compact image.sparsebundle

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

Reclaimed 0 bytes out of 90.4 GB possible.

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

同时,我发现compact命令的输出有些令人误解(我当前正在运行OS X 10.5.7),因为有时列出的大小可能大于硬盘上映像包当前占用的大小。驾驶。我没有仔细看,但输出似乎是最大大小或“最大大小”-“使用的大小”。


1
我对此有疑问,但是后来意识到这是因为我的sparsebundle fs是EXFAT。看完后手册页,我意识到,紧凑的动词只能在“包含文件系统HFS磁盘映像”。
jsejcksn

@jsejcksn请记住这一点。手册页现在说支持APFS和HFS +。
GDP2

在AskDifferent相关的问题:apple.stackexchange.com/questions/54607/...
GDP2

Answers:


20

有趣!

据我了解,稀疏捆绑将数据分成8Mb频段。如果幸运的话,更改乐队大小可能会有所帮助。我的意思是,您永远不会获得100%的回收空间,但是可能比现在得到的更好。(取决于图像上的数据等)

我用两个500Mb稀疏束做了一个肮脏的简单测试,一个束的带宽为8Mb(默认),一个束的带宽为1Mb(据我所知,最小)。我复制了超过400mb的mp3文件,然后删除了所有其他文件,然后hdiutil compact在它们的驴子上运行。

Size after compact
8Mb bands: 271Mb
1Mb bands: 215Mb

转换稀疏包的命令是

hdiutil convert src.sparsebundle -format UDSB -tgtimagekey sparse-band-size=2048 -o dst.sparsebundle

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

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

(请注意,对稀疏捆绑进行碎片整理只会对磁盘数据(而非稀疏捆绑带)进行碎片整理,除非它是可识别稀疏捆绑的碎片整理器。hdiutil convert我相信会进行“碎片整理”吗?)


您的命令行参数顺序错误:-o应直接位于之前dst.sparsebundle,而不是src.sparsebundle-o表示“输出”)。
尼克·福奇

另外,请注意,此方法不会保留加密。可能有一个启用它的标志,但是在这一点上,我发现在Disk Utility中使自己成为一个新的稀疏包并将其复制到文件中更加容易。
Justin Searls 2010年

2
对于加密,只需将-encryption开关添加到命令中即可。
fideli 2011年

非常感谢。减小稀疏带大小对于Dropbox托管的稀疏束非常有用
Max Ried 2012年

好的,这没有意义...当我转换成碎片图像时,所得的稀疏束比原始束 16%。
2016年

7

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

hdiutil compact *.sparsebundle

...它释放了16 GB的空间,大致是我所期望的。有趣的是,它说“可能有800 GB”,这远远超过了我的高清硬盘的容量。因此,我认为第二个数字仅仅是一些(有缺陷的)理论数字。


2

@Oscar向我们指出了正确的方向。但是,您无需转换为1 MB且紧凑,就可以重新获得空间。

相反,只需将您的sparsebundle复制到另一个新的sparsebundle。反过来,这会为您整理图像碎片。同时,您可以更改文件系统,大小甚至频段。

这是我最近做的一个示例,转换了我在设备之间同步的20GB“代码”图像。

$ hdiutil create -size 20g -type SPARSEBUNDLE \
-imagekey sparse-band-size=2048 -fs HFSX \
-volname code -attach ~/sync/images/code.sparsebundle

使用查看所有选项hdiutil create -help

该命令输出:

/dev/disk3              GUID_partition_scheme
/dev/disk3s1            EFI
/dev/disk3s2            Apple_HFS                       /Volumes/code
created: /Users/eric/sync/images/code.sparsebundle

您可以-attach在下看到安装的选项/Volumes/code

注意:我使用HSFX区分大小写的HFS +,因为我也将映像同步到Linux并挂载它们。HFS+由于macOS通常不区分大小写,因此您极有可能要使用它。

现在,我要做的就是将所有内容复制到新的sparsebundle中:

$ cp -r /Volumes/IMG_CODE/ /Volumes/code/

现在进行比较:

# old sparsebundle
$ du -h ~/sync/images/IMG_CODE.sparsebundle/
15.0G   /Users/eric/sync/images/IMG_CODE.sparsebundle/bands
15.0G   /Users/eric/sync/images/IMG_CODE.sparsebundle/

# new sparsebundle
$ du -h ~/sync/images/code.sparsebundle/
3.0G    /Users/eric/sync/images/code.sparsebundle/bands
3.0G    /Users/eric/sync/images/code.sparsebundle/

好极了。我的15GB稀疏捆绑包现在变成了3GB,经过了碎片整理,乐队更改了!


这种方法承认原来的问题...我不会downvote的答案,因为它写得很好,“信息”,但..拜托..
adfaklsdjf


0

已回收90.4 GB中的0个字节。

我敢打赌拥有稀疏捆绑的驱动器有大约90 GB的可用空间?由于稀疏的捆绑包通常会一直增长到磁盘装满,因此该空间被简单地报告为可用空间...您将在“磁盘工具”中看到相同的数字。确实非常令人误解。

以下内容可能会给您一些启示:

hdiutil imageinfo image.sparsebundle

0

我遇到了一个有问题的稀疏捆绑包,声称它在1024 GiB中占据了950 GiB(我的SSD大小仅为320 GiB,所以不可能发生)。hdi compact没有帮助。

我从磁盘工具的捆绑软件和分区上都运行了“急救”功能,这很有帮助-自由空间计开始显示应有的真实20 GiB,然后hdi compact毫无问题地运行了。

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.