Cara mendapatkan kembali semua / sebagian besar ruang kosong dari sparsebundle di OS X


30

Apakah ada kemungkinan untuk "mendefragmentasi" gambar bundel yang jarang dan mendapatkan kembali (sebagian besar) ruang kosong?

Inilah latar belakangnya: Saya menggunakan bundel yang jarang dan setiap sekarang dan kemudian saya ingin mendapatkan kembali ruang dari mereka jadi saya jalankan:

hdiutil compact image.sparsebundle

Namun, seperti yang dijelaskan di halaman manual, itu hanya mendapatkan kembali file band yang sama sekali tidak digunakan, jadi dalam kasus saya dikatakan:

Reclaimed 0 bytes out of 90.4 GB possible.

Tentu saja ada kemungkinan untuk menyalin isi gambar ini ke bundel baru yang jarang yang kemudian digunakan sebagai pengganti, tetapi keduanya rumit dan membutuhkan ruang kosong yang cukup untuk operasi ini.

Sementara itu, saya menemukan bahwa output dari perintah kompak agak menyesatkan (saya saat ini menjalankan OS X 10.5.7) karena kadang-kadang daftar ukuran mungkin yang lebih besar dari ukuran saat ini diambil oleh bundel gambar pada hard mendorong. Saya tidak melihat lebih dekat tetapi output tampaknya menjadi ukuran maksimum atau "ukuran maksimum" - "ukuran yang digunakan".


1
Saya punya masalah dengan ini, tetapi kemudian menyadari itu karena sparsebundle saya fs EXFAT. Setelah membaca halaman manual , saya menyadari bahwa kata kerja yang ringkas hanya bekerja pada "gambar disk yang berisi sistem file HFS".
jsejcksn

@ jsejcksn Itu adalah poin yang baik untuk diingat. Halaman manual sekarang mengatakan bahwa APFS dan HFS + didukung.
GDP2

Pertanyaan yang relevan pada AskDifferent: apple.stackexchange.com/questions/54607/...
GDP2

Jawaban:


20

Menarik!

Dari apa yang saya dengar, bundel jarang membagi data menjadi 8MB band. Mengubah ukuran band mungkin hanya membantu, jika Anda beruntung. Maksud saya, Anda tidak akan pernah mendapatkan ruang reklamasi 100%, tapi mungkin lebih baik dari yang Anda dapatkan sekarang. (Tergantung pada data pada gambar dll.)

Saya melakukan tes sederhana kotor dengan dua bundel 500Mb, satu dengan band 8Mb (default), dan satu dengan 1Mb (ukuran terkecil yang diizinkan dari apa yang bisa saya katakan). Saya menyalin lebih dari 400mb file mp3 dan kemudian menghapus setiap file lainnya dan kemudian menjalankannya hdiutil compact.

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

Perintah untuk mengonversi bundel jarang Anda adalah

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

Ukuran band di unit 512byte. Jadi contoh di atas menetapkan ukuran band ke 512 * 2048 = 1Mb. Berhati-hatilah jika Anda berurusan dengan gambar TimeMachine atau gambar folder rumah pengguna, dll. Anda menyimpang dari jalur Apple :) Simpan cadangan aman yang gagal!

Sedangkan untuk defragmentasi: Saya punya perasaan lucu, itu sama cepat (atau lebih cepat!) Dengan hanya menggunakan hdiutil untuk mengubah file sparsefile menjadi file sparse baru dengan format yang sama. Saya pikir itu mencoba untuk menjadi pintar tentang hal itu. Tapi saya tidak tahu.

(Perhatikan bahwa defragmentasi bundel jarang hanya defragmen data disk, bukan band bundel jarang, kecuali jika defragmentasi bundel sadar. Melakukan hdiutil convertband 'defragmentasi', saya percaya.)


