Что хранится на диске
Копии сервера на готовом образе описаны в разделе «Свой сервер в вузе»; здесь — установка на k3s и занятие на своём компьютере. Стандартный k3s-instance использует /var/lib/colloq/data и /var/lib/colloq/workspace. Рядом находятся приватная конфигурация, постоянные секреты и сведения о выпусках. Local PV переживают замену Pod, но не потерю диска или удаление VM.
Переносимый архив включает SQLite, всё дерево data/, workspace, конфигурацию, ключи приложения и runtime, release/catalog и контрольные суммы. В него входят данные соревнований и скрытые ответы из data/competitions/, wheel-артефакты, manifests и lock-файлы наборов из data/dependencies/, а также файлы страниц занятий из data/page-files/. Он содержит секреты: храните его приватно и вне исходной машины. Слои контейнерных образов в архив не входят, поэтому registry должен сохранять нужные digest.
Сохранённая ревизия окружения или Docker image ID не содержит байтов образа. Сохраняйте каждый базовый образ, на который ссылаются сохранённые посылки и наборы пакетов. Если образ есть только в локальном хранилище Docker, отдельно экспортируйте его через docker image save до удаления исходной машины, а при восстановлении импортируйте через docker image load. Проверьте через docker image inspect точное совпадение ID с ревизией и поддержку платформы образа на новой машине. Для образов из registry сохраните указанный digest и доступ для скачивания. Пересборка списка пакетов или повторное использование тега не гарантирует прежнее окружение.
Выберите режим копии
| Режим | Поведение | Цена |
|---|---|---|
consistent | Останавливает приложение, брокер и все ядра до копирования. | Перерыв в работе; память Python теряется. |
live | Снимок SQLite и независимое копирование изменяющихся файлов. | Не атомарный снимок базы и workspace; меняющиеся файлы могут сорвать копирование. |
sudo env MODE=consistent scripts/backup.sh
# После проверки копии возобновите работу явно:
sudo scripts/cluster.sh start
# Либо копирование во время работы:
sudo env MODE=live scripts/backup.shАрхив сохраняется в backups/colloq-<время>-<режим>.tar.gz каталога инструментов, а именованная копия — в backups/<NAME>/; другой путь задаёт OUT=. Consistent-копия по умолчанию оставляет запись остановленной; с RESUME=1 приложение запускается сразу после успешной копии. При ошибке копирования сначала выясните причину; не запускайте работу автоматически. Для удалённой Vast VM, установленной из выпуска, используйте vast-sync с тем же RELEASE=…, что и при vast-up: без RELEASE Makefile выбирает прежний путь vast-legacy.sh, который снимает копию старого формата.
Восстановление на Linux
Используйте доверенный архив, соответствующее имя окружения и явно совместимый выпуск. На подготовленном целевом сервере выполните из каталога его инструментов:
sudo scripts/cluster.sh prepare --release /path/release.json
sudo bash scripts/restore.sh \
--archive /path/colloq-consistent.tar.gz \
--release /path/release.json --replace
sudo scripts/cluster.sh prepare --release /path/release.json
sudo scripts/cluster.sh startПример выше соответствует копии без заданного NAME. Для именованной копии добавьте такое же имя при восстановлении, например sudo env NAME=hse bash scripts/restore.sh …. Имя должно совпадать с архивом. --replace явно разрешает замену существующих деревьев; даже начальный prepare создаёт секреты и конфигурацию. Инструменты сначала проверяют архив и совместимость, останавливают всех писателей, затем устанавливают целые деревья. Предыдущие деревья сохраняются приватно в replaced-…; не удаляйте их до проверки восстановления.
Повторный prepare согласует восстановленные runtime-секреты и старые ревизии каталога. На этом шаге не передавайте новый --env-file, если не собираетесь сознательно заменить восстановленную конфигурацию.
Проверьте результат
- Открываются ожидаемые комнаты и старые ссылки преподавателей и студентов.
- Тетради, публикации, данные и файлы соответствуют выбранной копии.
- Данные соревнований, скрытые ответы и наборы пакетов на месте; старая посылка исполняется со своим сохранённым базовым образом и набором.
- Две комнаты исполняются независимо, а ядра используют нужные ревизии.
- В GPU-окружении проходит реальная CUDA-операция.
- С исходной машины можно восстановиться даже после потери её диска.
Проверка контрольных сумм и SQLite quick_check обязательна для целостности, но не заменяет проверку материалов и рабочего сценария.
Если восстановление прервалось
Незавершённая операция оставляет .restore-in-progress. Пока она не завершена, запуск и изменение deployment блокируются. Повторите восстановление тем же проверенным архивом с --recover --replace, либо, при работе из полного checkout, через make с RECOVER=1 REPLACE=1. Не удаляйте маркер вручную, чтобы обойти защиту.
Явное восстановление может вернуть удалённые комнаты: оно согласует файлы с постоянными runtime-резервациями удалённых ID. Обычные start/stop/update эти резервации не сбрасывают.
Старые форматы и k3s
make restore-legacy DB=old.db FILES=old-files.tar.gz предназначен для старого локального формата и отвергается поверх установленного кластера. Миграция старого сервиса требует отдельной проверки схемы и каталога.
Backup Colloq не является backup datastore k3s. Перед изменением версии k3s сохраните его datastore и server token отдельно по документации k3s.
Занятие на своём компьютере
Если Colloq установлен через pip install colloq, копию снимает colloq backup. Она сохраняется двумя файлами в ~/.colloq/backups/: colloq-<дата>-<время>.db и colloq-<дата>-<время>-files.tar.gz. В копию входят база, файлы занятий, файлы страниц занятий из data/page-files/, data/competitions/, data/dependencies/, ключ подписи ссылок, setup-token и списки пакетов собственных окружений. Собранные образы окружений и файл .env с ключом оракула, RELAY_* и PUBLIC_URL в неё не входят. Нужна утилита sqlite3. Копию можно снять во время занятия, но база и файлы не образуют атомарный снимок. Чтобы в копии соревнования посылки и готовые наборы пакетов соответствовали друг другу, остановите Colloq перед копированием; для кластера используйте MODE=consistent.
colloq stop
colloq backup
colloq restore --legacy --db ~/.colloq/backups/colloq-ДАТА.db \
--files ~/.colloq/backups/colloq-ДАТА-files.tar.gzПока занятие запущено, восстановление не выполняется. Существующая база откладывается в data/colloq.db.replaced-…, а файлы из архива копируются поверх исходных путей, включая workspace/, data/page-files/, data/competitions/ и data/dependencies/, без отдельной резервной копии. При запуске не из терминала согласие даёт флаг --replace. Из checkout то же делают make backup-legacy и make restore-legacy DB=… FILES=…. Для k3s-установки этот формат не подходит.