Настройка Ubuntu для работы на SSD диске

В этой заметке я хочу поделиться практическим опытом настройки Ubunntu 10.10 для работы с SSD диском. В интернете есть довольно много информации на эту тему, но иногда она противоречивая, иногда уже неактуальная, так что думаю эта статья пойдёт на пользу людям, админящим сервера под Ubuntu Server.

Swap?

Очень интересно было узнать, а нужно ли использовать swap при имеющемся ssd диске? После обсуждения на хабре, мне показалось, что лучше всего выделить небольшой относительно объема RAM (порядка 4 Гб) swap раздел. А потом помониторить, как часто система сваппится на диск.

Выбор файловой системы

Для SSD необходимо использовать нежурналируемую файловую систему, для предотврещание нескольких операций записи на одни и теже данные. Можно использовать ext2 или ext4 (но с откюченным журналом). Будем использовать ext4.

Опции монтирования

Для ext4 в fstab пропишем следующие опции:

noatime,nodiratime

Если в fstab есть что-то вида errors=remount-ro 0, то опции пишем перед этим параметром.

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

Отключение журналирования

Журналируемые фс, делают лишние циклы записи, поэтому журнал нужно отключить. Загружаемся с LiveCD, отключаем журналирование:

sudo tune2fs -o journal_data_writeback /dev/mapper/isw_diggaehgjc_Volume03

Проверяем,

sudo tune2fs -l /dev/sda1

Этот метод череват тем, что можете потерять некоторые данные при неожиданном выключении системы, например если у вас неожиданно отключилось питание(мне это не грозит, поскольку у меня ещё батарея есть). Сервер же находится в дата-центре, и подключен к источнику бесперебойного питания.

Монтирование временного каталога в память

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

tmpfs /tmp tmpfs defaults 0 0

Планировщик ввода-вывода

Для обычных жестких дисков по умолчанию используется логика, которая упорядочивает движение головки под диску, изменяя последовательность записываемых данных. Для SSD это не нужно, поэтому будет весьма разумно выбрать noop в качестве i/o scheduler’а. Это можно сделать выбрать непосредственно в конфиге ядра или передать опцию elevator=noop через груб на этапе загрузки ядра. Или даже через /sys. В Ubuntu 10.10 в файле /etc/default/grub добавляем параметр elevator=noop в параметры ядра.

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash i8042.nopnp=1 elevator=noop”

Затем делаем sudo update-grub.

Отложенная запись

SSD может пребывать только в 2-х режимах – active и suspend. Когда он active – он кушает много энергии, когда в suspend – мало. Поэтому сейчас увеличиваем время нахождения SSD в suspend режиме:
Добавляем параметр в /etc/sysctl.conf.

vm.laptop_mode=5<.blockquote>

Работая в таком режиме, ядро будет по возможности откладывать запись на диск, пока в этом не появится неотложная необходимость. Все буферы, требующие сброса себя на диск, будут терпеливо ожидать своей очереди. Увеличить перерыв между записями на диск можно также с помощью поднятия таймаута между сбросом «грязных» буферов (части файлов, измененные программой или пользователем, но еще не записанные на диск). По умолчанию, таймаут равняется 5 секундам, увеличим его до 150. ВНИМАНИЕ: Внезапное выключение ноутбука в этот таймаут приведет к потере незаписанных данных!
Добавляем в /etc/sysctl.conf строку:

vm.dirty_writeback_centisecs = 15000

Ссылки

http://openkazan.info/Linux-SSD

http://habrahabr.ru/qa/3303/

13 Comments

    1. Да, совершенно верно. Спасибо, добавил в статью.

      # If you change this file, run ‘update-grub’ afterwards to update
      # /boot/grub/grub.cfg.

  1. По поводу “Проверяем, sudo tune2fs -l /dev/sda1” – какой ответ команды будет означать, что журналирование сведено к минимуму? Там простыня на целый экран выдается. Может grep стоит сделать по какому-то значению?

    1. Там в разделе “Default mount options:” должен быть параметр “journal_data_writeback”

      andrey@z11:~$ sudo tune2fs -l /dev/disk/by-uuid/61e78666-c82a-40d7-b0fa-63b54d8c558d | grep “Default mount options”
      Default mount options: journal_data_writeback

  2. А как лучше настроить elevator=noop если помимо системного ssd-диска есть ещё и обычный? Или лучше просто её не включать?

    1. Если SSD – системный диск (с него монтируется корень), то лучше включить. Если системный диск – HDD, то лучше не включать.

      Планировщик NOOP представляет собой простую очередь “Первый вошел – Первый вышел” (FIFO) и использует минимальное количество команд CPU на одну операцию ввода/вывода, выполняя простые операций объединения и сортировки. Подразумевается, что производительность системы ввода/вывода оптимизируется на уровне блочного устройства (память-диск) или при помощи интеллектуального HBA или внешнего контроллера.

      См. http://www.rhd.ru/docs/articles/schedulers/

  3. А какой смысл добавлять задержку при сбросе буферов на диск? Ведь количество записываемой информации всё равно получается таким же (или я не прав?), и, следовательно, нет разницы, запишется всё за один приём или за десять.

    1. Да, но информация может измениться. Без буферизации количество операций записи будет бОльшим.

Leave a Reply to Василий Петров Cancel reply