Argumen baris perintah Anda berada dalam urutan yang salah: -oharus langsung sebelumnya dst.sparsebundle, bukan src.sparsebundle( -omenunjukkan 'output').
Nick Forge

Perhatikan juga bahwa metode ini tidak menyimpan enkripsi. Mungkin ada bendera untuk mengaktifkannya, tetapi pada titik ini saya merasa lebih mudah hanya untuk membuat diri saya sparsebundle baru di Disk Utility dan menyalin file saya ke dalamnya.
Justin Searls

2
Untuk enkripsi, cukup tambahkan -encryptionsakelar ke perintah.
fideli

Terima kasih banyak. Mengurangi ukuran jarang-band sangat berguna untuk bundel-bundel yang diinangi Dropbox
Max Ried

Ok ini tidak masuk akal ... ketika saya mengkonversi ke defragment gambar, bundel yang dihasilkan adalah 16% lebih besar dari aslinya.
Michael

7

Saya pikir 90,4 GB mungkin salah. Ketika saya berlari:

hdiutil compact *.sparsebundle

... itu membebaskan ruang 16 GB, yang kira-kira seperti yang saya harapkan. Lucunya dikatakan kira-kira "800 GB mungkin" yang jauh lebih dari kapasitas HD saya. Jadi saya menganggap angka kedua hanyalah beberapa angka teoritis (cacat).


2

@Oscar menunjuk kami ke arah yang benar. Tapi Anda tidak perlu mengkonversi ke 1 MB dan kompak, berharap untuk mendapatkan kembali ruang.

Sebagai gantinya, cukup salin sparsebundle Anda ke sparsebundle baru. Ini, pada gilirannya, mendefrag gambar untuk Anda. Dan pada saat yang sama Anda dapat mengubah sistem file, ukuran dan bahkan band.

Berikut adalah contoh yang saya lakukan baru-baru ini, mengonversi gambar "kode" 20GB saya yang saya sinkronkan di seluruh perangkat.

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

Lihat semua opsi dengan hdiutil create -help.

Perintah ini menghasilkan:

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

Anda dapat melihat -attachopsi memasangnya di bawah /Volumes/code.

Catatan: Saya menggunakan HSFXuntuk HFS + case-sensitive karena saya juga menyinkronkan gambar saya ke Linux dan memasangnya. Anda kemungkinan besar ingin menggunakan HFS+gantinya, karena macOS biasanya tidak peka terhadap huruf besar-kecil.

Sekarang yang harus saya lakukan adalah menyalin semuanya ke sparsebundle baru saya:

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

Dan sekarang untuk membandingkan:

# 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. Sparsebundle 15GB saya sekarang 3GB, didefrag, dan band berubah!


Metode ini telah diakui dalam pertanyaan asli ... Saya tidak akan menurunkan jawaban karena ditulis dengan baik dan "informatif", tapi .. ayolah ..
adfaklsdjf


0

Reklamasi 0 byte dari 90,4 GB mungkin.

Saya yakin drive yang memegang bundel jarang memiliki ruang kosong sekitar 90 GB? Karena bundel jarang dapat tumbuh hingga disk penuh, ruang ini hanya dilaporkan sebagai ruang kosong yang tersedia ... Anda akan melihat angka yang sama di Utilitas Disk. Memang sangat menyesatkan.

Berikut ini mungkin memberi Anda wawasan:

hdiutil imageinfo image.sparsebundle

0

Saya memiliki bundel bermasalah bermasalah yang mengklaim memiliki 950 GiB ditempati dari 1024 GiB (SSD saya hanya berukuran 320 GiB, sehingga tidak bisa terjadi). hdi compacttidak membantu.

Saya telah menjalankan "Pertolongan pertama" dari Disk Utility pada bundel DAN partisi, dan meteran ruang bebas membantu itu mulai menunjukkan 20 GiB yang sebenarnya sebagaimana mestinya, dan kemudian hdi compactberlari tanpa masalah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.