Як відібрати весь / найбільш вільний простір з розрізненого пакету на OS X


30

Чи є можливість "дефрагментації" розрідженого зображення в'язки та відновлення (більшості) вільного простору?

Ось передумови: я використовую розріджені пачки і раз у раз хочу повернути простір у них, щоб запустити:

hdiutil compact image.sparsebundle

Однак, як пояснено на сторінці man, вона повертає лише повністю невикористані файли діапазону, тому в моєму випадку вона говорить:

Reclaimed 0 bytes out of 90.4 GB possible.

Звичайно, є можливість скопіювати вміст цього зображення в новий розріджений пакет, який потім використовується замість цього, але це одночасно громіздко і вимагає достатньо вільного місця для цієї операції.

Тим часом я з’ясував, що вихід компактної команди дещо вводить в оману (я зараз виконую OS X 10.5.7), оскільки інколи перераховує можливий розмір, більший за розмір, який наразі займає група зображень на жорсткому диску привід. Я не придивився ближче, але висновок здається чи максимальним розміром, або "максимальним розміром" - "використаним розміром".


1
У мене виникла проблема з цим, але потім зрозуміла, що це тому, що мій розріджений фс був EXFAT. Прочитавши manpage , я зрозумів, що компактне дієслово працює лише на "образи диска, що містять файлову систему HFS".
jsejcksn

@jsejcksn Це гарний момент, який потрібно пам’ятати. На цій сторінці тепер написано, що підтримуються APFS та HFS +.
ВВП2

Відповідне запитання щодо AskDifferent: apple.stackexchange.com/questions/54607/…
ВВП2

Відповіді:


20

Цікаво!

З того, що я чув, розріджений пакет розбиває дані на 8 Мб діапазони. Зміна розміру гурту може просто допомогти, якщо вам пощастить. Я маю на увазі, ви ніколи не отримаєте 100% регенерації місця, але, можливо, краще, ніж зараз. (Залежно від даних про зображення тощо)

Я зробив брудний простий тест з двома розрідженими пачками по 500 Мб, один з розміром діапазону 8 Мбіт (за замовчуванням) і один з 1 Мб (найменший дозволений розмір від того, що я можу сказати). Я скопіював понад 400 Мб файлів mp3, а потім видалив усі інші файли, а потім запустив hdiutil compactїхні дупи.

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

Команда для перетворення вашого розрідженого пакета є

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

Розмір діапазону знаходиться в одиниці 512 байт. Таким чином, вищенаведений приклад встановлює розмір діапазону 512 * 2048 = 1 Мб. Будьте обережні, якщо ви маєте справу з зображеннями TimeMachine або зображеннями домашньої папки користувача тощо. Ви відхиляєтесь від шляху Apple :) Зберігайте безпечну резервну копію!

Що стосується дефрагментації: у мене дивне відчуття, що це так само швидко (або швидше!) Просто використовувати hdiutil для перетворення sparsefile у новий розріджений файл того самого формату. Я думаю, що це намагається бути розумним щодо цього. Але я не знаю.

(Зверніть увагу, що дефрагментація розрідженого пакету просто дефрагментує дані диска, а не розріджені смуги, якщо це не дефрагментатор розрідженого пакета. hdiutil convertЯ вважаю, що діапазон "дефрагментації" є).


Аргументи вашого командного рядка в неправильному порядку: -oповинні бути безпосередньо перед dst.sparsebundle, а не src.sparsebundle( -oпозначає 'вихід').
Нік Форж

Також зауважте, що цей метод не зберігає шифрування. Напевно, є прапор, щоб це ввімкнути, але в цей момент мені стало легше просто зробити собі нове розширення в Disk Utility і скопіювати свої файли в нього.
Джастін Сірлс

2
Для шифрування просто додайте -encryptionперемикач до команди.
fideli

Дуже дякую. Зменшення розміру рідких смуг дуже корисно для розріджених пучків Dropbox
Макс Рід

Ок, це не має сенсу ... коли я перетворюю, щоб дефрагментувати зображення, отриманий розріджений набір на 16% більший від оригіналу.
Майкл

7

Я думаю, що можливий 90,4 ГБ - це явно неправильно. Коли я бігав:

hdiutil compact *.sparsebundle

... це звільнило 16 Гб місця, що приблизно те, що я очікував. Як не дивно, вона сказала приблизно "800 ГБ можливо", що набагато більше, ніж ємність мого HD. Тож я припускаю, що друга цифра - це лише якесь (хибне) теоретичне число.


2

@Oscar вказав на нас у правильному напрямку. Але вам не потрібно конвертувати в 1 Мб і компактний, сподіваючись повернути собі місце.

Замість цього просто скопіюйте свій розріджений пакет в інший новий розріджений пакет. Це, в свою чергу, знеструмлює зображення для вас. І в той же час ви можете змінити файлову систему, розмір і навіть смуги.

Ось приклад, який я нещодавно зробив, перетворивши своє "кодове" зображення на 20 ГБ, яке я синхронізував на різних пристроях.

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

Перегляньте всі варіанти за допомогою hdiutil create -help.

Ця команда виводить:

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

Ви можете бачити -attachопцію, встановлену під ним /Volumes/code.

Примітка. Я використовую HSFXHFS + з урахуванням регістру, оскільки синхронізую свої зображення з Linux і монтую їх. Ви, швидше за все, захочете використовувати це HFS+, оскільки macOS, як правило, нечутливий до регістру.

Тепер все, що я повинен зробити, - скопіювати все на мій новий розріджений пакет:

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

А тепер для порівняння:

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

Так. Мій розрядний 15 Гб зараз 3 Гб, дефрагментований, а смуги змінені!


Цей метод був визнаний у первісному запитанні ... Я не зволікаю відповіді, тому що вона добре написана та "інформативна", але .. c'mon ..
adfaklsdjf

0

Я не знаю про вільний спосіб зробити це, але я вірю, що Prosoft Drive Genius зробить все, що вам потрібно:

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

Ви змонтуєте спарбленд, дефрагментуйте його за допомогою Drive Genius, а потім

hdiutil compact

команда повинна працювати.


0

Набрано 0 байт із 90,4 ГБ.

Б'юсь об заклад, що на накопичувачі, що містить розріджений пакет, є близько 90 ГБ вільного місця? Оскільки рідкі розшарування часто можуть зростати, поки диск не заповниться, про цей простір просто повідомляється як про вільний простір ... Ви побачите ті самі фігури в Disk Utility. Дійсно дуже вводить в оману.

Наступне може дати вам деяке розуміння:

hdiutil imageinfo image.sparsebundle

0

У мене був проблематичний розріджений пакет, який стверджував, що 950 GiB займає 1024 GiB (мій SSD має розмір всього 320 GiB, так що не могло статися). hdi compactне допомогло.

Я запустив "Першу допомогу" від Disk Utility як на пакеті, так і на розділі, і це допомогло - лічильник вільного простору почав показувати справжні 20 Гбіт як слід, а потім hdi compactпробіг без проблем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.