Jak odzyskać całe / najbardziej wolne miejsce z rzadkiego pakietu w OS X

30

Czy istnieje możliwość „defragmentacji” rzadkiego obrazu pakietu i odzyskania (większości) wolnego miejsca?

Oto tło: używam rzadkich pakietów i od czasu do czasu chcę odzyskać od nich miejsce, więc uruchamiam:

hdiutil compact image.sparsebundle

Jednak, jak wyjaśniono na stronie podręcznika, odzyskuje tylko całkowicie nieużywane pliki zespołu, więc w moim przypadku mówi:

Reclaimed 0 bytes out of 90.4 GB possible.

Oczywiście istnieje możliwość skopiowania zawartości tego obrazu do nowego rzadkiego pakietu, który jest następnie używany zamiast tego, ale jest to zarówno kłopotliwe, jak i wymaga wystarczającej ilości wolnego miejsca dla tej operacji.

W międzyczasie dowiedziałem się, że dane wyjściowe polecenia kompaktowego są nieco mylące (obecnie korzystam z systemu OS X 10.5.7), ponieważ czasami podaje on możliwie największy rozmiar, który jest większy niż rozmiar aktualnie zajmowany przez pakiet obrazów na dysku twardym napęd. Nie przyjrzałem się bliżej, ale wynik wydaje się być albo maksymalnym rozmiarem, albo „maksymalnym rozmiarem” - „użytym rozmiarem”.

użytkownik4854
źródło
1
Miałem z tym problem, ale potem zdałem sobie sprawę, że to dlatego, że mój sparsebundle fs był EXFAT. Po przeczytaniu strony uświadomiłem sobie, że czasownik kompaktowy działa tylko na „obrazach dysków zawierających system plików HFS”.
jsejcksn
@jsejcksn To dobry punkt, o którym należy pamiętać. Strona podręcznika mówi teraz, że obsługiwane są APFS i HFS +.
PKB2
Odpowiednie pytanie dotyczące AskDifferent: apple.stackexchange.com/questions/54607/…
GDP2

Odpowiedzi:

20

Ciekawy!

Z tego, co słyszałem, rzadki pakiet dzieli dane na pasma 8 Mb. Zmiana wielkości pasma może po prostu pomóc, jeśli masz szczęście. To znaczy, nigdy nie dostaniesz w 100% odzyskanego miejsca, ale może lepiej niż to, co dostajesz teraz. (W zależności od danych na obrazie itp.)

Zrobiłem brudny prosty test z dwoma rzadkimi pakietami 500 Mb, jednym z pasmem 8 Mb (domyślnym), a drugim z 1 Mb (najmniejszym dozwolonym rozmiarem z tego, co mogę powiedzieć). Skopiowałem ponad 400 MB plików mp3, a następnie usunąłem każdy inny plik, a następnie uruchomiłem hdiutil compactna nich osły.

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

Polecenie przekonwertowania rzadkiego pakietu to

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

Rozmiar pasma jest w jednostce 512 bajtów. Tak więc powyższy przykład ustawia rozmiar pasma na 512 * 2048 = 1 Mb. Bądź ostrożny, jeśli masz do czynienia z obrazami TimeMachine lub obrazami folderów domowych użytkownika itp. Odchodzisz od ścieżki Apple :) Zachowaj bezpieczną kopię zapasową!

Co do defragmentacji: mam zabawne wrażenie, że równie szybko (lub szybciej!) Wystarczy użyć hdiutil do konwersji pliku sparse na nowy plik rzadki o tym samym formacie. Myślę, że stara się być mądry. Ale nie wiem.

