تخطَّ إلى المحتوى

النسخ الاحتياطي والاستعادة

يغطي هذا الدليل خمسة أشياء يفعلها الناس بالنسخ الاحتياطي فعلًا: التقاط نسخة، وجمعها، ونقل مساحة عمل، وإرجاع واحدة، والاحتفاظ بنسخ خارج الجهاز. لشكل كل ناتج وكل عملية بالضبط، انظر مرجع النسخ الاحتياطي.

كل ما هنا في الإعدادات ← الخادم ← النسخ الاحتياطي والاستعادة.

  • عميل كامل، أي تطبيق الحاسوب أو الويب. الهاتف المقترن لا يستطيع إطلاق أي من هذا، عن قصد.
  • لالتقاط لقطة تثبيت أو سردها أو تنزيلها أو حذفها: مالك التثبيت.
  • لإجراءات مساحة العمل الواحدة: مسؤول تلك المساحة للتصدير، ومالك لاستيرادها أو حذفها.
  • للتنزيل والرفع: اتصال مباشر بالخادم. المرحّل بوساطة وسيط يحمل إطارات RPC لا نقل الملفات، وتتعطّل عناصر النقل من تلقاء نفسها وتظهر ملاحظة حين تكون عليه.

الناتجان كلاهما قواعد بيانات فقط:

  • لقطة التثبيت دليل يحمل طابعًا زمنيًا: manifest.json وglobal.db وملف <workspaceId>/workspace.db لكل مساحة عمل.
  • تصدير مساحة العمل هو ملف workspace.db الواحد هذا.

لا يحمل أي منهما بقية دليل البيانات: secrets.json (مفاتيح الاقتران، وبيانات اعتماد المزوّدين، وSSO)، وblobs/ لمساحة العمل (الصور الملصقة في الرسائل)، وskills/، وagents/، وchat_credentials/، وصوت الاجتماعات المسجَّل، وصور المنصات. بعضها يُستغنى عنه وبعضها لا. الجدول الكامل في المرجع، وتغطيته هي غاية قسم النقل خارج الجهاز.

  1. افتح الإعدادات ← الخادم ← النسخ الاحتياطي والاستعادة.
  2. تحت لقطات التثبيت، اضغط نسخ احتياطي الآن.
  3. تسمّي الرسالة الدليل الذي كُتب، على مضيف الخادم. تظهر اللقطة الجديدة في أعلى القائمة.

يبقى الخادم يعمل طوال الوقت. يُكتب كل ملف بـ VACUUM INTO، وهو متسق مع قاعدة بيانات حيّة، فلا نافذة صيانة ولا حاجة لإيقاف الوكلاء.

يعرض كل صف في القائمة الطابع الزمني، والحجم على القرص، وعدد مساحات العمل التي التُقطت، وهل اللقطة مكتملة أو غير مكتملة. غير المكتملة تعني أن ملف البيان مفقود أو يسمّي ملفات غير موجودة: نسخة قطعها انهيار أو قرص ممتلئ. تبقى مدرجة عن قصد. لقطة لا تراها هي لقطة تظن أنك تملكها. اللقطة غير المكتملة لا تستعيد تثبيتًا بأكمله، لكن ملفات مساحات العمل التي تحملها يمكن اعتمادها واحدًا تلو الآخر.

قد يقول الصف أيضًا n مساحة عمل لم تُلتقط. تلك مساحة عمل مسجّلة ولم يُكتب إليها بعد (لا ملف بعد)، أو فشلت نسختها. راجع سجل الخادم.

جدولة نسخ مساحات العمل والاحتفاظ بها

قسم بعنوان “جدولة نسخ مساحات العمل والاحتفاظ بها”

