是否有可能“稀疏化”一个稀疏的束图像并回收(大部分)的空闲空间?
这里是背景:我使用稀疏捆绑,每隔一段时间我想从它们回收空间,所以我运行:
hdiutil compact image.sparsebundle
但是,正如手册页中所解释的那样,它只会回收完全未使用的波段文件,所以在我的情况下,它会说:
Reclaimed 0 bytes out of 90.4 GB possible.
当然,有可能将这个图像的内容复制到一个新的稀疏包中,然后用它代替,但是这样既麻烦又需要足够的空间来进行这个操作。
同时,我发现压缩命令的输出有些误导(我目前运行的是OS X 10.5.7),因为它有时会列出比硬盘上的映像包当前占用的大小还要大的大小驾驶。 我没有仔细观察,但输出似乎是最大尺寸或“最大尺寸” – “使用尺寸”。
有趣!
根据我所听到的,稀疏分组将数据分成8Mb频带。 如果幸运的话,更改乐队的大小可能会有帮助。 我的意思是,你永远不会得到100%的回收空间,但也许比你现在得到的更好。 (根据图像上的数据等)
我做了一个简单的testing,有两个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字节为单位。 所以上面的例子将band大小设置为512 * 2048 = 1Mb。 只要小心,如果你正在处理TimeMachine图像或用户的家庭文件夹图像等您偏离苹果path:)保持故障安全备份!
至于碎片整理:我有一个有趣的感觉,它只是使用hdiutil将稀疏文件转换为具有相同格式的新稀疏文件一样快(或更快!)。 我认为它试图聪明。 但我不知道。
(注意,对一个稀疏的bundle进行碎片整理只是对磁盘数据进行碎片整理,而不是对稀疏的bundle进行碎片整理,除非它是一个稀疏的捆绑软件感知碎片整理程序, hdiutil convert
会对hdiutil convert
碎片整理。
我认为90.4 GB可能是明显错误的。 当我跑了
hdiutil compact *.sparsbundle
它释放了16 GB的空间,这大致是我的预期。 有趣的是,它大概说“800 GB可能”,这比我的HD的容量更大。 所以我假设第二个数字只是一些(有缺陷的)理论数字。
@Oscar指出我们正确的方向。 但是你不需要转换成1MB和紧凑的,希望能够重新获得空间。
相反,只需将你的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的sparsebundle现在是3GB,整理,和乐队改变!
我不知道有一个自由的方式来做到这一点,但我相信Prosoft Drive Genius会做你想要的:
http://www.prosofteng.com/products/drive_genius.php
你安装sparsebundle,使用Drive Genius进行碎片整理,然后
hdiutil compact
命令应该工作。
回收90.4 GB可能的0字节。
我敢打赌,拥有稀疏捆绑的驱动器大约有90 GB的可用空间? 由于稀疏的捆绑包经常会增长,直到磁盘已满,这个空间被简单地报告为可用的空闲空间。您将在磁盘工具中看到相同的数字。 非常误导。
以下可能会给你一些见解:
hdiutil imageinfo image.sparsebundle
我有一个有问题的稀疏包,声称有1024 GiB占用了950 GiB(我的SSD只有320 GiB的大小,所以不会发生)。 hdi compact
没有帮助。
我在磁盘实用程序上运行了捆绑软件和分区上的“急救”,并且帮助 – 免费的空间计量器开始显示真实的20GB,然后hdi compact
运行没有问题。