OS Xでスパースバンドルからすべて/ほとんどの空き領域を回収する方法


30

スパースバンドルイメージを「デフラグ」して、空きスペースのほとんどを再利用する可能性はありますか?

背景は次のとおりです。私はまばらなバンドルを使用しており、時々それらからスペースを再利用したいので実行します:

hdiutil compact image.sparsebundle

ただし、マニュアルページで説明したように、完全に未使用のバンドファイルのみを再生するため、私の場合は次のように述べています。

Reclaimed 0 bytes out of 90.4 GB possible.

もちろん、この画像の内容を新しいスパースバンドルにコピーする可能性もありますが、そのスパースバンドルは代わりに使用されますが、面倒であり、この操作に十分な空き領域が必要です。

一方、コンパクトコマンドの出力は、ハード上のイメージバンドルが現在使用しているサイズより大きいサイズを表示することがあるため、多少誤解を招くことがわかりました(現在OS X 10.5.7を実行しています)。ドライブ。私は近くに見えませんでしたが、出力は最大サイズまたは「最大サイズ」-「使用サイズ」のいずれかであるようです。


1
これには問題がありましたが、スパースバンドルfsがEXFATだったためだと気付きました。マンページを読んだ後、コンパクト動詞は「HFSファイルシステムを含むディスクイメージ」でのみ動作することに気付きました。
jsejcksn

@jsejcksnこれは心に留めておくべき良い点です。manページには、APFSとHFS +がサポートされていると記載されています。
GDP2

AskDifferentの関連質問:apple.stackexchange.com/questions/54607/...
GDP2

回答:


20

面白い!

私が聞いたことから、スパースバンドルはデータを8Mbバンドに分割します。運がよければ、バンドサイズを変更するだけで役立ちます。つまり、100%の再生スペースは決して得られませんが、現在得られているものよりも優れている可能性があります。(画像などのデータに依存)

2つの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を使用してスパースファイルを同じ形式の新しいスパースファイルに変換するのと同じくらい速い(または速い!)のが面白いと感じています。私はそれについて賢くしようとしていると思います。しかし、私は知りません。

(スパースバンドルをデフラグすると、スパースバンドル対応デフラグツールでない限り、スパースバンドルバンドではなくディスクデータがデフラグされるだけであることに注意してくださいhdiutil convert


コマンドライン引数の順序が間違っています:-o直前dst.sparsebundleではなくである必要がありますsrc.sparsebundle-o「出力」を示します)。
ニックフォージ

また、この方法では暗号化が保持されないことに注意してください。おそらくそれを有効にするフラグがありますが、この時点で、Disk Utilityで新しいスパースバンドルを作成し、そこにファイルをコピーする方が簡単だとわかりました。
ジャスティンシアーズ

2
暗号化の場合-encryptionは、コマンドにスイッチを追加するだけです。
フィデリ

どうもありがとう。小さくまばらなバンドサイズは、Dropboxのは、スパース・バンドルホストされているため非常に便利です
マックスリートを

これは意味がありません...画像を最適化するために変換すると、結果のスパースバンドルは元のものよりも16%大きくなります。
マイケル

7

可能な90.4 GBは明らかに間違っていると思います。私が走ったとき:

hdiutil compact *.sparsebundle

... 16 GBの領域を解放しましたが、これはおおよそ予想通りでした。おかしなことに、おおよそ「800 GB可能」と言いましたが、これは私のHDの容量をはるかに超えています。したがって、2番目の数字は単なる(欠陥のある)理論上の数字であると思います。


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は大文字と小文字を区別しないため、代わりに使用することをお勧めします。

今、私がしなければならないのは、すべてを新しいスパースバンドルにコピーすることです:

$ 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

私はそれを行う無料の方法を知りませんが、Prosoft Drive Geniusはあなたが必要としていることをここで行うと信じています:

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

sparsebundleをマウントし、Drive Geniusを使用して最適化してから、

hdiutil compact

コマンドが動作するはずです。


0

90.4 GBのうち0バイトを再利用可能。

スパースバンドルを保持するドライブには約90 GBの空き容量があると思いますか?スパースバンドルは多くの場合、ディスクがいっぱいになるまで成長する可能性があるため、このスペースは使用可能な空きスペースとして単純に報告されます...ディスクユーティリティにも同じ数字が表示されます。本当に誤解を招く。

次の情報を参考にしてください。

hdiutil imageinfo image.sparsebundle

0

1024 GiBのうち950 GiBが占有されていると主張する問題のあるスパースバンドルがありました(私のSSDはサイズがわずか320 GiBであるため、実現できませんでした)。hdi compact助けにならなかった。

バンドルとパーティションの両方でDisk Utilityから「応急処置」を実行しました。これにより、空きスペースメーターが実際の20 GiBを表示するようになり、hdi compact問題なく実行されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.