FullScreenSoftware

iOS Apps developer

Previous Entry Share Next Entry
HFS+ сжатие
FullScreenSoftware orange
fullscreensw
Может кому-то пригодится. Статья написана по материалам с MacRumors и MacWorld (оба материала написаны пользователем brkirch, он в свою очередь опирался на Ars Technica's Snow Leopard review). Те люди, которые пользовались Windows с файловой системой NTFS знают, что у папки (файла) можно было установить атрибут compressed (сжатый), после этого средствами ОС происходило сжатие всех файлов помещаемых в эту папку (сжатие файла). Причем с точки зрения пользователя это были совершенно "обычные" файлы, т.е. архивация/разархивация происходила незаметным для пользователя способом. Что-то подобное можно сделать и под Mac OS X, с некоторыми отличиями: новые файлы в сжатом каталоге не будут архивироваться автоматически (есть платные программы, которые умеют это делать, например Clusters от LateNiteSoft (раньше эта программа называлась Squeeze) или HDCleanUp) и некоторые файлы больше 20МБ не будут архивироваться. Я старался писать как можно проще и понятней.

В Mac OS X используется разные файловые системы. Файловая система HFS (так же она называется Mac OS Extended) позволяет делать Transparent compression/HFS compression (в русской википедии это переведено как Фоновая компрессия) в Mac OS X, начиная с версии 10.6 (Snow Leopard). Это функциональность используется Apple, чтобы сделать размер дистрибутива Snow Leopard меньше. Однако, пользователи могут её использовать и для сжатия своих файлов. Ниже описано как это сделать.

Узнать о версии своей ОС можно, кликнув на яблоко (apple menu) в системном меню и выбрав пункт "About This Mac" появившегося меню. В окне с информацией про ваш Mac можно увидеть версию ОС. Узнать о типе файловой системы можно с помощью утилиты Disk Utility. На этой картинке показано где смотреть тип файловой системы.

К сожалению, доступ к этой функциональности гораздо труднее чем в Windows, где в свойствах папки нужно всего лишь выставить галочку у Compress contents to save disk space. Придется использовать утилиту Terminal. Более того, даже чтобы узнать сжат ли файл или нет, необходимо использовать сторонние утилиты. Finder показывает свободное место на диске с учетом сжатых файлов, т.е. если вы сожмете какую-нибудь большую папку, то Finder покажет увеличение свободного места на диске. Я читал про два бесплатных способа (платные программы перечислены выше) использования HFS сжатия. Можно воспользоваться встроенной утилитой ditto и небольшой бесплатной программой afsctool.

Утилита ditto (полное описание) используется для копирования каталогов, создания и распаковывания архивов. У этой утилиты есть опция --hfsCompression, которая позволяет сжимать файлы при копировании на HFS тома. В документации есть предупреждение, что эту функциональность лучше не использовать на пользовательских файлах, потому что эти файлы не будут читаться на версиях Mac OS X ниже 10.6 (Snow Leopard) - Since files using HFS compression are not readable on versions of Mac OS X earlier than 10.6, this flag should not be used when dealing with non-system files or other user-generated content. Чтобы сжать файлы, придется их скопировать утилитой ditto. Для этого нужно выполнить в командной строке Terminal следющую команду:
ditto --hfsCompression исходный_каталог новый_каталог_со_сжатыми_файлами
пример:
ditto --hfsCompression /Users/alien/moo /Users/alien/moo_new
Если каталог успешно скопирован (а файлы сжаты), то можно удалить исходный каталог и переименовать новый в старый:
mv /Users/alien/moo_new /Users/alien/moo
Имена папок можно не набирать вручную, а просто перетащить из Finder в Terminal, имя папки будет впечатано туда где стоит курсор.

Гораздо удобнее пользоваться утилитой afsctool. Автор ее - как раз brkirch. Запускать ее можно тоже из Terminal. Можно использовать либо полный путь до неё (например), либо скопировать эту программу в каталог для остальных утилит и запускать просто по имени. Скопировать можно так:
sudo cp полное_имя_программы /usr/bin/
(картинка для моего случая) sudo запросит пароль администратора, это нужно, чтобы получить доступ на запись в папку /usr/bin.
Если запустить afsctool без параметров, то программа выведет справку по своим параметрам. Параметров много, я напишу только про самые важные: сжать папку(файл) и вывести информацию о сжатых файлах. Еще раз хочу напомнить: имена папок (или файлов) можно не набирать вручную, а просто перетащить папку из Finder в Terminal, имя папки будет впечатано туда где стоит курсор.
1. сжать папку с файлами или файл:
afsctool -c -9 имя_папки_или_файла
параметер -c (внимание: это не русская буква С) - собственно указание программе сжать папку/файл, параметр -9 - это степень сжатия (1 - самое быстрое сжатие, 9 - самое медленное, но лучшее сжатие). Например, вот так я сжимаю папку /Developer:
Macintosh:~ alien$ afsctool -c -9 /Developer
2. вывести информацию о сжатых файлах:
afsctool -v имя_папки_или_файла
(например, видим, что моя папка /Developer ужалась в два раза, сэкономлено почти 6ГБ места)
3. вывести список сжатых файлов в каталоге:
afsctool -lv имя_папки
(например, видим, что в папке futurama было сжато четыре файла и что 58.6% места было сэкономлено).

Качество HFS сжатия вполне сравнимо (похуже на 1-2 процента) с качеством сжатия стандартной командой Compress.

В заключение могу добавить, что HFS сжатие помогает не только высвободить место на диске (сейчас нехватка места на винчестере довольно редко встречается, за исключением SSD дисков), но также помогает ускорить запуск программ, потому что мощность процессоров настолько велика, что разархивация относительно небольших по размеру файлов занимает гораздо меньшее время, чем чтение с диска "лишней" части этого файла.

?

Log in