Frage Wie man den gesamten / meisten freien Speicherplatz von einem Sparse-Bundle auf OS X zurückgewinnt


Gibt es eine Möglichkeit, ein Sparse-Bundle-Image zu "defragmentieren" und (den meisten) freien Speicherplatz zurückzugewinnen?

Hier ist der Hintergrund: Ich benutze spärliche Bündel und ab und zu möchte ich Raum von ihnen zurückfordern, also renne ich:

hdiutil compact image.sparsebundle

Wie in der man-Seite erklärt, werden nur komplett unbenutzte Band-Dateien zurückgewonnen, also in meinem Fall heißt es:

Reclaimed 0 bytes out of 90.4 GB possible.

Natürlich gibt es die Möglichkeit, den Inhalt dieses Bildes in ein neues Sparse-Paket zu kopieren, das dann stattdessen verwendet wird, aber das ist sowohl mühsam als auch benötigt genug Speicherplatz für diese Operation.

In der Zwischenzeit habe ich herausgefunden, dass die Ausgabe des Kompaktbefehls etwas irreführend ist (ich verwende derzeit OS X 10.5.7), da es manchmal eine Größe auflistet, die so groß ist wie möglich größer als die Größe, die derzeit vom Image-Bundle auf der Festplatte belegt wird. Ich schaute nicht näher, aber die Ausgabe scheint entweder die maximale Größe oder "maximale Größe" - "gebrauchte Größe" zu sein.


24
2018-05-28 21:08


Ursprung


Ich hatte ein Problem damit, aber dann wurde mir klar, dass es weil mein Sparsebundle fs EXFAT war. Nach dem Lesen der ManpageIch erkannte, dass das kompakte Verb nur auf "Disk-Images, die ein HFS-Dateisystem enthalten" funktioniert. - jsejcksn


Antworten:


Interessant!

Von dem, was ich gehört habe, teilt das Sparse-Bündel die Daten in 8Mb-Bänder. Das Ändern der Bandgröße könnte nur helfen, wenn Sie Glück haben. Ich meine, du wirst nie 100% zurückgewonnenen Raum bekommen, aber vielleicht besser als das, was du jetzt bekommst. (Abhängig von den Daten auf dem Bild etc.)

Ich habe einen dreckigen einfachen Test mit zwei 500Mb Sparse-Bundles gemacht, eins mit 8MB (Standard) Bandgröße und eins mit 1MB (kleinste erlaubte Größe von dem, was ich sagen kann). Ich habe über 400 MB mp3-Dateien kopiert und dann alle anderen Dateien entfernt und dann ausgeführt hdiutil compact auf ihren Ärschen.

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

Der Befehl zum Konvertieren Ihres Sparse-Bundles lautet

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

Bandgröße ist in der Einheit 512 Byte. Im obigen Beispiel wird die Bandgröße auf 512 * 2048 = 1 MB eingestellt. Seien Sie vorsichtig, wenn Sie sich mit TimeMachine-Images oder Benutzer-Home-Folder-Images usw. befassen. Sie weichen vom Apple-Pfad ab :) Behalten Sie ein ausfallsicheres Backup bei!

Was die Defragmentierung betrifft: Ich habe das komische Gefühl, dass es genauso schnell (oder schneller!) Ist, hdiutil einfach zu verwenden, um die Sparse-Datei in eine neue Sparse-Datei mit demselben Format zu konvertieren. Ich denke, es versucht, klug zu sein. Aber ich weiß es nicht.

