ENDERU
GitHub22 repositoriesDaily Tech3 subscribersaudion.devthe product shelfRSSrelease feed
← All notesProjects

SYNC ALL — библиотека в режиме MIR

English · Руководство

Содержание

Область MIR

SYNC ALL работает только с выбранной DATA. Управляемые папки библиотеки заменяются проверенными серверными копиями. Локальные правки, лишние файлы, прежний Git и репозитории, исчезнувшие из Forgejo Mirror/автоматического Repositories, удаляются. Резервные поколения старых рабочих папок не накапливаются.

Вне удаления: Tunnel, настройки подключений в config, полные recovery-снимки Snapshots, постоянная папка Recovery и явно указанные protectedLocal: какие пути защищены, называет план в папке данных. Эти исключения не заменяются содержимым Git. Другие R2 bucket, KV/DO и облачные диски не входят в проверяемую библиотеку.

Источники и полнота

Каталог всех репозиториев читается на MAIN VPS. Известные проекты получают привычные папки; новые — Repositories/<владелец>/<репозиторий>. Проверяются все refs/HEAD, git fsck и наличие файлов checkout. Совпадающие проверенные локальные Git-объекты используются повторно. Изменившиеся или повреждённые копии скачиваются заново.

Берётся более новый daily/manual recovery-архив R2. Проверяются внешняя SHA-256, полная внутренняя опись, все вложенные части, байты и Unix-метаданные служебных файлов/юнитов, активные HEAD внутри снимка. Новые payload сохраняются автоматически. Снимок и live Git имеют отдельные даты и доказательства актуальности.

Код берётся из Git, опубликованные данные Portal/Crypto/Planning — из разрешённых веток снимка. MAIN VPS Backup — Git-эталон исходников, а не смесь с установленными файлами. SECOND VPS не опрашивается: его полный transport-config.tar.gz берётся из recovery. Старые плоские транспортные конфиги в этой папке MIR удаляет.

Надёжность без старых поколений

Сначала staging и проверки, затем транзакционная замена на том же диске. before существует только временно для отката незавершённой операции. При ошибке замены старые папки возвращаются. После обрыва следующий запуск сначала восстанавливает транзакцию. Изменение данных во время подготовки останавливает замену; обычные заранее существовавшие локальные правки MIR удаляет.

После успешной проверки временный before, тяжёлый staging и старые SYNC ALL-кэши удаляются. Остаются актуальная библиотека, recovery-набор и небольшие JSON-доказательства. Неполный архив, ошибка Git или неподтверждённый каталог не разрешают очистку.

Один OS-lock на DATA не допускает параллельные запуски. Пути удаления ограничены принадлежащими программе каталогами; junction/symlink запрещены. Ключи не импортируются и не меняются, SSH-доверие не ослабляется. Сборы, модели, публикации, обновление ОС и восстановление серверов не запускаются.

План в папке данных

Что синхронизировать — MAIN VPS и его папки, R2 bucket снимков, репозитории Forgejo, части recovery-архива — описывает config\mirror.json папки данных, версия 2. Это данные хозяйства, в программе их нет: config\mirror.sample.json — шаблон без единого значения, на месте каждого стоит <...>. SYNC ALL не строит план из шаблона и не достраивает старый план версии 1: без плана v2 или с незаполненным <...> он останавливается, ничего не меняя, и говорит, что делать. На новой машине план копируется из папки данных машины, где SYNC ALL уже прошёл, или заполняется по шаблону.

Команды и результат

Нужны Git, Windows OpenSSH, Python 3.10+ и свой rclone. Python ищется как py -3, затем python.exe из PATH; заглушка Microsoft Store не в счёт, версия проверяется. Без Git или подходящего Python SYNC ALL сразу говорит, что поставить. Враппер запускается через App/AudionPs.exe. Буква диска не зашита.

Runs\sync-backup.cmd -Root "<DATA>" -WhatIf -NoPause
Runs\sync-backup.cmd -Root "<DATA>" -NoPause
Runs\sync-backup.cmd -Root "<DATA>" -Only "Audion Portal,Forgejo Mirror" -NoPause
Runs\sync-backup.cmd -Root "<DATA>" -Snapshot "<архив.tar.gz>" -NoPause

DRY RUN читает каталог по SSH, но ничего не пишет в DATA и не скачивает архив. -Only ограничивает установку, а не полноту проверки входа. -Snapshot использует имеющийся архив с соседней .sha256; live Git всё равно проверяется. MIR — постоянный режим, отдельное разрешение на конфликты не требуется.

BACKUP-CATALOG.md/json описывают актуальную копию, HEAD/refs, payload/хеши и защищённые пути. В текущем Recovery/sync-all/sync-all-<id> остаются transaction.json, result.json либо failure.json и опись проверки. Код 0 — полный успех. Распакованный Recovery удобен для чтения; Unix-права восстанавливают из исходного tar. Реальное восстановление сервера этими проверками не выполняется.

Tests/Test-LibrarySync.ps1 проверяет MIR, защищённые данные, повреждённые архивы, обрывы, откат и безопасную очистку на локальных fixtures, без реальной сети. После изменения диалога также запускается Tests/Stand/Run-Stand.ps1.

Удаление ._runtime

При закрытой программе и завершённых CLI-операциях ._runtime можно удалить и в программе, и в каждой DATA. Здесь только пересоздаваемые файлы, не копии ключей и не единственное состояние синхронизации. Журнал и временный откат SYNC ALL находятся в DATA/Recovery/sync-all и переживают удаление ._runtime даже после обрыва. После успешного MIR прежние поколения SYNC ALL удаляются, как и раньше.

Облачный session.conf и контрольная сумма его исходного clouds.conf лежат в DATA/config/rclone. При следующем открытии обновлённые токены сохраняются; более новый явный reconnect не затирается старой сессией. Конфликтующая сессия сохраняется в DATA/Recovery/cloud-sessions. Пары и списки BISYNC — DATA/config/bisync; без выбранной DATA этот режим не запускается.

Старая раскладка переносится автоматически при подготовке DATA, с проверкой хешей и пустых папок. Можно выполнить перенос отдельно, без сети: App/AudionPs.exe -NoProfile -ExecutionPolicy Bypass -File Engine/Scripts/Migrate-RuntimeStorage.ps1 -Root "<DATA>" -IncludeProgram IncludeProgram используют только для DATA, которой принадлежат прежние файлы программы. Совпадающие имена не приводят к перезаписи разных копий. Рабочие конфиги машин и серверов никогда не возвращаются в публичный проект.

Edited 10.29.2026