Усі опції в одному місці
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 | Додати серійну консоль у командний рядок ядра перенесеної системи, щоб сервер із 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 | план нездійсненний або виправлений план відкинуто; нічого не записано |
Якщо тут чогось немає або щось незрозуміло — це помилка цієї сторінки. Напишіть нам, і ми її виправимо.