Gibt es eine Möglichkeit, ein Sparse-Bundle-Image zu "defragmentieren" und (den größten) Teil des freien Speicherplatzes zurückzugewinnen?
Hier ist der Hintergrund: Ich verwende spärliche Bundles und möchte von Zeit zu Zeit Speicherplatz von ihnen zurückfordern, damit ich Folgendes ausführen kann:
hdiutil compact image.sparsebundle
Wie in der Manpage erläutert, werden jedoch nur vollständig unbenutzte Banddateien wiederhergestellt. In meinem Fall heißt es also:
Reclaimed 0 bytes out of 90.4 GB possible.
Natürlich besteht die Möglichkeit, den Inhalt dieses Images in ein neues Sparse-Bundle zu kopieren, das dann anstelle von verwendet wird. Dies ist jedoch umständlich und erfordert genügend freien Speicherplatz für diesen Vorgang.
In der Zwischenzeit stellte ich fest, dass die Ausgabe des Befehls compact etwas irreführend ist (ich verwende derzeit OS X 10.5.7), da manchmal eine möglichst große Liste angezeigt wird, die größer ist als die Größe, die derzeit vom Image-Bundle auf der Festplatte belegt wird Fahrt. Ich habe nicht näher hingeschaut, aber die Ausgabe scheint entweder die maximale Größe oder "maximale Größe" - "verwendete Größe" zu sein.
Antworten:
Interessant!
Soweit ich gehört habe, teilt das Sparse-Bundle die Daten in 8-MB-Bänder auf. Das Ändern der Bandgröße kann hilfreich sein, wenn Sie Glück haben. Ich meine, du bekommst nie 100% zurückgewonnenen Platz, aber vielleicht besser als das, was du jetzt bekommst. (Abhängig von den Daten auf dem Bild usw.)
Ich habe einen schmutzigen einfachen Test mit zwei 500-MB-Sparse-Bundles durchgeführt, eines mit 8-MB-Bandgröße (Standard) und eines mit 1-MB-Bandgröße (kleinste zulässige Größe, soweit ich das beurteilen kann). Ich habe über 400 MB MP3-Dateien kopiert und dann alle anderen Dateien entfernt und bin dann
hdiutil compact
auf den Arsch gelaufen .Der Befehl zum Konvertieren Ihres Sparse Bundles lautet
Die Bandgröße ist in der Einheit 512 Byte. Im obigen Beispiel wird die Bandgröße auf 512 * 2048 = 1 MB festgelegt. Seien Sie vorsichtig, wenn Sie mit TimeMachine-Images oder Images von Benutzerordnern usw. arbeiten. Sie weichen vom Apple-Pfad ab :) Bewahren Sie ein ausfallsicheres Backup auf!
Zur Defragmentierung: Ich habe das komische Gefühl, dass es genauso schnell (oder schneller!) Ist, einfach hdiutil 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 bei der Defragmentierung eines Sparse-Bundles nur die Festplattendaten defragmentiert werden, nicht die Sparse-Bundle-Bänder, es sei denn, es handelt sich um einen Defragmentierer, der das Sparse-Bundle
hdiutil convert
erkennt . Wird das Band meiner Meinung nach "defragmentiert".)quelle
-o
sollten direkt davor stehendst.sparsebundle
, nichtsrc.sparsebundle
(-o
bedeutet "Ausgabe").-encryption
Schalter zum Befehl hinzu.Ich finde die 90,4 GB möglich ist schlicht falsch. Als ich lief:
... es hat 16 GB Speicherplatz freigesetzt, was ungefähr dem entspricht, was ich erwartet hatte. Komischerweise hieß es ungefähr "800 GB möglich", was weit mehr ist als die Kapazität meiner HD. Ich gehe also davon aus, dass die zweite Zahl nur eine (fehlerhafte) theoretische Zahl ist.
quelle
@Oscar wies uns in die richtige Richtung. Sie müssen jedoch nicht auf 1 MB konvertieren und komprimieren, um Speicherplatz wiederzugewinnen.
Kopieren Sie stattdessen einfach Ihr Sparsebundle auf ein anderes neues Sparsebundle. Dadurch wird das Image für Sie defragmentiert. Gleichzeitig können Sie das Dateisystem, die Größe und sogar die Bänder ändern.
Hier ist ein Beispiel, das ich kürzlich gemacht habe und das mein 20-GB-Code-Image konvertiert hat, das ich über Geräte synchronisiere.
Alle Optionen mit anzeigen
hdiutil create -help
.Dieser Befehl gibt Folgendes aus:
Sie können die
-attach
Option sehen, die es unter eingehängt wird/Volumes/code
.Hinweis: Ich verwende
HSFX
HFS + für die Groß- und Kleinschreibung, da ich meine Images auch mit Linux synchronisiere und einbinde. Sie werden höchstwahrscheinlichHFS+
stattdessen verwenden wollen, da bei macOS normalerweise die Groß- und Kleinschreibung nicht berücksichtigt wird.Jetzt muss ich nur noch alles auf mein neues Sparsebundle kopieren:
Und nun zum Vergleich:
Yay. Mein 15GB Sparsebundle ist jetzt 3GB, defragmentiert und die Bänder gewechselt!
quelle
Ich kenne keinen freien Weg, aber ich glaube, dass Prosoft Drive Genius das tun wird, was Sie hier brauchen:
http://www.prosofteng.com/products/drive_genius.php
Sie mounten das Sparsebundle, defragmentieren es mit Drive Genius und anschließend mit
Befehl sollte funktionieren.
quelle
Ich wette, das Laufwerk, auf dem sich das Sparse-Bundle befindet, hat ungefähr 90 GB freien Speicherplatz. Da Sparse-Bundles häufig wachsen können, bis die Festplatte voll ist, wird dieser Speicherplatz einfach als verfügbarer freier Speicherplatz gemeldet. Dieselben Zahlen werden im Festplatten-Dienstprogramm angezeigt. Sehr irreführend.
Folgendes könnte Ihnen einen Einblick geben:
quelle
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 also nicht passieren).
hdi compact
hat nicht geholfen.Ich habe "Erste Hilfe" vom Festplatten-Dienstprogramm auf Bundle- UND Partition ausgeführt, und die Anzeige für die Anzeige des freien Speicherplatzes zeigte echte 20 GiB an, wie sie hätte sein sollen, und
hdi compact
lief dann problemlos.quelle