Напишу по свежей памяти о переходе на 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 я думаю говорить не стоит: если вы дошли до последнего этапа, то для вас это всё должно быть очевидно.