sviluppo-web-qa.it

Come recuperare tutto / la maggior parte dello spazio libero da uno sparsebundle su OS X.

Esiste la possibilità di "deframmentare" un'immagine raggruppata sparsa e recuperare (la maggior parte) dello spazio libero?

Ecco lo sfondo: sto usando bundle sparsi e ogni tanto voglio recuperare spazio da loro così corro:

hdiutil compact image.sparsebundle

Tuttavia, come spiegato nella pagina man, recupera solo i file di banda completamente inutilizzati, quindi nel mio caso dice:

Reclaimed 0 bytes out of 90.4 GB possible.

Naturalmente c'è la possibilità di copiare il contenuto di questa immagine in un nuovo fascio sparso che viene quindi usato al posto di, ma che è al contempo ingombrante e richiede abbastanza spazio libero per questa operazione.

Nel frattempo, ho scoperto che l'output del comando compatto è in qualche modo fuorviante (attualmente sto eseguendo OS X 10.5.7) in quanto a volte elenca una dimensione possibile che è più grande rispetto alla dimensione attualmente utilizzata dal pacchetto di immagini sul disco rigido. Non ho guardato più da vicino, ma l'output sembra essere la dimensione massima o "dimensione massima" - "dimensione utilizzata".

33
user4854

Interessante!

Da quello che ho sentito, il fascio sparso divide i dati in bande da 8 Mb. Cambiare la dimensione della band potrebbe essere d'aiuto, se sei fortunato. Voglio dire, non avrai mai spazio recuperato al 100%, ma forse meglio di quello che ottieni ora. (A seconda dei dati sull'immagine ecc.)

Ho fatto un semplice test sporco con due bundle sparsi da 500 Mb, uno con una dimensione della banda di 8 Mb (predefinito) e uno con 1 Mb (la dimensione minima consentita da quello che posso dire). Ho copiato oltre 400 MB di file mp3 e quindi rimosso ogni altro file e quindi eseguito hdiutil compact sui loro culi.

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

Il comando per convertire il tuo pacchetto sparse è

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

La dimensione della banda è nell'unità 512byte. Quindi l'esempio sopra imposta la dimensione della banda su 512 * 2048 = 1 Mb. Fai solo attenzione se hai a che fare con immagini TimeMachine o immagini della cartella home dell'utente ecc. Stai deviando dal Apple :) Mantieni un backup sicuro non riuscito!

Per quanto riguarda la deframmentazione: ho la sensazione divertente che sia altrettanto veloce (o più veloce!) Usare solo hdiutil per convertire lo sparsefile in un nuovo file sparse con lo stesso formato. Penso che cerchi di essere intelligente. Ma non lo so.

(Si noti che la deframmentazione di un bundle sparse deframmenta solo i dati del disco, non le bande sparse del bundle, a meno che non sia una deframmentazione compatibile con bundle sparsi. hdiutil convert credo che una band "deframmenta".)

20
0scar

Penso che i 90,4 GB possibili siano chiaramente sbagliati. Quando ho corso:

hdiutil compact *.sparsebundle

... ha liberato 16 GB di spazio, più o meno quello che mi aspettavo. Stranamente ha detto all'incirca "800 GB possibili", che è molto più della capacità del mio HD. Quindi presumo che la seconda cifra sia solo un numero teorico (imperfetto).

8
till

@Oscar ci ha indicato la giusta direzione. Ma non è necessario convertire in 1 MB e compatto, sperando di riconquistare spazio.

Invece, basta copiare il tuo sparsebundle in un altro nuovo sparsebundle. Questo, a sua volta, deframmenta l'immagine per te. E allo stesso tempo puoi cambiare il filesystem, le dimensioni e persino le bande.

Ecco un esempio che ho fatto di recente, convertendo la mia immagine "code" da 20 GB che sincronizzo su più dispositivi.

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

Vedi tutte le opzioni con hdiutil create -help.

Questo comando genera:

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

Puoi vedere il -attach opzione montata sotto /Volumes/code.

Nota: utilizzo HSFX per HFS + con distinzione tra maiuscole e minuscole perché sincronizzo anche le mie immagini su Linux e le montaggio. Molto probabilmente vorrai usare HFS+ invece, poiché macOS non fa distinzione tra maiuscole e minuscole.

Ora tutto ciò che devo fare è copiare tutto sul mio nuovo sparsebundle:

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

E ora per confrontare:

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

Sìì. Il mio sparsebundle da 15 GB è ora da 3 GB, deframmentato e le bande cambiate!

2
Eric Duncan

Non conosco un modo gratuito per farlo, ma credo che Prosoft Drive Genius farà ciò di cui hai bisogno qui:

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

Montate lo sparsebundle, lo deframmentate usando Drive Genius e quindi il

hdiutil compact

il comando dovrebbe funzionare.

0
palmer

Ho avuto un problematico pacchetto sparso che ha affermato di avere 950 GiB occupato su 1024 GiB (il mio SSD è solo 320 GiB = in termini di dimensioni, in modo che ciò non possa accadere). hdi compact non ha aiutato.

Ho eseguito "First Aid" da Utility Disco sia su bundle che su partizione, e questo mi ha aiutato: lo strumento per la misurazione dello spazio libero ha iniziato a mostrare 20 GiB come avrebbe dovuto, e poi hdi compact eseguito senza problemi.

0
toriningen

Possibili 0 byte recuperati su 90,4 GB.

Scommetto che l'unità che contiene il pacchetto sparse ha circa 90 GB di spazio libero? Poiché spesso i bundle sparsi possono crescere fino a quando il disco non è pieno, questo spazio viene semplicemente segnalato come spazio disponibile disponibile ... Vedrai le stesse figure in Utility Disco. Davvero molto fuorviante.

Quanto segue potrebbe darti un'idea:

hdiutil imageinfo image.sparsebundle
0
Arjan