Оптимизация Mac OS X для SSD

Mac OS X на данный момент, к сожалению, не очень приспособлен для работы с SSD. Особенно остро эта проблема видна на неродных SSD - нет даже поддержки TRIM. В этом посте я постараюсь рассказать, как можно оптимизировать Mac OS X (на примере 10.7 Lion, но будет работать и на 10.6 Snow Leopard) для работы на SSD диске.

1. Включаем TRIM.

TRIM - это команда, которая позволяет освободить неиспользуемые блоки на SSD. Если ОС не использует TRIM, со временем SSD начинает работать медленнее.

(Notice: перед выполнением следующего шага проверьте что ваш SSD вообще поддерживает TRIM. Как правило на сайте производителя указано)

Странно, но (trollface) поддержка TRIM в Mac OS X есть только для SSD, выпущенных самим Apple. Если у вас SSD другого производителя, то прийдется скачать одну программу с говорящим названием TRIM Enabler, запустить ее, нажать Patch, дождаться конца операции и перезагрузиться. В случае успеха в программе System Information (раздел Serial-ATA) можно будет наблюдать TRIM Support: Yes.

2. Отключение гибернации.

Если батарея вашего мака крайне редко садится полностью (как у меня, например), то можно выключить режим гибернации. Время от времени Mac OS X записывает содержимое оперативной памяти на диск, и размер этого файла примерно равен количеству оперативной памяти. У меня, например, 8 GB RAM, и файл (/var/vm/sleepimage) весил чуть больше 8 гб. Это также позволит снизить количество операций записи на SSD. Все, что нужно сделать - открыть терминал и ввести две команды:

sudo pmset -a hibernatemode 0 
sudo rm /var/vm/sleepimage

Собственно, все.

3. Noatime!

atime (access time) - опция файловой системы, которая позволяет записывать последнее время доступа к файлу. Происходит это весьма и весьма часто - прослушивание музыки, игры, и так далее. Для SSD до сих пор рекомендуется этот параметр выключить, что позволит весьма сильно убавить количество операций записи на SSD.

Для начала скачайте этот файл и сохраните его под именем io.lex.noatime.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>io.lex.noatime</string>
        <key>ProgramArguments</key>
        <array>
            <string>mount</string>
            <string>-vuwo</string>
            <string>noatime</string>
            <string>/</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Затем откройте терминал и наберите (я подразумеваю что скачанный файл находится у вас в папке Downloads):

sudo cp Downloads/io.lex.noatime.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/io.lex.noatime.plist

Перезагрузитесь. Опять откройте терминал и введите

mount | grep " / "

В ответ должно выдать что-то вроде:

/dev/disk0s2 on / (hfs, local, journaled, noatime)

Если вы увидели noatime в этом списке, значит все прошло успешно.

4. Переносим /tmp в RamFS

RamFS - файловая система, которая обитает в оперативной памяти. Папка /tmp, в свою очередь, отвечает за хранение временных файлов. Так почему бы нам не использовать оперативную память для хранения этих файлов? Учитывая то, что система весьма часто пишет туда разную информацию, это поможет увеличить срок жизни SSD.

Для начала сохраните этот файл под именем tmp_ramfs.sh:

#!/bin/bash
ramfs_size_mb=256
mount_point=/private/tmp
 
ramfs_size_sectors=$((${ramfs_size_mb}*1024*1024/512))
ramdisk_dev=`hdid -nomount ram://${ramfs_size_sectors}`
newfs_hfs -v 'Volatile HD' ${ramdisk_dev}
mkdir -p ${mount_point}
mount -o noatime -t hfs ${ramdisk_dev} ${mount_point}
chown root:wheel ${mount_point}
chmod 1777 ${mount_point}

и скопируйте его в папку /usr/local/bin

Затем создайте файл io.lex.tmp_ramfs.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>io.lex.tmp_ramfs</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/tmp_ramfs.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

И переместите этот файл в папку /Library/LaunchDaemons

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

sudo -i
(введите ваш пароль)
cd /private/var
mv tmp tmp.old
ln -s ../tmp

Вот и все.