Home > Hardware, Linux > Установка и настройка/оптимизация SSD Linux

Установка и настройка/оптимизация SSD Linux

Итак, Дамы и Господа – наконец-то я поставил в свой маленький eee pc SSD диск 🙂 Прежде чем узнать, как его максимально оптимизировать в среде Linux, пришлось изрядно помучаться.

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

Главный минус этих носителей, и, к сожалению, минус пока большой – необходимо избегать очень частого обращения к диску с частой записью мелких файлов. По сравнению с HDD, у SSD размеры кластеров намного больше, соответственно, запись небольшого лога потревожит целый кластер. Ярый пример – запись логов в Linux, журналирование файловой системы и остальные подобные вещи. Соответственно, наша с Вами задача сократить количество обращений к диску. Итак, поехали:

1) Самое главное, от чего надо отталкиваться – это команда TRIM. Для ее поддержки необходимо ядро, не старше чем 2.6.3.3. Если ядро более старое – то придется ставить ядро поновее. Как это сделать в Debian Squeeze – можно прочитать здесь. Если все условия соблюдены – необходимо отредактировать файл /etc/fstab:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/sda1 during installation
UUID=eb07b6cb-e4ed-47a7-9518-19272a91a01a /               ext4   noatime,nodiratime,discard,errors=remount-ro 0	1
# SWAP-раздел на флешке
UUID=93c7ee68-a625-44d6-b1ec-5fc1c55e1e57 swap            swap defaults 0	0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
# Кеш браузера google-chrome на tmpfs
tmpfs /home/erdees/.cache/google-chrome tmpfs size=1000M,mode=0777 0 0
# Остальные разделы и директории, перенесенные в tmpfs
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
#tmpfs /var/log tmpfs defaults 0 0
erdees@erdees-netbook:~$

Самое главное в этом конфиге – это включение TRIM. За его включение отвечает параметр discard. Если присмотреться, то там же рядом можно найти параметры noatime и nodiratime – первый отключает обновление время доступа к файлам, второй – отключает  запись время доступа к каталогам. Таким образом, мы включили TRIM и немного снизили количество записи на SSD.
Как видно, все директории, в которых происходят частые циклы чтения/записи находятся в tmpfs (tmpfs – это виртуальная файловая система, которая находится в оперативной памяти), куда помимо tmp, var и прочего перенесен кеш браузера google-chrome. Для других браузеров строчка в fstab отличасться практически не будет – главное, это перенести папку с кешем в tmpfs. Что касается строчки со SWAP-разделом на флешке – то мы пока его не трогаем.

2) Момент второй – файловая система должна быть либо ext4, либо btrfs. Другие не поддерживаются. SWAP-раздел рекомендовано отключить, либо использовать на другом диске/носителе. Как правило, на современных ноутбуках и нетбуках оперативной памяти всегда хватает и своп не задействован, но иногда туда может сыпаться куча мелочи. Например, у меня SWAP висит на SD-флешке, увидеть это можно в приведенном выше fstab. Но об этом позже. Если Вы ставили систему со свопом, то пока просто закомментируйте строчку.

3) Необходимо убедиться, работает ли TRIM. Есть два способа сделать это. Однако первый не 100% точный и у меня не прокатил.

Способ первый:

Создаем при помощи утилиты dd файл:

dd if=/dev/urandom of=tempfile count=10 bs=512k oflag=direct

При успехе увидим вывод:

10+0 записей считано
10+0 записей написано
 скопировано 5242880 байт (5,2 MB), 2,17641 c, 2,4 MB/c

Далее ищем стартовый LBA созданного нами файла:

root@erdees-netbook:/home/erdees/new# hdparm --fibmap tempfile

tempfile:
 filesystem blocksize 4096, begins at LBA 2048; assuming 512 byte sectors.
 byte_offset  begin_LBA    end_LBA    sectors
           0    2886656    2888703       2048
     1048576    2983936    2985983       2048
     2097152    2979840    2983935       4096
     4194304    2992128    2994175       2048

После делаем поиск по begin_LBA:

hdparm --read-sector [номер сектора] /dev/sda

Увидим примерно такой вывод:

fd51 270e 3ea6 6a69 694e 48cf ed26 fa8f
c124 ffc6 5a04 7d60 cbc2 0954 d2ca eff4
d645 8e75 c58b 3b94 adfd 2221 dfd0 20d8
e433 1e3c fcff f265 e899 4694 c4b3 6d0b
6016 be75 b076 23a2 01dc c7dd 6340 2991
06fe 4494 1a7e e2ae 4048 8c9b e3ec 9edf
0e0d 5726 3942 a154 1919 52ec b58e 410a
ba61 f8bb 4811 54fc 95c5 5096 aae7 1670
423c 2aa4 0a48 6e1f de3d 6661 3f6d 2a3a
e9e6 a082 b72a 87c9 2fa1 7a8b 9b97 1db6

Теперь удалим файл:

rm tempfile

Выполняем синхронизацию:

sync

Теперь выполнил команду hdparm –read-sector [номер сектора] /dev/sda снова, после чего вместо предыдущего вывода секторов, у Вас должны появится только нули. Однако у меня это не проканало, к сожалению. Способ проверки очень наглядный, однако sync не гарантирует синхронизацию фс.

Способ второй – это всего лишь одна команда:

root@erdees-netbook:/home/erdees/new# hdparm -I /dev/sda |grep TRIM
	   *	Data Set Management TRIM supported (limit unknown)

Соответственно, наличие надписи supported означает, что TRIM поддерживается, а звездочка слева – то что он в данный момент активирован. Так-то.

4) Еще парочка конфигов и рекомендаций. Я настроил отложенную запись. То есть все процессы в системе пишутся в tmpfs, а когда придет заданное время – то обращаются уже к диску. Добавляем строчки в /etc/sysctl.conf

vm.laptop_mode=5
vm.dirty_writeback_centisecs = 15000

На этом с sysctl всё. Еще я бы посоветовал выключить планировщик ввода-вывода, так как он не способен работать с SSD. Заходим в конфиг GRUB, /etc/default/grub, и заменяем строчку

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

на

GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop"

И еще один выкрутас с GRUB: я отключил задержку при выборе ядра при включении системы, дабы сократить время включения нетбука. Редактируем файл /boot/grub/grub.cfg и параметр

set timeout=5

Делаем равным “0”. Так же я включил автоматический вход в систему. Одним словом, система с момента прохода POST, грузится 5-7 секунд, выключается всего за 4 секунды.

5) Следим за интенсивностью чтения/записи с диска. В этом мне помогла замечательная утилита – iotop. Устанавливаем ее:

aptitude install iotop

И запускаем командой iotop от root. Утилита выглядит точно так же, как и обычный top, однако, выводит информацию о процессах записи/чтения с диска.

Вот в принципе и все, что я пока накопал про SSD-диски под Linux. Так же в сети ходило много информации про отключение журналирование файловой системы. Если это сделать, то можно хорошо сократить количество циклов записи на диск. Однако, я считаю, что это немного рискованно: во-первых, при неправильном отключении журналирования можно потерять TRIM, во-вторых – при отключении питания, можно потерять важные данные.

Categories: Hardware, Linux Tags: ,