Skip to content

fa ARCHITECTURE

VD $ VD171 @ Priv8 edited this page Nov 4, 2026 · 1 revision

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 (آنچه می‌بینید)، بخش پشتیبان پوسته‌ای (آنچه کار را با دسترسی 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) ساده است. حدود ۸۵٪ کار پوستهٔ خالص است (tar/zstd/age/pm/am/chown/chcon/rclone/...).
  • اجرای جداشده. پشتیبان‌گیری/بازیابی از طریق setsid nohup به‌عنوان یک فرایند root مستقل اجرا می‌شود. بستن WebUI آن‌ها را قطع نمی‌کند؛ رابط کاربری با خواندن logs/progress-<opid>.json دوباره متصل می‌شود.
  • یاور چارچوب (~۱۵٪). مجوزهای ریزدانه، AppOps، SSAID، StorageStats، آیکون‌ها و Wi-Fi با امتیاز به چارچوب Android نیاز دارند. یک dex کوچک که از طریق app_process اجرا می‌شود (بدون برنامهٔ نصب‌شده) این موارد را مدیریت می‌کند و یک سازوکار جایگزین پوسته‌ای دارد.
  • قابلیت حمل. تنها قالب‌های استاندارد؛ پشتیبان‌ها بدون این ماژول روی رایانه باز می‌شوند.
  • وضعیت در /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ها را نصب و بایگانی‌ها را بر پایهٔ نام فایل و پسوند آن استخراج می‌کند، نه با فرض یک ساختار ثابت برای manifest.
  • بازیابی سازگار رو به جلو. بازیابی هرگز یک پشتیبان را به‌خاطر قدیمی‌بودن رد نمی‌کند، و یک VDBackup قدیمی‌تر به‌جای شکست، انواع موردهایی را که نمی‌شناسد بی‌صدا نادیده می‌گیرد. بنابراین یک VDBackup جدیدتر هر پشتیبان قدیمی‌تری را بازیابی می‌کند، و بایگانی‌های با قالب استاندارد در هر حال به‌صورت دستی قابل بازیابی می‌مانند.

به‌طور خلاصه: هر آنچه VDBackup تا کنون نوشته است، هر VDBackup آینده (و یک رایانهٔ معمولی) همچنان می‌تواند بازیابی کند. تغییر قالب به شیوه‌ای که یک پشتیبان پیشین را خراب کند مجاز نیست؛ قابلیت‌های جدید پشت format_version و فیلدهای جدید و افزودنی اضافه می‌شوند.

برای طراحی فنی کامل (قالب بایگانی، طرح‌وارهٔ فراداده، خط‌های لوله، رمزنگاری، مقصدها، واردکننده‌ها) نگه‌دارندگان یادداشت‌های طراحی مفصلی نگه می‌دارند؛ این فایل یک نمای کلی برای مشارکت‌کنندگان است.

Clone this wiki locally