it-swarm.cn

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

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

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

hdiutil compact image.sparsebundle

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

Reclaimed 0 bytes out of 90.4 GB possible.

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

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

33
user4854

有趣!

据我了解,稀疏捆绑将数据分成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 path :)保留故障安全备份!

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

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

20
0scar

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

hdiutil compact *.sparsebundle

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

8
till

@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并挂载它们。由于macOS通常不区分大小写,因此您极有可能要使用HFS+

现在,我要做的就是将所有内容复制到新的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,经过了碎片整理,乐队更改了!

2
Eric Duncan

我不知道有什么免费的方法,但是我相信Prosoft Drive Genius将在这里满足您的需求:

http://www.prosofteng.com/products/drive_genius.php

您安装稀疏束,使用Drive Genius对其进行碎片整理,然后

hdiutil compact

命令应该起作用。

0
palmer

我有一个有问题的稀疏捆绑包,声称它有950个GiB占用了1024个GiB(我的SSD只有320 GiB =的大小,因此不可能发生)。hdi compact没有帮助。

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

0
toriningen

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

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

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

hdiutil imageinfo image.sparsebundle
0
Arjan