(Beachten Sie, dass das Defragmentieren eines Sparse-Bundles nur die Disk-Daten defragmentiert, nicht die Sparse-Bundle-Bänder, es sei denn, es handelt sich um ein Defragmentator-Paket mit Sparse-Paket. hdiutil convert Ich glaube, dass eine Band "Defragmentierung".


18
2018-06-01 23:12



Ihre Befehlszeilenargumente sind in der falschen Reihenfolge: -o sollte direkt vorher sein dst.sparsebundlenicht src.sparsebundle (-o bezeichnet 'Ausgabe'). - Nick Forge
Beachten Sie außerdem, dass diese Methode die Verschlüsselung nicht bewahrt. Es gibt wahrscheinlich eine Flagge, um es zu aktivieren, aber an diesem Punkt fand ich es einfacher, mir selbst ein neues Sparsebundle im Festplatten-Dienstprogramm zu machen und meine Dateien darin zu kopieren. - Justin Searls
Für die Verschlüsselung fügen Sie einfach die hinzu -encryption Wechseln Sie zum Befehl. - fideli
Danke vielmals. Die abnehmende Sparse-Band-Größe ist sehr nützlich für von Dropbox gehostete Sparse-Bundles - Max Ried
Ok, das macht keinen Sinn ... wenn ich das Bild defragmentiere, ist das resultierende Sparse-Paket 16% größer als das Original. - Michael


Ich denke die 90.4 GByte sind einfach falsch. Als ich rannte

hdiutil compact *.sparsbundle

Es hat 16 GB Speicherplatz freigemacht, was ungefähr dem entspricht, was ich tatsächlich erwartet habe. Lustigerweise hieß es ungefähr "800 GB möglich", was viel mehr ist als die Kapazität meiner HD. Also nehme ich an, dass die zweite Zahl nur eine (fehlerhafte) theoretische Zahl ist.


6
2018-01-29 20:25





@Oscar wies uns in die richtige Richtung. Aber Sie müssen nicht zu 1 MB konvertieren und kompakt, in der Hoffnung, wieder Platz zu gewinnen.

Kopieren Sie stattdessen Ihr SparseBundle in ein anderes neues SparseBundle. Dies defragmentiert das Bild für Sie. Und gleichzeitig können Sie Dateisystem, Größe und sogar die Bänder ändern.

Hier ist ein Beispiel, das ich kürzlich gemacht habe, indem ich mein 20GB "Code" -Bild konvertiere, das ich über verschiedene Geräte synchronisiere.

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

Siehe alle Optionen mit hdiutil create -help.

Dieser Befehl gibt aus:

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

Du kannst das ... sehen -attach Option montiert es unter /Volumes/code.

Hinweis: Ich benutze HSFX für die Groß- und Kleinschreibung HFS +, weil ich meine Bilder auch mit Linux synchronisieren und sie mounten. Sie werden wahrscheinlich verwenden möchten HFS+ stattdessen, da macOS normalerweise nicht zwischen Groß- und Kleinschreibung unterscheidet.

Jetzt muss ich nur noch alles auf meinen neuen Sparse-Bund kopieren:

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

Und jetzt zum Vergleich:

# 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/

Yay. Mein 15 GB Sparsebundle ist jetzt 3 GB, defragmentiert und die Bänder wurden geändert!


2
2018-02-20 07:33





Ich kenne keinen freien Weg, aber ich glaube, Prosoft Drive Genius wird tun, was Sie brauchen:

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

Sie mounten das sparsebundle, defragmentieren es mit Drive Genius und dann das

hdiutil compact

Befehl sollte funktionieren.


0
2018-05-29 14:52





Wiedergewonnene 0 Bytes von 90,4 GB möglich.

Ich wette, das Laufwerk mit dem Sparse-Bundle hat ungefähr 90 GB freien Speicherplatz? Da Sparse-Bundles oft wachsen können, bis die Festplatte voll ist, wird dieser Speicherplatz einfach als verfügbarer freier Speicherplatz gemeldet ... Sie sehen die gleichen Zahlen im Festplatten-Dienstprogramm. Sehr irreführend.

Folgendes könnte Ihnen einen Einblick geben:

hdiutil imageinfo image.sparsebundle

0
2017-07-11 19:58





Ich hatte ein problematisches Sparse-Bundle, das behauptete, 950 GiB von 1024 GiB belegt zu haben (meine SSD ist nur 320 GiB groß, das konnte nicht passieren). hdi compact hat nicht geholfen.

Ich habe "Erste Hilfe" vom Festplatten-Dienstprogramm sowohl auf dem Bundle als auch auf der Partition ausgeführt, und das half - das freie Speicherplatz-Messgerät begann, echte 20 GiB anzuzeigen, wie es sein sollte, und dann hdi compact lief ohne Probleme.


0
2017-08-13 18:49