OS X'te bir sparebundle'dan tüm / en boş alanların geri kazanılması


30

Seyrek bir demet görüntüsünü "birleştirmek" ve boş alanı geri kazanmak (olasılıkları) var mı?

İşte arkaplan: Seyrek demetler kullanıyorum ve şimdi ve sonra onlardan uzayı geri almak istiyorum ki koşuyorum:

hdiutil compact image.sparsebundle

Ancak, man sayfasında açıklandığı gibi, sadece tamamen kullanılmayan bant dosyalarını geri alıyor, bu yüzden benim durumumda şöyle yazıyor:

Reclaimed 0 bytes out of 90.4 GB possible.

Tabii ki, bu görüntünün içeriğini daha sonra yerine kullanılan, ancak hantal olan ve bu işlem için yeterli boş alan gerektiren yeni bir seyrek gruba kopyalama imkanı vardır.

Bu arada, kompakt komutun çıktısının biraz yanıltıcı olduğunu öğrendim (şu anda OS X 10.5.7 kullanıyorum), bazen zor durumda görüntü demetinin şu anda aldığı boyuttan daha büyük olan bir boyutu listeler. sürücü. Daha yakından bakmadım ama çıktı ya maksimum boyut ya da "maksimum boyut" - "kullanılmış boyut" gibi görünüyor.


1
Bununla ilgili bir sorunum vardı ancak bunun farkına göre sparsebundle fs EXFAT oldu. Manpage okuduktan sonra , kompakt fiilin yalnızca "HFS dosya sistemi içeren disk görüntüleri" üzerinde çalıştığını anladım.
jsejcksn

@jsejcksn Bu akılda tutulması gereken iyi bir nokta. Man sayfası şimdi APFS ve HFS + 'nin desteklendiğini söylüyor.
GDP2

AskDifferent ile ilgili soru: apple.stackexchange.com/questions/54607/…
GDP2

Yanıtlar:


20

İlginç!

Duyduğuma göre, seyrek paket, verileri 8 Mb bantlara böler. Bant boyutunu değiştirmek, eğer şanslıysanız yardımcı olabilir. Yani, hiçbir zaman% 100 geri kazanılmış yer elde edemezsiniz, ama şimdi elde ettiğinizden daha iyi olabilirsiniz. (Görüntüdeki verilere bağlı olarak vb.)

8Mb (varsayılan) bant boyutu ve biri 1Mb (söyleyebileceğimden izin verilen en küçük boyut) olan iki adet 500Mb seyrek paketli kirli basit bir test yaptım. 400 MB'ın üzerinde mp3 dosyasını kopyaladım, sonra diğer dosyaları çıkardım ve sonra kıçlarına koştum hdiutil compact.

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

Seyrek paketinizi dönüştürme komutu

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

Bant boyutu 512 bayt birimindedir. Bu yüzden yukarıdaki örnek bant boyutunu 512 x 2048 = İMb olarak ayarlar. Sadece TimeMachine görüntüleri veya kullanıcı giriş klasörü görüntüleri vb. İle ilgileniyorsanız dikkatli olun. Apple yolundan sapıyorsunuz :) Başarısız ve güvenli bir yedeklemeye devam edin!

Birleştirme gelince: komik bir his var ben sadece hdiutil seyrek dosyayı aynı biçimde yeni bir seyrek dosyaya dönüştürmek için kullanmak için hızlı (veya daha hızlı!). Bence bu konuda akıllı olmaya çalışıyor. Ama bilmiyorum.