(Zauważ, że defragmentacja rzadkiego pakietu po prostu defragmentuje dane dysku, a nie rzadkie pasma pakietów, chyba że jest to defragmentator obsługujący rzadkie pakiety hdiutil convert.

0scar
źródło
Argumenty wiersza poleceń są w niewłaściwej kolejności: -opowinny znajdować się bezpośrednio przed dst.sparsebundle, a nie src.sparsebundle( -ooznacza „wynik”).
Nick Forge
Pamiętaj też, że ta metoda nie chroni szyfrowania. Prawdopodobnie jest to flaga, aby ją włączyć, ale w tym momencie łatwiej mi było po prostu zrobić nowy pakiet sparsebund w Narzędziu dyskowym i skopiować do niego moje pliki.
Justin Searls
2
W celu szyfrowania wystarczy dodać -encryptionprzełącznik do polecenia.
fideli
Wielkie dzięki. Zmniejszenie rozmiaru rzadkiego pasma jest bardzo przydatne w przypadku rzadkich pakietów hostowanych przez Dropbox
Max Ried
Ok, to nie ma sensu ... kiedy przekonwertuję, aby zdefragmentować obraz, wynikowy rzadki pakiet jest o 16% większy niż oryginał.
Michael
7

Myślę, że możliwe 90,4 GB jest po prostu błędne. Kiedy pobiegłem:

hdiutil compact *.sparsebundle

... uwolniło 16 GB miejsca, co jest mniej więcej tym, czego się spodziewałem. Zabawne jest to, że napisano w przybliżeniu „możliwe 800 GB”, czyli znacznie więcej niż pojemność mojego HD. Zakładam więc, że druga liczba to tylko (błędna) liczba teoretyczna.

do
źródło
2

@Oscar wskazał nam właściwy kierunek. Ale nie musisz konwertować do 1 MB i mieć kompaktowy rozmiar, mając nadzieję na odzyskanie miejsca.

Zamiast tego po prostu skopiuj pakiet sparsebundle do innego nowego pakietu sparsebundle. To z kolei powoduje defragmentację obrazu. Jednocześnie możesz zmienić system plików, rozmiar, a nawet pasma.

Oto przykład, który zrobiłem niedawno: konwersję obrazu „kodu” o wielkości 20 GB, który synchronizuję między urządzeniami.

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

Zobacz wszystkie opcje za pomocą hdiutil create -help.

To polecenie generuje:

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

Możesz zobaczyć -attachopcję zamontowania go pod /Volumes/code.

Uwaga: używam HSFXHFS + z rozróżnianiem wielkości liter, ponieważ synchronizuję również obrazy z Linuksem i montuję je. Najprawdopodobniej będziesz chciał użyć HFS+zamiast tego, ponieważ macOS zwykle nie rozróżnia wielkości liter.

Teraz wszystko, co muszę zrobić, to skopiować wszystko do mojej nowej części:

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

A teraz do porównania:

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

Tak Mój 15 GB sparsebundle ma teraz 3 GB, jest zdefragmentowany, a zespoły zmienione!

Eric Duncan
źródło
Ta metoda została potwierdzona w pierwotnym pytaniu ... Nie będę głosować za odpowiedzią, ponieważ jest dobrze napisana i „pouczająca”, ale .. no dalej…
adfaklsdjf
0

Nie wiem, jak to zrobić za darmo, ale wierzę, że geniusz Prosoft Drive zrobi to, czego potrzebujesz:

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

Montujesz sparsebundle, defragmentujesz go za pomocą Drive Genius, a następnie

hdiutil compact

polecenie powinno działać.

pielgrzym z ziemi świętej
źródło
0

Odzyskano 0 bajtów z 90,4 GB.

Założę się, że dysk, na którym znajduje się rzadki pakiet, ma około 90 GB wolnego miejsca? Ponieważ rzadkie pakiety często mogą rosnąć aż do zapełnienia dysku, miejsce to jest po prostu zgłaszane jako dostępne wolne miejsce ... W Narzędziu dyskowym zobaczysz te same liczby. Rzeczywiście bardzo mylące.

Poniższe informacje mogą dać ci pewien wgląd:

hdiutil imageinfo image.sparsebundle
Arjan
źródło
0

Miałem problematyczny rzadki pakiet, który twierdził, że 950 GiB jest zajęty z 1024 GiB (mój dysk SSD ma tylko 320 GiB, więc to nie mogło się zdarzyć). hdi compactnie pomogło

Uruchomiłem „Pierwszą pomoc” z Narzędzia dyskowego na obu pakietach AND i to pomogło - wolny licznik miejsca zaczął pokazywać prawdziwe 20 GiB tak, jak powinien, a następnie hdi compactdziałał bez problemu.

toriningen
źródło