افتح الإعدادات ← خطوط الأنابيب ← قوالب خطوط الأنابيب لمساحة العمل وابحث عن نسخ احتياطي لمساحة العمل. جدولها المفعّل يعمل كل يوم أحد عند 03:00 UTC: نسخ مساحة العمل احتياطيًا، ثم حذف النسخ الاحتياطية الأقدم من (30 يومًا افتراضيًا). لا تعمل العقدة الثانية إلا بعد نجاح النسخ. تستطيع تغيير أيام الاحتفاظ على العقدة أو تعطيل الجدول. إن كان الخادم متوقفًا في الموعد، يلحق الجدول مرة واحدة حين يعود، ولا يعيد كل أسبوع فائت.

نسخ مساحات العمل تعيش على الخادم تحت backups/workspace-backups/<workspaceId>/<timestamp>/workspace.db. عقدة الاحتفاظ تحذف النسخ القديمة لمساحة العمل هذه فقط، ولا تحذف لقطات التثبيت ولا نسخ مساحات العمل الأخرى. هذه الملفات قواعد بيانات فقط. للاحتفاظ خارج الجهاز، انسخها بنفسك.

هذه النسخ منفصلة عن قائمة لقطات التثبيت. لاستعادة واحدة، استخدم بيانات مساحة العمل ← استيراد مع مسار workspace.db على الخادم. الاستيراد يستبدل قاعدة بيانات مساحة العمل الحالية، فصدّرها أولًا إن قد تحتاج إلى التراجع عن الاستعادة.

تحت لقطات التثبيت، وسّع اللقطة، بما في ذلك غير المكتملة، واستخدم حذف اللقطة في قسم الخطر. أكّد اسمها. يُزال دليل اللقطة بأكمله نهائيًا من الخادم. نزّلها أولًا إن احتجت نسخة. خط أنابيب نسخ مساحة العمل لا يحذف هذه اللقطات أبدًا.

المسارات التي تعرضها الصفحة على الجهاز الذي يشغّل cc_server. حين لا يكون ذلك الجهاز الذي تجلس أمامه، استخدم أزرار تنزيل:

  • بجانب كل مساحة عمل تحت بيانات مساحة العمل ← تنزيل، لملف .db واحد.
  • بجانب كل لقطة تحت لقطات التثبيت ← تنزيل، للقطة كلها ملف .zip.

على الحاسوب تختار أين يحط الملف وتسمّيه الرسالة. على الويب يذهب إلى تنزيلات المتصفح. في الحالتين يُعرض التقدّم بالبايت، لأن هاتين الحمولتين هما اللتان تبلغان الجيجابايت.

كلاهما ينشئ نسخة جديدة لحظة الضغط على الزر، ويبثّها، ثم يحذف نسخة الخادم بعدها. التنزيل ليس جلب الملف الذي صنعه زر التصدير من قبل.

فك ضغط أرشيف اللقطة يعيد تخطيطها كما هو، وهذا ما يجعل استعادتها نسخًا إلى مكانها.

مساحة العمل ملف قاعدة بيانات واحد، فتسليمها عملية على ملف.

  1. على خادم المصدر، من الإعدادات ← الخادم ← النسخ الاحتياطي والاستعادة ← بيانات مساحة العمل، وسّع مساحة العمل واضغط تنزيل.
  2. على خادم الوجهة، أنشئ مساحة العمل التي ستستقبلها، أو اخترها.
  3. وسّع تلك المساحة، وتحت الاستعادة من هذا الجهاز اضغط اختيار ملف ورفعه. اختر ملف .db الذي نزّلته.

إن كان الخادمان الجهاز نفسه الذي تجلس أمامه، فـحفظ على الخادم مع استيراد ← اختيار ملف يؤدي الغرض نفسه من غير ذهاب وإياب. مسارات حوار الاستيراد تُحل على مضيف الخادم.

