it-swarm-pt.tech

Como recuperar todo / quase todo o espaço livre de um pacote esparso no OS X

Existe a possibilidade de "desfragmentar" uma imagem de pacote esparsa 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 executar:

hdiutil compact image.sparsebundle

No entanto, conforme explicado na página de manual, ele apenas recupera arquivos de banda completamente não utilizados; portanto, no meu caso, diz:

Reclaimed 0 bytes out of 90.4 GB possible.

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

Enquanto isso, descobri que a saída do comando compact é um pouco enganadora (atualmente estou executando o OS X 10.5.7), pois às vezes lista um tamanho possível possível 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 ter o tamanho máximo ou "tamanho máximo" - "tamanho usado".

33
user4854

Interessante!

Pelo que ouvi, o pacote esparso divide os dados em faixas de 8Mb. Alterar 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 recebe agora. (Dependendo dos dados da imagem etc.)

Fiz um teste simples e sujo com dois pacotes esparsos de 500Mb, um com tamanho de banda de 8Mb (padrão) e outro com 1Mb (o menor tamanho permitido do que eu sei). Copiei mais de 400mb de arquivos mp3 e, em seguida, removi todos os outros arquivos e, em seguida, executei hdiutil compact na bunda deles.

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 de 512 bytes. Portanto, o exemplo acima define o tamanho da banda para 512 * 2048 = 1Mb. Apenas tome cuidado se estiver lidando com imagens do TimeMachine ou com imagens da pasta inicial do usuário etc. Você está se desviando do caminho Apple caminho :) Mantenha um backup seguro contra falhas!

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

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

20
0scar

Eu acho que os 90,4 GB possíveis estão completamente errados. Quando eu corri:

hdiutil compact *.sparsebundle

... liberou 16 GB de espaço, o que é aproximadamente o que eu esperava. Curiosamente, ele disse aproximadamente "800 GB possíveis", o que é muito mais do que a capacidade do meu HD. Então, suponho que a segunda figura seja apenas um número teórico (defeituoso).

8
till

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

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

Aqui está um exemplo que fiz recentemente, convertendo minha imagem de "código" de 20 GB que sincronizo entre 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 o -attach opção montada em /Volumes/code.

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

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

$ 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 pacote esparso de 15 GB agora está com 3 GB, desfragmentado e as bandas alteradas!

2
Eric Duncan

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

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

Você monta o pacote esparso, desfragmenta-o usando o Drive Genius e, em seguida, o

hdiutil compact

comando deve funcionar.

0
palmer

Eu tinha um pacote esparso problemático que alegava ter 950 GiB ocupado em 1024 GiB (meu SSD é de apenas 320 GiB = em tamanho, para que isso não aconteça). hdi compact não ajudou.

Eu executei o "Primeiros Socorros" do Utilitário de Disco no pacote E na partição, e isso ajudou - o medidor de espaço livre começou a mostrar 20 reais GiB como deveria ter) e depois hdi compact correu sem problemas.

0
toriningen

Recuperado 0 bytes de 90,4 GB possíveis.

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é o disco ficar cheio, esse espaço é simplesmente relatado como espaço livre disponível ... Você verá as mesmas figuras no Utilitário de Disco. Muito enganador mesmo.

A seguir, algumas dicas:

hdiutil imageinfo image.sparsebundle
0
Arjan