как освободить все / самое свободное место от разреженного на os x

<p>есть ли возможность "дефрагментировать" разреженный пакетный образ и вернуть (большую часть) свободного пространства?</p><p>вот предыстория: я использую разреженные пакеты, и время от времени я хочу освободить от них пространство, поэтому я запускаю:</p><blockquote> <p><code>hdiutil compact image.sparsebundle</code></p> </blockquote><p>однако, как объяснено на странице руководства, он восстанавливает только полностью неиспользуемые файлы группы, поэтому в моем случае он говорит:</p><blockquote> <p><code>reclaimed 0 bytes out of 90.4 gb possible.</code></p> </blockquote><p>конечно, есть возможность скопировать содержимое этого изображения в новый разреженный комплект, который затем используется вместо этого, но это громоздко и требует достаточно свободного места для этой операции.</p><p>тем временем я обнаружил, что вывод команды compact несколько вводит в заблуждение (в настоящее время я использую os x 10.5.7), поскольку в нем иногда указывается максимально возможный размер, который <em>больше</em>, чем размер, занятый в настоящее время. по пачке изображений на жестком диске. я не посмотрел поближе, но вывод кажется либо максимальным размером, либо "максимальным размером" - "использованным размером".</p>

<p>интересно!</p><p>из того, что я слышал, разреженный пакет делит данные на 8-мегабайтные полосы. изменение размера группы может помочь, если вам повезет. я имею в виду, вы никогда не получите 100% освоенного пространства, но, возможно, лучше, чем то, что вы получаете сейчас. (в зависимости от данных на изображении и т.д.)</p><p>я провел грязный простой тест с двумя разреженными пакетами по 500 мб, один с размером полосы 8 мб (по умолчанию), а другой с 1 мб (наименьший допустимый размер из того, что я могу сказать). я скопировал более 400 мб mp3-файлов, затем удалил все остальные файлы и запустил <code>hdiutil compact</code> на своих задницах.</p><pre><code>size after compact 8mb bands: 271mb 1mb bands: 215mb </code></pre><p>команда для преобразования вашего разреженного пакета</p><pre><code>hdiutil convert src.sparsebundle -format udsb -tgtimagekey sparse-band-size=2048 -o dst.sparsebundle </code></pre><p>размер полосы в блоке 512 байт. таким образом, приведенный выше пример устанавливает размер полосы 512 * 2048 = 1 мб. просто будьте осторожны, если вы имеете дело с изображениями timemachine или изображениями домашних папок пользователя и т.д. вы отклоняетесь от пути apple :). сохраняйте резервную копию!</p><p>что касается дефрагментации: у меня странное чувство, что это так же быстро (или быстрее!) просто использовать hdiutil для преобразования sparsefile в новый разреженный файл с тем же форматом. я думаю, что он пытается быть умным об этом. но я не знаю.</p><p>(обратите внимание, что дефрагментация разреженного пакета просто дефрагментирует данные диска, а не полосы разреженного пакета, если только это не дефрагментатор с поддержкой разреженного пакета. <code>hdiutil convert</code> я считаю, что группа "дефрагментирует".)</p>

<p>я думаю, что возможные 90,4 гб - это просто неправильно. когда я побежал:</p><pre><code>hdiutil compact *.sparsebundle </code></pre><p>... это освободило 16 гб пространства, что примерно так, как я ожидал. как ни странно, он сказал примерно "800 гб возможно", что намного больше, чем емкость моего hd. поэтому я полагаю, что вторая цифра - это просто (ошибочное) теоретическое число.</p>

<p>@ оскар указал нам правильное направление. но вам не нужно конвертировать в 1 мб и компактнее, в надежде вернуть себе место.</p><p>вместо этого просто скопируйте ваш sparsebundle в другой новый sparsebundle. это, в свою очередь, дефрагментирует изображение для вас. и в то же время вы можете изменить файловую систему, размер и даже полосы.</p><p>вот пример, который я недавно сделал, конвертируя 20-гигабайтное "кодовое" изображение, которое я синхронизирую между устройствами.</p><pre><code>$ 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/ </code></pre><p>а теперь для сравнения:</p><pre><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/ </code></pre><p>ура. мой sparsebundle 15 гб теперь 3 гб, дефрагментирован, и группы изменились!</p>

<p>я не знаю свободного способа сделать это, но я верю, что prosoft drive genius сделает то, что вам нужно здесь:</p><p> <a href="http://www.prosofteng.com/products/drive\_genius.php">http://www.prosofteng.com/products/drive\_genius.php</a> </p><p>вы монтируете sparsebundle, дефрагментируете его с помощью drive genius, а затем</p><pre><code>hdiutil compact </code></pre><p>команда должна работать.</p>

<p>у меня был проблемный разреженный пакет, который утверждал, что 950 gib занято из 1024 gib (мой ssd всего 320 gib) = по размеру, чтобы этого не случилось). <code>hdi compact</code> не помогло.</p><p>я запустил "first aid" из дисковой утилиты как для пакета, так и для раздела, и это помогло - счетчик свободного пространства начал показывать реальные 20 gib как и должно быть, а затем <code>hdi compact</code> бежал без проблем.</p>

<blockquote> <p>возможно восстановление 0 байтов из 90,4 гб.</p> </blockquote><p>бьюсь об заклад, диск, который содержит разреженный комплект, имеет около 90 гб свободного места? поскольку разреженные пакеты часто могут увеличиваться до заполнения диска, об этом пространстве просто сообщается как о доступном свободном пространстве ... вы увидите те же цифры в дисковой утилите. очень обманчиво.</p><p>следующее может дать вам некоторое представление:</p><pre><code>hdiutil imageinfo image.sparsebundle </code></pre>