Оптимизация Linux под SSD

Твердотельные накопители становятся все доступнее и занимают все большую часть рынка. Вот и я решил заменить hdd c windows seven своего нетбука Lenovo IdeaPad S10-2 на c Ubuntu Netbook.

В этой записи я собрал нагугленные заметки по оптимизации работы на SSD для рабочей станции.

Разметка диска и файловая система

В первую очередь, нужно забыть про раздел подкачки, все прекрасно работает и без него. Для SSD лучше использовать не журналируемую файловую систему. Журнал нужен для того, чтобы, после пропадании электропитания, восстановить незавершенные транзакции — не потерять данные и оставить ФС целостной. Так как большинство SSD используются в ноутбуках/нетбуках, где присутствует батарея, пропадание электропитания практически невозможно, журнал не нужен. Я использую 100 Мб под /boot с ext2, 20 Гб как / с ext4 и все остальное под /home, так же с ext4. Файловую систему ext4 я выбрал так как она позволяет отключать журнал после создания файловой системы, делается это так:

 [email protected]:~$ tune2fs -o journal_data_writeback /dev/sda1 [email protected]:~$ tune2fs -O ^has_journal /dev/sda1 [email protected]:~$ e2fsck -f /dev/sda10 

Так же, для увеличения производительности, к опциям монтирования в fstab рекомендуется добавить:

 relatime,nodiratime,discard,commit=60 

Здесь у некоторых может возникнуть подозрение, что использование noatime эффективнее чем relatime. Это не так, relatime обновляет время доступа только при изменении файла или изменении времени доступа. Это нужно для нормальной работы некоторых программ, в том числе почтовых клиентов. Опция discard включает поддержку TRIM. Так же откладываем до раза в минуту запись изменений на накопитель commit=60.

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

 tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0 tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0 

I/O планировщик

Планировщик cfq, используемый по умолчанию в большинстве дистрибутивов лучше заманить на noop. Для этого к опциям ядра в конфиге загрузчика нужно добавить:

 elevator=noop 

Параметры ядра

Включаем «режим ноутбука» для подсистемы виртуальной памяти, в таком режиме, ядро будет откладывать запись на диск, пока в этом не появится неотложная необходимость. Кроме того повысим таймаут между сбросом буферов до 15 секунд:

 vm.laptop_mode = 5 vm.dirty_writeback_centisecs = 15000 

Firefox & Chrome

Временные файлы мы перенесли в оперативную память, но браузеры хранят свой кеш в домашнем каталоге пользователя, который у нас на SSD. Нужно либо переместить кеш с SSD, либо выключить его. Я выбрал последний вариант.

Для этого в адресной строке Firefox введем about:config и изменим параметр:

 browser.cache.disk.enable: false 

В Chrome немного сложнее, запретить кеш раз и навсегда нельзя, вместо этого нужно каждый раз запускать браузер с параметром —disk-cache-size=0:

 google-chrome --disk-cache-size=0 

Или создать alias:

 alias google-chrome='google-chrome --disk-cache-size=0' 

Кэш пакетных менеджеров

Так же может быть полезным вынести кэш менеджера пакетов в ОЗУ. Для deb-based дистрибутивов нужно добавить в fstab:

 tmpfs /var/cache/apt/archives tmpfs defaults 0 0 

Для rpm-based дистрибутивов нужно добавить в fstab:

 tmpfs /var/cache/yum tmpfs defaults 0 0 

UPD20130310: Обновлены обции монтирования, добавлен вынос кеша пакетных менеджеров в ОЗУ.