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


30

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 (al momento sto eseguendo OS X 10.5.7) in quanto a volte elenca una dimensione possibile maggiore di quella attualmente occupata dal pacchetto di immagini sul disco rigido guidare. Non ho guardato più da vicino, ma l'output sembra essere la dimensione massima o "dimensione massima" - "dimensione utilizzata".


1
Ho avuto un problema con questo, ma poi ho capito che era perché il mio sparsebundle fs era EXFAT. Dopo aver letto la manpage , mi sono reso conto che il verbo compatto funziona solo su "immagini disco contenenti un filesystem HFS".
jsejcksn,

@jsejcksn Questo è un buon punto da tenere a mente. La pagina man ora dice che sono supportati APFS e HFS +.
PIL2

Domanda rilevante su AskDifferent: apple.stackexchange.com/questions/54607/…
GDP2

Risposte:


20

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 (impostazione predefinita) e uno con 1 Mb (la dimensione minima consentita da quello che posso dire). Ho copiato oltre 400 MB di file mp3 e poi rimosso ogni altro file e poi eseguito hdiutil compactsul loro culo.

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 percorso 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 si tratti di una deframmentazione consapevole del bundle sparse hdiutil convert.


Gli argomenti della riga di comando sono nell'ordine sbagliato: -odovrebbero essere direttamente prima dst.sparsebundle, non src.sparsebundle( -oindica "output").
Nick Forge,

Inoltre, si noti che questo metodo non conserva la crittografia. Probabilmente c'è una bandiera per abilitarlo, ma a questo punto ho trovato più facile solo farmi un nuovo sparsebundle in Utility Disco e copiare i miei file in esso.
Justin Searls,

2
Per la crittografia, basta aggiungere l' -encryptionopzione al comando.
fideli,

Molte grazie. La riduzione delle dimensioni delle bande sparse è molto utile per i bundle sparse ospitati da Dropbox
Max Ried

Ok, questo non ha senso ... quando converto per deframmentare l'immagine, il pacchetto sparse risultante è del 16% più grande dell'originale.
Michael,

7

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


2

@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 filesystem, 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 l' -attachopzione montata sotto /Volumes/code.

Nota: utilizzo HSFXHFS + con distinzione tra maiuscole e minuscole perché sincronizzo anche le mie immagini su Linux e le montaggio. Probabilmente vorrai HFS+invece usarlo , dal momento che macOS normalmente 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!


Questo metodo è stato riconosciuto nella domanda originale ... Non ridimensionerò la risposta perché è ben scritta e "istruttiva", ma ... dai ..
adfaklsdjf,


0

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

Avevo un problematico pacchetto sparso che sosteneva di avere 950 GiB occupati su 1024 GiB (il mio SSD ha una dimensione di soli 320 GiB, quindi non poteva succedere). hdi compactnon ha aiutato.

Ho eseguito il "Pronto soccorso" da Utility Disco su entrambi i bundle E le partizioni, e questo mi ha aiutato: il misuratore di spazio libero ha iniziato a mostrare 20 GiB reali come avrebbe dovuto, e poi ha hdi compactfunzionato senza problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.