Lonely Dreamer (sanmai) wrote,
Lonely Dreamer
sanmai

Categories:

Краткая заметка о переезде на bcache

SATA HDD

Напишу по свежей памяти о переходе на bcache под Debian "jessie".

На bcache я засматривался давно, но ждал того момента когда всё необходимое появится в штатных репозиториях Debian. В итоге дождался только ядра с нужным модулем, а утилиты собрал вручную и установил с помощью CheckInstall (наверное было можно умнее, но некогда было возиться).

Начальная ситуация: Система на двух дисках по терабайту в интеловском рейде. Есть два новых диска по два терабайта и mSATA SSD на 32GB.

Конечная ситуация: Система на двух дисках по два терабайта в интеловском рейде с корневым разделом, завернутым в bcache.

Шаг 1.

Собрал по офису "ненужные" SATA кабеля (ну кто сейчас смотрит DVD?), прикупил разветвитель питания для SATA дисков, подключил новые диски к портам контроллера. Это было просто.

Шаг 2.

С созданием нового массива пришлось повозиться. Ни официальная инструкция, ни Linux Raid Wiki толком не объясняли тонкостей наименования новых массивов. Всё заработало как только я поименовал контейнер и массив внутри /dev/md/ так:

mdadm --create --verbose /dev/md/imsm1 /dev/sd[de] --raid-devices 2 --metadata=imsm
mdadm --create --verbose /dev/md/xraid /dev/md/imsm1 --raid-devices 2 --level 1

Шаг 3.

Скопировать разделы на новый диск было проще простого:

sgdisk --backup=GPT /dev/md/raid
sgdisk --load-backup=GPT /dev/md/xraid 
sgdisk --randomize-guids /dev/md/xraid

Шаг 4.

Создать кешируемую сборку очень просто:

make-bcache -B /dev/md/xraid4 -C /dev/sdb

Но тут есть закавыка: если вы будете создавать кеш и хранилище отдельно, то модуль их автоматом подхватит и создаст полупустое кеширующее устройство захватив доступ к используемым в нём дискам с последующими ошибками вида:

Can't open dev /dev/sdb: Device or resource busy
Лечится это или ручным добавлением недостающих устройств в кеширующую сборку (как это сделать смотрите в документации), или удалением сборки и пересозданием заново одним махом. Удаление делается через sysfs:

echo 1 > /sys/fs/bcache/*-*-*-*-*/unregister 

Шаг 5.

Нужно убедиться что кеш-сборка видна из initramfs. Для этого нужно к строке загрузки ядра прямо из grub дописать break=init, затем проверить что файл сборки на месте. В моём случае его на месте не было так как bcache из одного SSD создается до инициализации mdadm. Помог такого скрипт в initramfs:

#!/bin/sh
#/etc/initramfs-tools/scripts/local-top/bcache
echo /dev/md/xraid4 > /sys/fs/bcache/register_quiet
exit 0
Нужно не забыть добавить этот скрипт и другие скрипты из пакета bcache-tool с помощью update-initramfs.

Шаг 6.

После всех тестов дописываем к строке загрузки break=premount в самом grub, инициализируем массивы в mdadm, подключаем кеш-сборку и копируем все разделы на новый диск с помощью dd.

mdadm --assemble --scan
echo /dev/md/xraid4 > /sys/fs/bcache/register_quiet
dd if=/dev/md/raid1 of=/dev/md/xraid1
dd if=/dev/md/raid2 of=/dev/md/xraid2
dd if=/dev/md/raid4 of=/dev/bcache0

Шаг 7.


Перезагружаемся без продолжения загрузки, отключаем старые диски, включаем питание... Из меню grub для нашего ядра указываем root=/dev/bcache0, затем дожидаемся окончания загрузки и наслаждаемся скоростью.

Про очевидные вещи такие как пересоздание swap-разделов и установку-настройку grub и initramfs я думаю говорить не стоит: если вы дошли до последнего этапа, то для вас это всё должно быть очевидно.
Tags: debian, howto, linux
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 11 comments