أمران مسموحان ويُسجَّلان بدل أن يُرفضا: استيراد ملف يختلف معرّف مساحة العمل المسجَّل فيه عن الهدف (هكذا تكرّر مساحة عمل أو تستعيدها تحت معرّف جديد)، واستيراد ملف من تثبيت مختلف. في الحالة الثانية أجهزة الملف المقترنة ومعرّفات مستخدميه تخص التثبيت الذي جاء منه ولن تُحل على هذا التثبيت. بيانات مساحة العمل نفسها سليمة، لكن أعد التحقق من العضوية بعد اعتمادها.

رموز بوت الدردشة تعيش بجانب قاعدة البيانات لا داخلها، فمساحة العمل التي تسلّمها لغيرك لا تحمل بيانات اعتماد حيّة. التثبيت الذي يستقبلها يعيد ربط ما يخصه.

استعادة مساحة عمل واحدة من لقطة

قسم بعنوان “استعادة مساحة عمل واحدة من لقطة”
  1. تحت لقطات التثبيت، وسّع اللقطة التي تريدها.
  2. جد صف مساحة العمل واضغط استعادة.
  3. أكّد. كل ما فعلته مساحة العمل تلك منذ التقاط اللقطة يُفقد.

هذه عملية الاستيراد نفسها، موجَّهة إلى نسخة اللقطة من ملف مساحة العمل تلك، عن قصد، حتى لا توجد آلية ثانية قد تعامل الملف نفسه معاملة مختلفة.

قد يقول الصف لم تعد على هذا الخادم، مع تعطيل استعادة: اللقطة تحمل مساحة عمل لم يعد هذا التثبيت يملكها. أعدها يدويًا: أنشئ مساحة عمل، ثم تحت بيانات مساحة العمل استورد إليها من <snapshot path>/<old workspace id>/workspace.db. اللقطة الموسَّعة تعرض المسار على الخادم في حقل نسخ، وعنوان الصف هو معرّف مساحة العمل القديم، فطرفا ذلك المسار أمامك.

