Как освободить все / самое свободное место от разреженного на OS X

Есть ли возможность "дефрагментировать" разреженный пакетный образ и освободить (большую часть) свободного пространства?

Вот предыстория: я использую разреженные пакеты, и время от времени я хочу освободить от них пространство, поэтому я запускаю:

hdiutil compact image.sparsebundle

Однако, как объяснено на странице руководства, он восстанавливает только полностью неиспользуемые файлы группы, поэтому в моем случае он говорит:

Reclaimed 0 bytes out of 90.4 GB possible.

Конечно, есть возможность скопировать содержимое этого изображения в новый разреженный комплект, который затем используется вместо этого, но это громоздко и требует достаточно свободного места для этой операции.

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

6 ответов

Решение

Интересно!

Из того, что я слышал, разреженный пакет делит данные на 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 Я считаю, что группа "дефрагментирует"

Я думаю, что возможные 90,4 ГБ - это просто неправильно. Когда я побежал

hdiutil compact *.sparsbundle

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

@ Оскар указал нам правильное направление. Но вам не нужно конвертировать в 1 МБ и компактнее, в надежде вернуть себе место.

Вместо этого просто скопируйте ваш sparsebundle в другой новый sparsebundle. Это, в свою очередь, дефрагментирует изображение для вас. И в то же время вы можете изменить файловую систему, размер и даже полосы.

Вот пример, который я недавно сделал, конвертируя 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,

Примечание: я использую HSFX для чувствительной к регистру HFS+, потому что я также синхронизирую свои образы с Linux и монтирую их. Скорее всего, вы захотите использовать HFS+ вместо этого, поскольку macOS обычно нечувствителен к регистру.

Теперь все, что мне нужно сделать, это скопировать все в мой новый sparsebundle:

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

Ура. Мой sparsebundle 15 ГБ теперь 3 ГБ, дефрагментирован, и группы изменились!

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

Я выполнил "Скорую помощь" из Дисковой утилиты как на пачке, так и на разделе, и это помогло - счетчик свободного пространства начал показывать реальные 20 ГиБ, как и должно было hdi compact побежал без проблем.

Возможно восстановление 0 байтов из 90,4 ГБ.

Бьюсь об заклад, диск, который содержит разреженный комплект, имеет около 90 ГБ свободного места? Поскольку разреженные пакеты часто могут увеличиваться до заполнения диска, об этом пространстве просто сообщается как о доступном свободном пространстве... Вы увидите те же цифры в Дисковой утилите. На самом деле очень обманчиво.

Следующее может дать вам некоторое представление:

hdiutil imageinfo image.sparsebundle

Я не знаю свободного способа сделать это, но я верю, что Prosoft Drive Genius сделает то, что вам нужно здесь:

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

Вы монтируете sparsebundle, дефрагментируете его с помощью Drive Genius, а затем

hdiutil compact

Команда должна работать.

Другие вопросы по тегам