Como recuperar todo / mais espaço livre de um sparsebundle no OS X

25

Existe a possibilidade de "desfragmentar" uma imagem de pacote esparso e recuperar (a maioria) do espaço livre?

Aqui está o plano de fundo: estou usando pacotes esparsos e, de vez em quando, quero recuperar espaço deles para que eu corra:

hdiutil compact image.sparsebundle

No entanto, como explicado na man page, ele apenas recupera arquivos de banda completamente não utilizados, então no meu caso diz:

Reclaimed 0 bytes out of 90.4 GB possible.

É claro que existe a possibilidade de copiar o conteúdo desta imagem para um novo pacote esparso que é então usado no lugar, mas isso é incômodo e requer espaço livre suficiente para esta operação.

Enquanto isso, descobri que a saída do comando compact é um tanto enganadora (atualmente estou executando o OS X 10.5.7), pois às vezes ele lista um tamanho que é maior do que o tamanho atualmente ocupado pelo pacote de imagens no disco rígido. Eu não olhei mais de perto, mas a saída parece ser o tamanho máximo ou "tamanho máximo" - "tamanho usado".

    
por user4854 28.05.2009 / 23:08

6 respostas

18

Interessante!

Pelo que ouvi, o pacote esparso divide os dados em bandas de 8Mb. Mudar o tamanho da banda pode ajudar, se você tiver sorte. Quero dizer, você nunca terá 100% de espaço recuperado, mas talvez seja melhor do que o que você recebe agora. (Dependendo dos dados da imagem, etc.)

Eu fiz um teste simples sujo com dois pacotes esparsos de 500Mb, um com tamanho de banda de 8Mb (padrão) e outro com 1Mb (menor tamanho permitido do que eu posso dizer). Eu copiei mais de 400MB de arquivos mp3 e, em seguida, removi todos os outros arquivos e, em seguida, execute hdiutil compact em suas bundas.

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

O comando para converter seu pacote esparso é

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

O tamanho da banda está na unidade 512 bytes. Portanto, o exemplo acima define o tamanho da banda para 512 * 2048 = 1Mb. Só tome cuidado se você está lidando com imagens TimeMachine ou imagens de pasta de usuário, etc Você está se desviando do caminho da Apple :) Mantenha um backup com segurança!

Quanto à desfragmentação: Eu tenho uma sensação engraçada de que é tão rápido (ou mais rápido!) apenas usar o hdiutil para converter o arquivo esparso para um novo arquivo esparso com o mesmo formato. Eu acho que tenta ser esperto sobre isso. Mas eu não sei.

(Observe que a desfragmentação de um pacote esparso apenas desfragmenta os dados do disco, não as bandas de pacote esparso, a menos que seja um desfragmentador ou uma desfragmentação esparsa do pacote. hdiutil convert faz uma desfragmentação da banda, acredito).

    
por 02.06.2009 / 01:12
6

Acho que os 90,4 GB possíveis estão totalmente errados. Quando eu corri

hdiutil compact *.sparsbundle

liberou 16 GB de espaço, que é aproximadamente o que eu realmente esperava. Engraçado o suficiente disse que aproximadamente "800 GB possível", que é muito mais do que a capacidade do meu HD. Então eu suponho que a segunda figura é apenas um número teórico (falho).

    
por 29.01.2011 / 21:25
2

@ Oscar nos apontou na direção certa. Mas você não precisa converter para 1 MB e compacto, na esperança de recuperar o espaço.

Em vez disso, basta copiar seu sparsebundle para outro novo sparsebundle. Isso, por sua vez, defrags a imagem para você. E ao mesmo tempo você pode alterar o sistema de arquivos, tamanho e até mesmo as bandas.

Veja um exemplo que fiz recentemente, convertendo minha imagem de "código" de 20 GB que sincronizo em vários dispositivos.

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

Veja todas as opções com hdiutil create -help .

Este comando gera:

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

Você pode ver a opção -attach montada em /Volumes/code .

Nota: eu uso HSFX para HFS + com distinção entre maiúsculas e minúsculas porque sincronizo minhas imagens com o Linux também e as monoto. Você provavelmente desejará usar HFS+ , já que o macOS normalmente não diferencia maiúsculas de minúsculas.

Agora tudo o que preciso fazer é copiar tudo para meu novo sparsebundle:

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

E agora 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/

Yay. Meu sparsebundle de 15 GB agora tem 3 GB, é desfragmentado e as bandas mudaram!

    
por 20.02.2017 / 08:33
0

Não conheço uma forma gratuita de fazer isso, mas acredito que o Prosoft Drive Genius fará o que você precisa aqui:

link

Você monta o sparsebundle, desfragmenta usando o Drive Genius e, em seguida, o

hdiutil compact
O comando

deve funcionar.

    
por 29.05.2009 / 16:52
0

Reclaimed 0 bytes out of 90.4 GB possible.

Aposto que a unidade que contém o pacote esparso tem cerca de 90 GB de espaço livre? Como pacotes esparsos geralmente podem crescer até que o disco esteja cheio, esse espaço é simplesmente relatado como sendo espaço livre disponível ... Você verá as mesmas figuras no Utilitário de Disco. Muito enganador, de fato.

As informações a seguir podem fornecer algumas informações:

hdiutil imageinfo image.sparsebundle
    
por 11.07.2009 / 21:58
0

Eu tive um pacote esparso problemático que dizia ter 950 GiB ocupados em 1024 GiB (meu SSD tem apenas 320 GiB em tamanho, então isso não poderia acontecer). hdi compact não ajudou.

Eu executei "Primeiros Socorros" do Utilitário de Disco na partição do pacote E, e esse medidor de espaço livre ajudou a mostrar 20 GB reais como deveria, e hdi compact correu sem problemas.

    
por 13.08.2017 / 20:49