Все опции в одном месте
reloca.to работает вообще без опций: он читает обе машины и решает сам. Эта страница — для тех переездов, где одно из этих решений надо перебить. Всё это есть и в reloca.to -h на Live.
Командная строка
reloca.to [-n] [-y] [-i KEYFILE] [-d DISK] [-s STEP] [-o key=value]… [DONOR]. DONOR — это [root@]host[:port] старого сервера: в Live OS для off-line переезда или в своей системе для on-line. Режим определяется по ответу.
| Флаг | Что делает |
|---|---|
| -n, --dry-run | Печатать каждую команду и не менять ничего — ни на одной из машин. Состояние пишется в /run/reloca.to/dry/, поэтому настоящий запуск потом начинается с чистого. |
| -y, --yes | Отвечать «да» на все вопросы, включая тот, где надо ввести имя диска. Для скриптов; без терминала и без -y любой вопрос — это отказ. |
| -i KEYFILE, --key | ssh-ключ к старому серверу. Без него утилита делает сеансовый ключ и один раз спрашивает пароль. |
| -d DISK, --disk | Целевой диск на этой машине, когда их несколько: /dev/sda, /dev/nvme0n1, /dev/disk/by-id/…. Два диска через запятую вместе с -o raid=1. |
| -s STEP, --step | Выполнить одну фазу вместо всего переезда. Фазы идемпотентны: сделанное пропускается. |
| -o key=value, --option | Опции ниже, по одному -o на каждую. Неизвестный ключ отклоняется, поэтому опечатка не может тихо ничего не сделать; так же отклоняется строка, соединяющая две опции запятой. |
| -V, --version | Версия утилиты, путь к библиотеке и id сборки Live, на котором она работает. |
| -h, --help | Тот же справочник, в терминале. |
Фазы, которые можно запускать отдельно
Без -s утилита проходит их в этом порядке и спрашивает дважды: перед первой записью и перед переключением. С -s выполняется одна фаза — так повторяют упавшую фазу или смотрят план до того, как что-то произойдёт.
| Фаза | Что делает |
|---|---|
| plan DONOR | Только чтение: снять инвентарь обеих машин, записать /run/reloca.to/plan, напечатать сводку. На диски не пишется ничего. |
| check [PLAN] | Проверить план, поправленный руками, и отказать с причиной, если он не сработает. |
| apply | Разметка, LVM, swap, mkfs на этой машине — после того как вы прочитали, что на диске, и ввели его имя и размер. |
| transfer | Копирование томов: off-line — partclone и tar, on-line — reloca-agent проходами под нагрузкой. |
| postfix [ROOT] | В chroot на копии: fstab, mdadm, initramfs с новыми драйверами, grub, сеть. Каждая правка пишется в лог как diff. |
| verify [ROOT] | Десятки проверок, что копия загрузится: загрузочная запись, initramfs, cmdline, fstab, сеть. Код 3 означает «пока не перезагружайте». |
| cutover | Само переключение: старый сервер уходит из сети, новый поднимается как перенесённая система. |
| inventory [DONOR] | Сырые записи этой машины или донора: то, из чего строится план. |
| attach | Назад в запущенную сессию tmux после обрыва ssh, или хвост лога, если сессии нет. |
| cleanup | Убрать за утилитой: монтирования, активированные группы томов, пометки «только чтение», снимки предпроверки. |
Опции
-o key=value, и так для каждого ключа: -o compress=none -o patience=600. Запятая принадлежит значению (driver=mod1,mod2, console=ttyS0,115200), поэтому опции ею не соединяются, а строка, которая это делает, отклоняется. Значение по умолчанию выделено; ключ без значения по умолчанию не делает ничего, пока вы его не задали. «on-line» и «off-line» помечают ключи, относящиеся только к одному режиму.
| Опция | Значения | Что делает |
|---|---|---|
| Режим, канал и сжатие | ||
mode= | detected | online | offline | Какой режим использовать, не полагаясь на автоопределение. Донор отвечает либо из Live OS (off-line relocation), либо из своей работающей системы (on-line relocation). |
compress= | auto | zstd[:LEVEL] | lz4 | none | On-line: каждый кадр данных сжимается на доноре, а auto выбирает уровень (от 1 до 7) по скорости процессора донора и канала, которые измеряются по ходу копирования. Off-line: потоковый компрессор, по умолчанию lz4. none — для 10 GbE, где одно ядро сжимает медленнее, чем передаёт канал. |
cipher= | aes128-gcm@openssh.com | chacha20-poly1305@openssh.com | Шифр канала данных. chacha20 — для процессоров без AES-NI, там он быстрее. |
data=off-line | ssh | raw | Канал данных при off-line переезде: второй sshd на доноре или busybox nc под watchdog'ом для доверенного канала, где шифрование становится узким местом. |
sshd-port=off-line | 2222 | Порт sshd данных на доноре, если 2222 там уже занят. |
watchdog=off-line | 15 min | Минуты без прогресса на томе с data=raw, после которых передача убивается и повторяется: поток nc сам не заметит мёртвого собеседника. |
| Разметка нового сервера | ||
root= | auto | block | files | Как переезжает корень: блочно, если влезает в новый диск, или пофайлово в свежесозданную файловую систему. auto решает по размеру. |
label= | auto | gpt | dos | Таблица разделов нового диска. auto повторяет донора и превращает dos в gpt свыше 2 TiB или под UEFI. |
raid= | 1 | Два одинаковых диска нового сервера становятся парами md RAID1 послотно, с grub и ESP на обоих. -d /dev/sda,/dev/sdb называет их; если кандидатов ровно два, пара берётся сама. |
fsck= | quick | full | После блочной копии: проверка только для чтения (e2fsck -n, xfs_repair -n) или полный e2fsck -f на неизменённых томах. |
redo= | N | Сколько раз перезапускается упавший том: блочный — с нуля, пофайловый — после повторного mkfs. |
boot-part= | SIZE | Запросить отдельный слот /boot такого размера в начале диска для BIOS-цели свыше 2 TiB, где на доноре его нет. Пока не реализовано: фаза плана отказывает и говорит об этом. |
| On-line relocation | ||
chunk=on-line | 64K | Гранулярность трекера записей, степень двойки. Меньше — меньше данных придётся переслать следующим проходом и больше битовая карта в памяти донора. |
tracker=on-line | auto | bpf | ftrace | Как отслеживаются записи на доноре: программа eBPF на tracepoint блочного слоя или ftrace там, где ядро для неё слишком старое (CentOS 7). auto пробует bpf и отступает к ftrace. |
converge=on-line | 10 s | Та пауза, которую вы заказываете: агент пересылает дельты, пока оставшаяся не будет передаваться столько секунд или меньше на измеренной скорости, и тогда морозит. |
passes=on-line | 8 | Максимум проходов дельты. Агент сам поднимает этот предел, когда его измерения говорят, что ещё несколько проходов дадут заказанное окно и уложатся в бюджет терпения. |
patience=on-line | 1800 s | Сколько дополнительного копирования стоит более короткая пауза. Агент измеряет, как быстро донор пишет и как быстро несёт канал, печатает, сколько проходов и минут стоила бы более короткая пауза, и останавливается на этом бюджете, а не копирует всю ночь. |
max-est=on-line | 100 s | Самая длинная пауза, на которую этот запуск имеет право, когда дельты перестали уменьшаться: если оценка не больше — морозит, если больше — запуск отказывается, ничего не морозится, донор остаётся нетронутым. |
precheck=on-line | 1 | 0 | Перед настоящим переключением: заморозить, снять снимок копии, разморозить донора и прогнать доработку и проверку на этом снимке, пока донор работает дальше. Только потом догнать и заморозить по-настоящему. Стоит одного лишнего прохода дельты и находит незагружаемую цель, пока у вас ещё две машины. |
precheck-dir=on-line | /var/tmp/reloca.to | Где предпроверка держит copy-on-write файлы своих снимков. |
precheck-cow=on-line | 2G | Пространство copy-on-write на том для снимков предпроверки: в него должно поместиться всё, что доработка запишет в копию. |
verify-hash=on-line | 1 | С замороженным донором прочитать каждый том с обеих сторон ещё раз и сравнить sha256. Самая сильная проверка, и стоит она полного чтения обоих. |
stall=on-line | 300 s | Полная тишина от донора такой длительности считается зависанием: передача падает с сообщением, а не висит до утра. 0 — не сдаваться никогда. |
settle=on-line | 1000 ms | После закрытия каждой эпохи трекера ждать хотя бы столько записей, которые уже в пути, чтобы блок, поставленный в очередь до переключения, попал в правильный проход. |
cutover-port=on-line | 2223 | Порт на новом сервере, который замороженный донор опрашивает за последней командой. Донор подключается сам, поэтому не надо логиниться на сервер с замороженными файловыми системами. |
| Перенесённая система: загрузка и сеть | ||
nic= | eth0 | Имя, которое получит основной интерфейс на новом сервере. Перенесённая система привязывается к нему, поэтому её сетевая конфигурация работает, как бы ни звалась новая карта. |
donor-nic= | IFACE | Какой интерфейс старого сервера считать основным, если инвентарь не определил. По умолчанию — тот, что с маршрутом по умолчанию. |
nic-pin= | 1 | 0 | Записать правило udev, привязывающее eth0 к MAC загрузочного интерфейса нового сервера. Выключите для цели, чей MAC ещё изменится, например для ВМ, которую собираетесь клонировать. |
driver= | MOD[,MOD] | Дополнительные модули в initramfs перенесённой системы, когда автоопределения по modalias нового оборудования не хватает, чтобы добраться до корня. |
console= | ttyS0,115200 | Добавить serial-консоль в командную строку ядра перенесённой системы, чтобы сервер с BMC или серийным портом можно было смотреть при загрузке. |
bootorder= | pxe | local | Только UEFI: оставить PXE первым в NVRAM нового сервера (так он грузит Live, поэтому вторая попытка всегда возможна) или поставить диск первым. |
cloudinit= | disable | keep | Донор, поставленный из облачного образа, несёт cloud-init, который перепишет сеть при первой загрузке и может переименовать хост. disable отключает только его сетевую конфигурацию и работу с именем хоста; keep не трогает ничего. |
| Переключение и предохранители | ||
cutover= | netdown | poweroff | kexec | none | Что делает последняя фаза. netdown снимает донора с сети и перезагружает новый сервер в перенесённую систему; poweroff вместо этого гасит донора; kexec стартует перенесённое ядро без прохода через прошивку; none оставляет обе машины как есть и печатает то, что вы сделали бы руками. |
expect= | SERIAL | MAC | Донор обязан иметь этот DMI serial или этот MAC загрузочного интерфейса, иначе запуск останавливается, ничего не тронув. Защита от того, чтобы навести утилиту на чужую машину. |
force= | 1 | Пропустить два отказа: «инвентарь изменился с момента плана» и «эта цель уже перенесена». Оба существуют, чтобы недоделанный запуск не записал поверх сделанного. |
offline= | 1 | Работать без apt, на Live без доступа к зеркалу: документированная деградация, где XFS off-line отказывается совсем, а tmux и pv отсутствуют. |
raw= | DIR | Только -s inventory: сложить сырые файлы инвентаря в этот каталог. Так делаются тестовые фикстуры утилиты. |
Коды выхода
То, что получает оболочка. Важен код 3: диск уже записан, поэтому надо устранить причину и повторить проверку, а не перезагружаться.
| Код | Значение |
|---|---|
| 0 | готово |
| 1 | сбой во время работы, см. /run/reloca.to/log |
| 2 | окружение: не полный Live, сбой apt или ssh, донор — эта же машина |
| 3 | проверка не прошла: диск записан, не перезагружайте; устраните причину и повторите -s verify |
| 4 | план неосуществим или исправленный план отклонён; ничего не записано |
Если чего-то здесь нет или что-то непонятно — это ошибка этой страницы. Напишите нам, и мы её исправим.