Skip to content

uk ARCHITECTURE

github-actions[bot] edited this page Nov 13, 2026 · 2 revisions

Languages: English · العربية · Čeština · Deutsch · Español · فارسی · Français · हिन्दी · Bahasa Indonesia · Italiano · 日本語 · 한국어 · Nederlands · Polski · Português · Русский · Svenska · ไทย · Türkçe · Українська · Tiếng Việt · 中文


Архітектура

VDBackup: це root WebUI-модуль. Він має три шари: WebUI (те, що ви бачите), shell-бекенд (те, що виконує роботу, з правами root) і вбудовані бінарники (архіватори й транспорти). Усе працює вже з правами root, тож немає запиту дозволу й немає застосунку-компаньйона для основних функцій.

   ┌──────────────────────────────────────────────────────────┐
   │  WebUI  (module/webroot, vanilla JS)                      │
   │    index.html · scripts.js · i18n.js · styles.css         │
   │    lang/en.js + 21 languages · config.json (CSP, no net)  │
   └───────────────┬──────────────────────────────────────────┘
                   │  ksu.exec("sh scripts/helper.sh <verb> <b64json>")
                   ▼
   ┌──────────────────────────────────────────────────────────┐
   │  scripts/helper.sh  (dispatcher, returns JSON)            │
   │    list-apps · config · dests · backup/restore/import ... │
   │    long ops -> setsid nohup scripts/worker.sh  (detached) │
   └───────────────┬───────────────────────────────┬──────────┘
                   │                               │ progress-<opid>.json (poll)
                   ▼                               ▼
   ┌────────────────────────────────────┐   ┌──────────────────────────┐
   │  scripts/worker.sh (root, detached)│   │  framework helper (opt.) │
   │   force-stop · tar|zstd|age        │   │  app_process + dex       │
   │   pm install · chown/chcon         │   │  perms/appops/ssaid/...  │
   │   transfer · notify                │   │  (dex primary, shell fb) │
   └───────────────┬────────────────────┘   └──────────────────────────┘
                   ▼
   ┌──────────────────────────────────────────────────────────┐
   │  bin/<abi>/  tar · zstd · lz4 · rclone · rsync · ssh · restic │
   └──────────────────────────────────────────────────────────┘
                   ▼
   Destinations: local · SFTP/SCP · SMB · WebDAV · FTP · S3 · 70+ (rclone)
                 rsync · restic repos · Google Drive (opt-in companion)

Ключові моменти

  • Уже root. Процес модуля має права root, тож рушій: це звичайний shell. ~85% роботи: це чистий shell (tar/zstd/age/pm/am/chown/chcon/rclone/...).
  • Відокремлене виконання. Резервне копіювання/відновлення працюють через setsid nohup, як незалежний root-процес. Закриття WebUI не перериває їх; інтерфейс знову приєднується, читаючи logs/progress-<opid>.json.
  • Framework-помічник (~15%). Точні дозволи, AppOps, SSAID, StorageStats, піктограми й привілейований Wi-Fi потребують фреймворку Android. Невеликий dex, запущений через app_process (без встановленого застосунку), обробляє їх, із запасним варіантом на shell.
  • Портативність. Лише стандартні формати; резервні копії відкриваються на ПК без цього модуля.
  • Стан лежить у /data/adb/vdbackup/ (конфігурація, завдання, призначення, зашифровані облікові дані, журнали, проміжна зона). Резервні копії записуються у видиме користувачеві, зашифроване обліковими даними сховище за адресою /sdcard/VDBackup/ (/data/media/<user>/VDBackup, на користувача), а не в /data/adb (яке зашифроване на рівні пристрою й читається до першого розблокування).

Гарантія сумісності

Резервна копія має залишатися відновлюваною назавжди. Це жорстке правило, а не найкраще зусилля.

Обсяг. Гарантія охоплює резервні копії, записані починаючи з v1.01 (перший офіційно опублікований реліз) і лише офіційно опублікованими, випущеними версіями. v1.00 був збіркою лише для тестування і явно поза обсягом; передрелізні та розробницькі збірки не охоплюються. Починаючи з першого публічного релізу, обіцянка нижче абсолютна:

  • Лише стандартні формати. Кожен архів: це звичайний tar, стиснений zstd, gzip або lz4, за бажанням загорнутий у age. Немає пропрієтарного контейнера, тож резервну копію можна відкрити на будь-якому ПК звичайними інструментами навіть без цього модуля (див. etc/RECOVERY.md). Формат, від якого ми не можемо відмовитися.
  • Метадані лише з доповненням. manifest.json несе format_version. Схема лише зростає: поля можна додавати, ніколи не видаляти, не перейменовувати й не перепризначувати. Відновлення читає кожне поле захисно (відсутні опційні поля повертаються до значення за замовчуванням) і встановлює APK та видобуває архіви за їхнім ім'ям файлу й розширенням, а не припускаючи фіксовану форму маніфесту.
  • Прямосумісне відновлення. Відновлення ніколи не відхиляє резервну копію за те, що вона стара, а старіший VDBackup тихо пропускає типи елементів, яких не знає, замість того щоб зазнати невдачі. Новіший VDBackup тому відновлює будь-яку старішу резервну копію, а архіви стандартного формату лишаються відновлюваними вручну в будь-якому разі.

Коротко: усе, що VDBackup коли-небудь записав, кожен майбутній VDBackup (і звичайний ПК) усе ще може відновити. Змінювати формат так, щоб це зламало попередню резервну копію, не дозволено; нові можливості додаються за format_version і новими полями з доповненням.

Повний технічний дизайн (формат архіву, схему метаданих, конвеєри, криптографію, призначення, імпортери) супровідники тримають у детальних нотатках з дизайну; цей файл: це оглядовий матеріал для учасників.


Ця документація створена за допомогою Claude (Anthropic) і підтримується VD171. Виправлення та покращення вітаються; див. CONTRIBUTING.md.

Clone this wiki locally