web-dev-qa-db-fra.com

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

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 utilisée par l'ensemble d'images sur le disque dur. 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".

33
user4854

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 test simple et sale 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 compact sur leurs culs.

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 dossier de départ, 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 fragmenté ne fait que défragmenter les données du disque, pas les bandes de bundle éparses, sauf s'il s'agit d'un défragmenteur prenant en compte les bundles épars. hdiutil convert fait une "défragmentation" du groupe je crois.)

20
0scar

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).

8
till

@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.

Au lieu de cela, copiez simplement votre sparsebundle vers 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

Tu peux voir le -attach l'option l'a monté sous /Volumes/code.

Remarque: J'utilise HSFX pour HFS + sensible à la casse car je synchronise mes images sur Linux également et les monte. Vous souhaiterez probablement utiliser HFS+ à la 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é!

2
Eric Duncan

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
palmer

J'ai eu un bundle clairsemé problématique qui prétendait avoir 950 GiB occupé sur 1024 GiB (mon SSD est juste 320 GiB = en taille, donc cela n'a pas pu arriver). hdi compact n'a pas aidé.

J'ai exécuté "First Aid" à 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 GiB comme il se doit, puis hdi compact a fonctionné sans problème.

0
toriningen

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

Je parie que le lecteur qui contient le paquet épars 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 peuvent vous donner un aperçu:

hdiutil imageinfo image.sparsebundle
0
Arjan