Repository navigation
ru ARCHITECTURE
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 - это модуль WebUI с правами root. У него три слоя: 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/(конфигурация, задания, назначения, зашифрованные учётные данные, логи, staging). Резервные копии записываются в видимое пользователю хранилище, зашифрованное учётными данными, по пути/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 и новыми, добавляемыми полями.
Полный технический дизайн (формат архива, схема метаданных, конвейеры, криптография, назначения, импортёры) сопровождающие держат в подробных заметках по дизайну; этот файл - это обзор, обращённый к контрибьюторам.