Comment récupérer tout / la plupart d'espace libre à partir d'un sparsebundle sur OS X


30

Existe-t-il une possibilité de «défragmenter» une image de bundle clairsemée et de récupérer (la plupart) de l'espace libre?

Voici le contexte: j'utilise des bundles clairsemés et de temps en temps je veux leur récupérer de l'espace alors je lance:

hdiutil compact image.sparsebundle

Cependant, comme expliqué dans la page de manuel, il ne récupère que les fichiers de bande complètement inutilisés, donc dans mon cas, il dit:

Reclaimed 0 bytes out of 90.4 GB possible.

Bien sûr, il est possible de copier le contenu de cette image dans un nouveau bundle clairsemé qui est ensuite utilisé à la place, mais qui est à la fois encombrant et nécessite suffisamment d'espace libre pour cette opération.

Pendant ce temps, j'ai découvert que la sortie de la commande compacte est quelque peu trompeuse (j'utilise actuellement OS X 10.5.7) car elle répertorie parfois une taille possible qui est plus grande que la taille actuellement occupée par le bundle d'images sur le disque dur. conduire. Je n'ai pas regardé de plus près mais la sortie semble être soit la taille maximale soit la "taille maximale" - "taille utilisée".


1
J'ai eu un problème avec cela, mais j'ai réalisé que c'était parce que mon sparsebundle fs était EXFAT. Après avoir lu la page de manuel , j'ai réalisé que le verbe compact ne fonctionne que sur "les images de disque contenant un système de fichiers HFS".
jsejcksn

@jsejcksn C'est un bon point à garder à l'esprit. La page de manuel indique maintenant que APFS et HFS + sont pris en charge.
GDP2

Question pertinente sur AskDifferent: apple.stackexchange.com/questions/54607/…
GDP2

Réponses:


20

Intéressant!

D'après ce que j'ai entendu, le bundle clairsemé divise les données en bandes de 8 Mo. Changer la taille de la bande pourrait aider, si vous avez de la chance. Je veux dire, vous n'obtiendrez jamais 100% d'espace récupéré, mais peut-être mieux que ce que vous obtenez maintenant. (Selon les données sur l'image, etc.)

J'ai fait un sale test simple avec deux faisceaux clairsemés de 500 Mo, un avec une bande de 8 Mo (par défaut) et un avec 1 Mo (la plus petite taille autorisée d'après ce que je peux dire). J'ai copié plus de 400 Mo de fichiers mp3, puis supprimé tous les autres fichiers, puis exécuté hdiutil compactsur leurs fesses.

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

La commande pour convertir votre bundle clairsemé est

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

La taille de bande est dans l'unité 512 octets. Ainsi, l'exemple ci-dessus définit la taille de bande à 512 * 2048 = 1 Mo. Faites juste attention si vous avez affaire à des images TimeMachine ou à des images de dossiers personnels d'utilisateurs, etc. Vous déviez du chemin Apple :) Gardez une sauvegarde sans échec!

En ce qui concerne la défragmentation: j'ai une drôle de sensation qu'il est tout aussi rapide (ou plus rapide!) D'utiliser simplement hdiutil pour convertir le fichier fragmenté en un nouveau fichier fragmenté avec le même format. Je pense qu'il essaie d'être intelligent à ce sujet. Mais je ne sais pas.

(Notez que la défragmentation d'un bundle clairsemé défragmente simplement les données du disque, pas les bandes de bundle clairsemées, sauf s'il s'agit d'un défragmenteur conscient de bundle clairsemé hdiutil convert.


Vos arguments de ligne de commande sont dans le mauvais ordre: -odevraient être directement avant dst.sparsebundle, pas src.sparsebundle( -odénote «sortie»).
Nick Forge

Notez également que cette méthode ne préserve pas le cryptage. Il y a probablement un indicateur pour l'activer, mais à ce stade, j'ai trouvé plus facile de me faire un nouveau sparsebundle dans Disk Utility et de copier mes fichiers dedans.
Justin Searls

2
Pour le cryptage, ajoutez simplement le -encryptionpassage à la commande.
fideli

Merci beaucoup. La diminution de la taille de bande clairsemée est très utile pour les bundles clairsemés hébergés par Dropbox
Max Ried

Ok, cela n'a pas de sens ... quand je convertis pour défragmenter l'image, le paquet clairsemé résultant est 16% plus grand que l'original.
Michael

7

Je pense que les 90,4 Go possibles sont tout simplement faux. Quand j'ai couru:

hdiutil compact *.sparsebundle

... il a libéré 16 Go d'espace, ce qui est à peu près ce à quoi je m'attendais. Curieusement, il a dit à peu près "800 Go possible", ce qui est bien plus que la capacité de mon disque dur. Je suppose donc que le deuxième chiffre n'est qu'un nombre théorique (imparfait).


2

@Oscar nous a indiqué la bonne direction. Mais vous n'avez pas besoin de convertir en 1 Mo et compact, dans l'espoir de regagner de l'espace.

À la place, copiez simplement votre sparsebundle dans un autre nouveau sparsebundle. Cela, à son tour, défragmente l'image pour vous. Et en même temps, vous pouvez changer le système de fichiers, la taille et même les bandes.

Voici un exemple que j'ai fait récemment, en convertissant mon image "code" de 20 Go que je synchronise sur tous les appareils.

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

Voir toutes les options avec hdiutil create -help.

Cette commande génère:

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

Vous pouvez voir l' -attachoption montée sous /Volumes/code.

Remarque: J'utilise HSFXpour HFS + sensible à la casse car je synchronise également mes images avec Linux et les monte. Vous voudrez probablement utiliser à la HFS+place, car macOS est normalement insensible à la casse.

Maintenant, tout ce que j'ai à faire est de tout copier sur mon nouveau sparsebundle:

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

Et maintenant pour comparer:

# 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. Mon sparsebundle de 15 Go est maintenant de 3 Go, défragmenté et les bandes ont changé!


Cette méthode a été reconnue dans la question d'origine ... Je ne vais pas dévaloriser la réponse car elle est bien écrite et "informative", mais .. allez ...
adfaklsdjf

0

Je ne connais pas de moyen gratuit de le faire, mais je pense que Prosoft Drive Genius fera ce dont vous avez besoin ici:

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

Vous montez l'ensembles clairsemés, le défragmentez à l'aide de Drive Genius, puis le

hdiutil compact

la commande devrait fonctionner.


0

Récupération possible de 0 octet sur 90,4 Go.

Je parie que le lecteur qui contient le paquet clairsemé a environ 90 Go d'espace libre? Comme les paquets épars peuvent souvent augmenter jusqu'à ce que le disque soit plein, cet espace est simplement signalé comme étant de l'espace libre disponible ... Vous verrez les mêmes chiffres dans l'Utilitaire de disque. Très trompeur en effet.

Les informations suivantes pourraient vous donner un aperçu:

hdiutil imageinfo image.sparsebundle

0

J'avais un bundle clairsemé problématique qui prétendait avoir 950 Gio occupés sur 1024 Gio (mon SSD ne fait que 320 Gio, donc cela ne pouvait pas arriver). hdi compactn'a pas aidé.

J'ai exécuté "Premiers secours" à partir de l'Utilitaire de disque sur les deux bundles ET la partition, et cela a aidé - le compteur d'espace libre a commencé à afficher 20 Go réel comme il se doit, puis a hdi compactfonctionné sans problème.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.