Repository navigation
fa 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 (آنچه میبینید)، بخش پشتیبان پوستهای (آنچه کار را با دسترسی 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 و فیلدهای جدید و افزودنی اضافه
میشوند.
برای طراحی فنی کامل (قالب بایگانی، طرحوارهٔ فراداده، خطهای لوله، رمزنگاری، مقصدها، واردکنندهها) نگهدارندگان یادداشتهای طراحی مفصلی نگه میدارند؛ این فایل یک نمای کلی برای مشارکتکنندگان است.