LVM Cache на SSD

2017-01-04

Современные ноутбуки, даже многие бюджетные модели поставляются либо с встроенным “маленьким SSD” помимо основного HDD, либо со слотом для установки оного.

Во многих случаях производитель создает RAID где-то глубоко в биосе, который объединяет между собой быстрый твердотельный диск и обычный HDD. Но вот например на моём ноутбуке система просто видела два диска, так что “возможны варианты”.

В принципе, идея не нова и “на поток” эту технологию поставила Apple с их Fusion Drive, который был успешно повторен энтузиастами. Правда, особого развития, на мой взгляд, технология не получила, да и “новые инновационные ноутбуки” с двумя дисками частенько оказываются в сервисе с диагнозом “поломка жесткого диска”, но мы-то знаем, что этот самый супер-raid тупо развалился из-за кончины SSD.

Особо упоротые, правда пытаются такое чинить…

разобрать SSD

Но это их личное горе.

Короче, к чему это всё. К тому, что данную инновацию в Линуксе можно и нужно заставить работать на себя, а именно - установить этот гребаный пингвинарий на LVM-диск и прикрутить к нему кэш!

Если у кого-то в системе 2 диска, можно сразу читать, как это работает. Для остальных - решительно лезьте в биос и отключайте этот проклятый RAID. Как - не имею понятия, это зависит от биоса вашего ноутбука, прямоты рук и фазы луны. Будем надеяться, что у вас всё получится.

Предположим, система у нас уже благополучно установлена на LVM-диск, команда mount выдает следующее:

/dev/mapper/vg0-root on / type btrfs (rw,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache,subvolid=5,subvol=/)

Том, который используется у меня для файловой системы именуется “root” и расположен в группе томов “vg0”. В принципе, почти все современные дистрибутивы в “инсталляторе” умеют делать такое (устанавливать систему на LVM), а некоторые делают это вообще по дефолту.

Сам SSD видится в моей системе вторым диском (/dev/sdb).

Disk /dev/sdb: 29.8 GiB, 32017047552 bytes, 62533296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5EFAE4B4-A884-40B6-8723-5DECC274F9A3

Device Start End Sectors Size Type /dev/sdb1 2048 62533262 62531215 29.8G Linux LVM

Потребуется единственная партиция, размером на весь диск. Её нужно пометить типом “Linux LVM”.

Дальше 5 команд с комментариями, которые и создадут нам кэш.

  • vgextend vg0 /dev/sdb1 - расширяем основную группу томов
  • lvcreate -L 32M -n lv_cache_meta vg0 /dev/sdb1 - создаем том в 1000 раз меньше, чем наш кэш. Это метаданные, ну и называем его соответственно.
  • lvcreate -L 29G -n lv_cache vg0 /dev/sdb1 - создаем непосредственно том с кэшем.
  • lvconvert --type cache-pool --poolmetadata vg0/lv_cache_meta vg0/lv_cache - связываем наши метаданные с кэшем
  • lvconvert --type cache --cachepool vg0/lv_cache vg0/root - включаем кэш для для тома “root”

Если всё хорошо, видим сообщение:

Logical volume vg0/root is now cached.

Теперь ваша файловая система кэшируется. Но это ещё не всё. Как и любой кусок opensource-говна, его ещё нужно допилить.

Я пользуюсь Arch и обязательно нужно добавить несколько модулей в mkinitcpio.conf для создания начального рамдиска - то есть рассказать системе, что у нас есть кэш на момент загрузки.

MODULES="i915 btrfs vfat crc32c dm_cache dm_cache_mq dm_cache_smq"

В раздел HOOKS нужно добавить lvm2, хотя скорее всего он там уже будет. Ну и конечно образ нужно пересоздать:

# mkinitcpio -p linux

Возможно, в других дистрибутивах нужно будет похимичить с grub.

Следующий шаг - добавим “issue_discards = 1” в секцию “devices” файла /etc/lvm/lvm.conf, чтобы включить trim на lvm.

В принципе, всё должно работать. Если вдруг упомянутый кусок opensource-говна решил пойти вразнос, то лучше этот самый кэш отключить. Это, кстати нужно, если вы пытаетесь подмонтировать ваш диск с rootfs в каком-нибудь live-дистрибутиве.

Короче, отключить всю эту содомию с кэшем тоже просто:

lvremove vg0/lv_cache lvremove vg0/lv_cache_meta vgreduce vg0 /dev/sdb1

Если делаете это при загрузке с live-usb/cd/dvd - будьте внимательны и смотрите, какие буквы диска используются, а то удалите корневой том по ошибке.

Вот такой вот могучий костыль. Есть другие варианты кэширования, но, похоже, lvm-кэш самый распространенный и поддерживаемый. И да, реальный прирост скорости чувствуется, особенно при загрузке. К сожалению, аналогов под Windows 10 я лично особо и не знаю.

P.S. с этого Arch’a нужно слезать и как можно быстрее.


В массы

В трубу