لا زر لهذا، ولا ينبغي أن يوجد: فهو يستبدل قواعد البيانات التي يبقيها الخادم العامل مفتوحة.

  1. أوقف cc_server. إن كنت تشغّل تطبيق الحاسوب بخادمه المضمّن، أوقف التطبيق.

  2. انسخ محتويات اللقطة فوق دليل البيانات. تخطيط اللقطة يطابق الحي، فهذا نسخ عادي:

    نافذة طرفيّة
    # macOS default; see the CLI reference for other platforms
    DATA_DIR="$HOME/Library/Application Support/control-center"
    SNAPSHOT="$DATA_DIR/backups/2026-07-28T09-12-33-000Z"
    cp "$SNAPSHOT/global.db" "$DATA_DIR/global.db"
    for d in "$SNAPSHOT"/*/; do
    id=$(basename "$d")
    mkdir -p "$DATA_DIR/$id"
    cp "$d/workspace.db" "$DATA_DIR/$id/workspace.db"
    done
  3. احذف أي ملفات -wal و-shm بجانب قواعد البيانات التي استبدلتها. هي تابعة للملفات القديمة، وملف قديم بجانب قاعدة مستعادة يعرّضها للتلف.

  4. شغّل الخادم من جديد.

اللقطة لا تحمل secrets.json، فتثبيت يُستعاد على مضيف جديد يُبقي بياناته لا بيانات اعتماده: يجب إعادة إعداد الأجهزة المقترنة ورموز المزوّدين وإعدادات SSO، أو استعادتها من حيث حفظت ذلك الملف. الاستعادة على المضيف نفسه، حيث لم يُفقد secrets.json، تُبقي كل شيء.

نقل النسخ الاحتياطية خارج الجهاز

قسم بعنوان “نقل النسخ الاحتياطية خارج الجهاز”

لقطة على القرص نفسه الذي نُسخت منه القاعدة تحميك من استيراد فاسد، لا من عطب القرص. لا شيء في Control Center يرسل نسخة إلى أي مكان، فهذا الجزء عليك.

اللقطات ثابتة بعد كتابتها ومسمّاة بالطابع الزمني، فأي أداة مزامنة تتعامل معها بيسر. استثنِ transfer/، فهو منضدة عمل للتنزيلات والرفعات الجارية:

نافذة طرفيّة
DATA_DIR="$HOME/Library/Application Support/control-center"
# To another host over ssh
rsync -a --delete --exclude 'transfer/' \
"$DATA_DIR/backups/" backup-host:/srv/control-center-backups/
# To object storage
aws s3 sync --exclude 'transfer/*' \
"$DATA_DIR/backups/" s3://my-bucket/control-center/backups/
# Or with deduplication, encryption and its own retention
restic backup --exclude 'transfer' "$DATA_DIR/backups"

--delete يعكس التشذيب المحلي على الجهة البعيدة. أسقطه إن أردت أن تحتفظ الجهة البعيدة باللقطات مدة أطول من المضيف.

حتى تستطيع إعادة بناء التثبيت لا بياناته وحدها، انسخ هذه أيضًا. هي ملفات عادية، ونسخها آمن والخادم يعمل:

نافذة طرفيّة
rsync -a \
"$DATA_DIR/secrets.json" \
backup-host:/srv/control-center-backups/config/
rsync -a --relative \
"$DATA_DIR"/./*/chat_credentials \
"$DATA_DIR"/./*/blobs \
"$DATA_DIR"/./*/skills \
"$DATA_DIR"/./*/agents \
backup-host:/srv/control-center-backups/workspace-files/

secrets.json صلاحياته 0600 ويحمل كل مفتاح اقتران وكل بيانات اعتماد مزوّد وكل إعداد SSO على التثبيت. أينما استقر يجب أن يكون محميًا بقدر مضيف الخادم على الأقل: مشفّرًا في حالة السكون، وليس في حاوية يستطيع غيرك قراءتها.

تجاوز spaces/ (أشجار عمل بالنسخ عند الكتابة، يُعاد تجهيزها من مستودعاتك)، وpr_clones/ (ذاكرة تخزين مؤقت)، وmodels/ (تُنزَّل من جديد)، وmedia_cache/ وrigs/ (حالة الجهاز، وهي كبيرة). صوت الاجتماعات المسجَّل تحت meetings/ يستحق التضمين إن كنت تحتفظ بالاجتماعات.

جدولة لقطة للتثبيت بأكمله خارج التطبيق

قسم بعنوان “جدولة لقطة للتثبيت بأكمله خارج التطبيق”

خط الأنابيب المضمّن ينسخ مساحة عمل واحدة فقط. للقطة للتثبيت بأكمله تعمل من غير تدخّل، لا أمر فرعي في سطر الأوامر، واستدعاء RPC للقطة يتطلب عميلًا كاملًا مقترنًا هو مالك التثبيت. يستطيع مؤقّت على المضيف أن يستخدم VACUUM INTO على قواعد البيانات الحيّة:

#!/usr/bin/env bash
set -euo pipefail
DATA_DIR="${CC_SERVER_DATA_DIR:-$HOME/.local/share/control-center}"
DEST="/srv/control-center-snapshots/$(date -u +%Y-%m-%dT%H-%M-%SZ)"
mkdir -p "$DEST"
sqlite3 "$DATA_DIR/global.db" "VACUUM INTO '$DEST/global.db'"
for db in "$DATA_DIR"/*/workspace.db; do
id=$(basename "$(dirname "$db")")
mkdir -p "$DEST/$id"
sqlite3 "$db" "VACUUM INTO '$DEST/$id/workspace.db'"
done

شغّله بالمستخدم نفسه الذي يملك دليل البيانات، من cron أو مؤقّت systemd، ثم زامن DEST خارج المضيف بعد ذلك. يحتاج VACUUM INTO إلى SQLite 3.27 أو أحدث.