(Seyrek bir paket birleştirmenin, seyrek paket bantları değil, disk verilerini birleştirdiğini, bir paket bilinmeyen bir birleştirici olmadığı sürece not edin hdiutil convert.


Komut satırı argümanlarınız yanlış sıradadır: -odoğrudan önce olmalı dst.sparsebundle, src.sparsebundle( -o'çıkış' anlamına gelmez ).
Nick Forge

Ayrıca, bu yöntemin şifrelemeyi korumadığını unutmayın. Büyük olasılıkla etkinleştirecek bir bayrak var, ancak bu noktada kendimi Disk Utility'de yeni bir sparebundle yapıp dosyalarımı kopyalamamı daha kolay buldum.
Justin,

2
Şifreleme için -encryptionanahtarı komuta eklemeniz yeterlidir.
fideli

Çok teşekkürler. Seyrek bant boyutunu küçültmek, Dropbox'da barındırılan seyrek paketler için çok kullanışlıdır
Max Ried

Tamam, bu bir anlam ifade etmiyor ... görüntüyü birleştirmeye dönüştürdüğümde, ortaya çıkan seyrek demet orijinalden % 16 daha büyük .
Michael,

7

Ben 90.4 GB mümkün düz yanlış olduğunu düşünüyorum. Koştuğum zaman:

hdiutil compact *.sparsebundle

... beklediğim gibi olan 16 GB'lık bir alanı boşalttı. Yeterince tuhaf, benim HD kapasitemden çok daha fazlası olan kabaca "800 GB mümkün" dedi. Bu yüzden ikinci rakamın sadece bir (hatalı) teorik sayı olduğunu varsayıyorum.


2

@ Oscar bize doğru yönde işaret etti. Ancak, alan kazanmayı umarak 1 MB ve kompakt boyutlarına dönüştürmeniz gerekmez.

Bunun yerine, sadece sparsebundle'ınızı başka bir sparsebundle'a kopyalayın. Bu da, görüntüyü sizin için birleştirir. Aynı zamanda dosya sistemini, boyutunu ve hatta bantları bile değiştirebilirsiniz.

İşte son zamanlarda yaptığım bir örnek, cihazlar arasında senkronize ettiğim 20GB "kod" imajımı dönüştürüyorum.

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

İle tüm seçenekleri görün hdiutil create -help.

Bu komut çıktı verir:

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

-attachAltına monte edilmiş seçeneği görebilirsiniz /Volumes/code.

Not: Büyük / HSFXküçük harfe duyarlı HFS + kullanıyorum çünkü görüntüleri Linux ile de senkronize ediyorum ve bunları bağlıyorum. Bunun HFS+yerine büyük olasılıkla kullanmak isteyeceksiniz , çünkü macOS normalde büyük / küçük harf duyarlı değildir.

Şimdi tek yapmam gereken her şeyi yeni sparebundle'a kopyalamak:

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

Ve şimdi karşılaştırmak için:

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

Yuppi. 15GB'lık sparebundle'im şimdi 3GB'lık, birleştirilmiş ve bantları değişti!


Bu yöntem orjinal soruda kabul edildi ... Cevabı küçümsemem çünkü iyi yazılmış ve "bilgilendirici", ama .. hadi ..
adfaklsdjf


0

Mümkün 90,4 GB dışında 0 bayt.

Bahse girerim seyrek paketi tutan sürücünün yaklaşık 90 GB boş alanı vardır? Seyrek paketler genellikle disk doluncaya kadar büyüyebildiğinden, bu boş alanın boş alan olduğu rapor edilir ... Aynı şekilleri Disk Hizmet Programında göreceksiniz. Gerçekten çok yanıltıcı.

Aşağıdakiler size bazı bilgiler verebilir:

hdiutil imageinfo image.sparsebundle

0

950 GiB'nin 1024 GiB'den işgal ettiğini iddia eden problemli bir paketim vardı (SSD'm sadece 320 GiB boyutunda, bu yüzden olamaz). hdi compactyardım etmedi.

Her iki pakette ve bölümdeki Disk Yardımcı Programından "İlk yardım" ı koydum ve bu yardımcı oldu - boş alan sayacı olması gerektiği gibi gerçek 20 GiB göstermeye başladı ve sonra hdi compactsorunsuz çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.