enwony: Переезд на SSD

В заметке приведены расчеты по износостойкости и описан процесс установки на LVM SSD ubuntu 11.10

Выбор железа

Выбирал что именно поставить недолго — я предпочитаю надежность скорости и на моем ноутбуке все равно есть только SATA-2, поэтому взял стабильный ширпотреб Intel 320 SSD 120Gb

Установил ssd в отсек DVD, т.к использовался он крайне редко.



Параметры ssd

По спецификации эта железка дает 270/130 Мб чтения/записи и малые задержки на чтение/запись (~0.1ms). Размер сектора для чтения — 4Кб, записи — 512К(128 секторов).

Из особенностей стоит отметить, что при проведении теста случайной записи при расширении границы случайной записи с 8Гб до 120Гб скорость записи падает до ~1.5Mb/s, так что скорость записи при реальной работе может быть меньше указанной.

Также, кэширование ввода/вывода в ядре требует перемещения скопированного блока из/в пользовательское пространство, и реальная скорость чтения в большинстве приложений будет меньше:

sudo hdparm --direct -Ft /dev/sdb = 258.56 MB/sec

sudo hdparm -Ft /dev/sdb = 174.65 MB/sec


Скорости отличаются, но максимум я получил 270Mb/s direct IO, 200Mb/s buffered



Ресурс записи

Мне, конечно же, хотелось бы, чтобы такие железки работали вечно 😉

Intel дает 3 года гарантии. Попробуем рассчитать время жизни накопителя (в МБ), из расчета 10000 записей в одну ячейку MLC. Так как блоки перезаписываются только по 512Кб, считаем количество количество блоков перезаписи:

112Gb / 512Kb = 223.5K блоков перезаписи, в каждый может быть записано 10000 раз по 4Kb..512Кб (минимум сектор — максимум полностью), имеем: 223.5K * 1000 * (4..512)K ~ 872G(1..128), на один день за три года приходится ~0,8G(1..128), т.е на вскидку, от гигабайта до 100.

При переводе в SMART атрибут 241 (Host_Writes_32MiB) это получается от 32 до 3200 в день.

Учитывая, что гигабайт в день — это не сильно много (у меня типично 5Gb), становится понятна необходимость настройки системы.



Подготовка к установке

Загружаемся, например, с live DVD/USB ubuntu, хотя подойдет почти любой современный linux-based дистрибутив.

Не во всех дистрибутивах ubuntu поставляется lvm, поэтому установим его (ubuntu):

# sudo apt-get update && sudo apt-get install lvm2

В моем случае ssd встал на устройство /dev/sdb, привожу команды с учетом этого.



Подготовка дисков

Таблица разделов:

В первую очередь необходимо разбивать диск с учетом выравнивания в 512Кб, или, лучше 1М (уже почти стандарт), используем fdisk, начало любого раздела должно быть кратно 2048:



# sudo fdisk -l /dev/sdb

Диск /dev/sdb: 120.0 Гб, 120034123776 байт

255 головок, 63 секторов/треков, 14593 цилиндров, всего 234441648 секторов

Units = секторы of 1 * 512 = 512 bytes

Размер сектора (логического/физического): 512 байт / 512 байт

I/O size (minimum/optimal): 512 bytes / 512 bytes

Идентификатор диска: 0x0006b910

Устр-во Загр Начало Конец Блоки Id Система

/dev/sdb1 * 2048 264191 131072 83 Linux

/dev/sdb2 264192 234440703 117088256 8e Linux LVM




Первый раздел предназначен для загрузки, второй — LVM

LVM просто отличная система для SSD, так как на дисках «размазывание» раздела по диску приводило к падению производительности, а на SSD такого происходить не будет (по крайней мере при чтении)

Изначально планировалось настроить и шифрование, но тесты показали, что скорость будет неважной (скорость падала до 120-160Гб/с, в зависимости от алгоритма), поэтому без аппаратного ускорения делать не стоит.



Настраиваем lvm

создаем физический том, выравнивание на мегабайт

# sudo pvcreate /dev/sdb2 --dataalignment=1M



создаем группу томов с именем ssd

# sudo vgcreate ssd --physicalextentsize 4M /dev/sdb2



создаем логические тома внутри группы

# sudo lvcreate -L 4G -n swap ssd

# sudo lvcreate -L 12G -n root ssd

# sudo lvcreate -L 80G -n home ssd




Форматируем разделы:

Используем ext4 (btrfs все еще нестабильна и восстанавливать данные с ext4 проще):



-E stride=128,stripe-width=128 — говорит выравнивать структуры данных на границу 128 блоков по 4К

-b 4096 — точно укажем размер блока данных

-m 0 — не резервировать место для root-файлов



# sudo mkfs.ext3 -L Boot -E stride=128,stripe-width=128 -b 4096 -m 0 /dev/sdb1

# sudo mkfs.ext4 -L Home -E stride=128,stripe-width=128 -b 4096 -m 0 /dev/ssd/home

# sudo mkfs.ext4 -L Root -E stride=128,stripe-width=128 -b 4096 /dev/ssd/root

# sudo mkswap /dev/ssd/swap




Устанавливаем ubuntu

На этапе разбиения необходимо указать соответствующие точки монтирования:

/dev/ssd/root = /

/dev/ssd/home = /home

/dev/sdb1 = /boot



Настройка после установки

После установки в новой системе необходимо выполнить оптимизацию:

(можно это сделать до перезагрузки в новую систему, если примонтировать новосозданные разделы)



TRIM+noatime

для оптимизации быстродействия и минимизации записи добавить в /etc/fstab для root, home параметры discard,nodiratime,noatime:

/dev/mapper/ssd-root / ext4 discard,nodiratime,noatime,errors=remount-ro 0 1

/dev/mapper/ssd-home /home ext4 discard,nodiratime,noatime,defaults,user_xattr 2




tmpfs

Можно вынести некоторые пути в память: (тот же /etc/fstab, добавляем строки)

tmpfs /tmp tmpfs defaults 0 0

tmpfs /var/lock tmpfs defaults 0 0




Оптимизируем ядро

создаем файл /etc/sysctl.d/60-ssd-optimization.conf:

# сбрасывать кэш только каждые 150 секунд, если не нужно чаще

vm.laptop_mode=5

vm.dirty_writeback_centisecs = 15000

# Дольше ждать перед включением своппинга, только тем, у кого памяти > 2G

vm.swappiness = 10




Noop планировщик

Устанавливаем простой планировщик на ssd — в файл /etc/rc.local добавим до строчки exit 0:

echo noop > /sys/block/sdb/queue/scheduler

http://enwony.blogspot.com/2012/01/ssd.html

Губарь Маргарита Александровна