اكتبه خارج <dataDir>/backups/. دليل مصنوع يدويًا هناك بلا manifest.json، فيسرده التطبيق لقطة غير مكتملة، وتكفّ القائمة عن أن تكون سجلًا صادقًا لما أنتجه الخادم نفسه.

تستطيع حذف لقطات التثبيت فرادى من التطبيق. لسياسة احتفاظ على المضيف، أبقِ دليل نسخ مساحات العمل منفصلًا عن لقطات التثبيت:

نافذة طرفيّة
find "$DATA_DIR/backups" -mindepth 1 -maxdepth 1 -type d \
! -name exports ! -name transfer ! -name workspace-backups \
-mtime +30 -exec rm -rf {} +

راجع خرج تشغيل بـ -print قبل إضافة -exec. احتفظ بأكثر من واحدة: العطل الذي تحمي نفسك منه كثيرًا ما يكون أن النسخة الأخيرة تحمل المشكلة نفسها.

التحقق من صلاحية النسخة الاحتياطية

قسم بعنوان “التحقق من صلاحية النسخة الاحتياطية”

نسخة احتياطية لم يستعدها أحد تبقى فرضية.

فحص خفيف: الملف يُفتح وصفحاته سليمة.

نافذة طرفيّة
sqlite3 "$SNAPSHOT/global.db" 'PRAGMA integrity_check;' # expects: ok

فحص حقيقي: اعتمدها. أنشئ مساحة عمل للتجربة على تثبيت غير إنتاجي، واستورد ملف مساحة عمل إليها، وانظر هل المساحات والتذاكر والرسائل التي تتوقعها موجودة. هذا يسلك المسار نفسه الذي تسلكه استعادة حقيقية، بما فيه إعادة بناء FTS، وهو الفحص الوحيد الذي يقول لك إن النسخة قابلة للاستعادة لا مجرد مقروءة.

افعل ذلك مرة حين تُعدّ النسخ الاحتياطي، ومرة أخرى كلما غيّرت مكان حفظها.

العَرَض السبب والعلاج
عناصر التنزيل والرفع معطّلة مع ملاحظة عن مرحّل أنت متصل عبر المرحّل بوساطة وسيط، وهو لا ينقل الملفات. اتصل بالخادم مباشرة
«رفض الخادم» الدور. التقاط لقطة تثبيت أو سردها يحتاج مشغّل التثبيت. تنزيل مساحة عمل يحتاج دور المسؤول، واستعادتها تحتاج دور المالك، وملف .zip للقطة كلها يحتاج مشغّل التثبيت
«لا يملك هذا الخادم أي سطح نسخ احتياطي» المضيف بلا منفذ نسخ احتياطي موصول، وهو خادم تجريبي. العمليات غائبة لا مرفوضة
«الملف أكبر مما يقبله الخادم» الرفع محدود بـ 8 GiB. ضع الملف على مضيف الخادم واستخدم استيراد ← اختيار ملف بدل ذلك
رُفض الاستيراد: الملف ليس قاعدة بيانات مساحة عمل في Control Center الملف بلا صف workspace_meta. ليس تصدير مساحة عمل، أو أنه مبتور. لم يُستبدل شيء
لقطة مدرجة على أنها غير مكتملة ملف بيانها مفقود أو يسمّي ملفات غائبة. التقط لقطة جديدة، واعتمد ملفات مساحات العمل منها في هذه الأثناء
لقطة تقول إن مساحات عمل لم تُلتقط تلك المساحات لم يُكتب إليها قط، أو فشل نسخها. راجع سجل الخادم
تثبيت مُستعاد بلا بيانات اعتماد لمضيف الشفرة أو لـ SSO secrets.json ليس ضمن اللقطة. استعده من حيث حفظته، أو أعد ربط المزوّدين
مساحة عمل مُستعادة تنقصها الصور الملصقة ملفات blobs/ تعيش بجانب قاعدة البيانات لا داخلها. انسخ <workspaceId>/blobs/ معها أيضًا