Cómo reclamar todo / la mayoría del espacio libre de un paquete disperso en OS X

30

¿Existe la posibilidad de "desfragmentar" una imagen de paquete dispersa y reclamar (la mayoría) del espacio libre?

Aquí está el trasfondo: estoy usando paquetes dispersos y de vez en cuando quiero recuperar espacio de ellos, así que corro:

hdiutil compact image.sparsebundle

Sin embargo, como se explica en la página del manual, solo reclama archivos de banda completamente no utilizados, por lo que en mi caso dice:

Reclaimed 0 bytes out of 90.4 GB possible.

Por supuesto, existe la posibilidad de copiar el contenido de esta imagen en un nuevo paquete disperso que luego se utiliza en lugar de eso, pero que es engorroso y requiere suficiente espacio libre para esta operación.

Mientras tanto, descubrí que la salida del comando compacto es algo engañosa (actualmente estoy ejecutando OS X 10.5.7) ya que a veces enumera un tamaño posible que es más grande que el tamaño actualmente ocupado por el paquete de imágenes en el disco duro manejar. No miré más de cerca, pero el resultado parece ser el tamaño máximo o el "tamaño máximo" - "tamaño usado".

usuario4854
fuente
1
Tuve un problema con esto, pero luego me di cuenta de que era porque mi sparsebundle fs era EXFAT. Después de leer la página de manual , me di cuenta de que el verbo compacto solo funciona en "imágenes de disco que contienen un sistema de archivos HFS".
jsejcksn
@jsejcksn Ese es un buen punto a tener en cuenta. La página de manual ahora dice que APFS y HFS + son compatibles.
GDP2
Pregunta relevante sobre AskDifferent: apple.stackexchange.com/questions/54607/…
GDP2

Respuestas:

20

¡Interesante!

Por lo que he escuchado, el paquete disperso divide los datos en bandas de 8Mb. Cambiar el tamaño de la banda podría ayudar, si tienes suerte. Quiero decir, nunca obtendrás un 100% de espacio recuperado, pero tal vez sea mejor que lo que obtienes ahora. (Dependiendo de los datos en la imagen, etc.)

Hice una prueba simple y sucia con dos paquetes dispersos de 500Mb, uno con un tamaño de banda de 8Mb (predeterminado) y otro con 1Mb (el tamaño más pequeño permitido por lo que puedo decir). Copié más de 400 MB de archivos mp3 y luego eliminé todos los demás archivos y luego hdiutil compactlos ejecuté.

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

El comando para convertir su paquete disperso es

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

El tamaño de la banda está en la unidad 512byte. Entonces, el ejemplo anterior establece el tamaño de la banda en 512 * 2048 = 1Mb. Solo tenga cuidado si está tratando con imágenes de TimeMachine o imágenes de la carpeta de inicio del usuario, etc. Se está desviando de la ruta de Apple :) ¡Mantenga una copia de seguridad a prueba de fallas!

En cuanto a la desfragmentación: tengo la extraña sensación de que es igual de rápido (¡o más rápido!) Usar hdiutil para convertir el archivo disperso en un nuevo archivo disperso con el mismo formato. Creo que trata de ser inteligente al respecto. Pero no lo se.

(Tenga en cuenta que la desfragmentación de un paquete disperso solo desfragmenta los datos del disco, no las bandas del paquete disperso, a menos que sea un desfragmentador consciente del paquete disperso hdiutil convert. Creo que una desfragmentación de banda).

0scar
fuente
Los argumentos de la línea de comandos están en el orden incorrecto: -odeben estar directamente antes dst.sparsebundle, no src.sparsebundle( -odenota 'salida').
Nick Forge el
Además, tenga en cuenta que este método no conserva el cifrado. Probablemente haya una bandera para habilitarlo, pero en este punto me resultó más fácil hacerme un nuevo paquete disperso en la Utilidad de Discos y copiar mis archivos en él.
Justin Searls
2
Para el cifrado, simplemente agregue el -encryptioninterruptor al comando.
fideli
Muchas gracias. Disminuir el tamaño de banda dispersa es muy útil para los paquetes dispersos alojados en Dropbox
Max Ried
Ok, esto no tiene sentido ... cuando convierto para desfragmentar la imagen, el paquete disperso resultante es un 16% más grande que el original.
Michael
7

Creo que los 90.4 GB posibles son simplemente incorrectos. Cuando corrí:

hdiutil compact *.sparsebundle

... liberó 16 GB de espacio, que es aproximadamente lo que esperaba. Curiosamente, dijo aproximadamente "800 GB posibles", que es mucho más que la capacidad de mi HD. Así que supongo que la segunda cifra es solo un número teórico (defectuoso).

hasta que
fuente
2

@Oscar nos señaló en la dirección correcta. Pero no necesita convertir a 1 MB y compacto, con la esperanza de recuperar espacio.

En cambio, simplemente copie su sparsebundle a otro nuevo sparsebundle. Esto, a su vez, desfragmenta la imagen por ti. Y al mismo tiempo, puede cambiar el sistema de archivos, el tamaño e incluso las bandas.

Aquí hay un ejemplo que hice recientemente, convirtiendo mi imagen de "código" de 20GB que sincronizo en todos los dispositivos.

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

Ver todas las opciones con hdiutil create -help.

Este comando genera:

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

Puede ver la -attachopción montada debajo /Volumes/code.

Nota: Uso HSFXpara HFS + sensible a mayúsculas y minúsculas porque también sincronizo mis imágenes con Linux y las monto. Lo más probable es que quieras usarlo HFS+, ya que macOS normalmente no distingue entre mayúsculas y minúsculas.

Ahora todo lo que tengo que hacer es copiar todo a mi nuevo sparsebundle:

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

Y ahora para comparar:

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

Hurra. ¡Mi paquete disperso de 15 GB ahora tiene 3 GB, desfragmentado y las bandas cambiaron!

Eric Duncan
fuente
Este método fue reconocido en la pregunta original ... No voy a downvote la respuesta porque está bien escrito y "informativo", pero .. vamos ..
adfaklsdjf
0

No conozco una forma gratuita de hacerlo, pero creo que Prosoft Drive Genius hará lo que necesita aquí:

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

Usted monta el paquete disperso, lo desfragmenta con Drive Genius y luego el

hdiutil compact

El comando debería funcionar.

palmero
fuente
0

Reclamado 0 bytes de 90.4 GB posibles.

¿Apuesto a que la unidad que contiene el paquete disperso tiene aproximadamente 90 GB de espacio libre? Como los paquetes dispersos a menudo pueden crecer hasta que el disco esté lleno, este espacio simplemente se informa como espacio libre disponible ... Verá las mismas cifras en la Utilidad de Discos. Muy engañoso de hecho.

Lo siguiente podría darle una idea:

hdiutil imageinfo image.sparsebundle
Arjan
fuente
0

Tenía un paquete disperso problemático que decía tener 950 GiB ocupados de 1024 GiB (mi SSD tiene un tamaño de solo 320 GiB, por lo que eso no podría suceder). hdi compactno ayudó

Ejecuté "Primeros auxilios" desde Disk Utility en el paquete Y la partición, y eso ayudó: el medidor de espacio libre comenzó a mostrar 20 GiB reales como debería, y luego se hdi compactejecutó sin problemas.

Toriningen
fuente