انتقل إلى المحتوى

استكشاف الأخطاء وإصلاحها

أسئلة شائعة قصيرة. للجدول الكامل لاستكشاف أخطاء VM عبر SSH من جانب المضيف (رفض الإذن، فشل التحقق من مفتاح المضيف، متغيرات القالب الناقصة والمزيد)، راجع دليل نسخ الـ VM الاحتياطي عبر SSH على GitHub.

هناك شيء غير موصول بشكل صحيح

افتح /spike في واجهة الويب. يستطلع فحص تكامل المضيف كل نقطة تركيب وواجهة سطر أوامر (مقبس Docker، libvirt، restic، qemu-img، rclone) ويبلّغ عن أي أجزاء ناقصة. ابدأ من هنا قبل افتراض وجود خلل: نقطة تركيب ناقصة أو مضيف غير قابل للوصول يظهر فوراً.

لا أستطيع الوصول إلى واجهة الويب

يقدّم BombVault خدمة HTTPS جاهزة افتراضياً على المنفذ 3443 (شهادة موقّعة ذاتياً)، فافتح https://<your-unraid-ip>:3443. اقبل تحذير الشهادة الموقّعة ذاتياً، أو ضع BombVault خلف عاكس بروكسي بشهادتك الخاصة. إذا شغّلت بـ HTTP_ONLY=true، فإنه يقدّم HTTP عادياً على المنفذ 3000 بدلاً من ذلك (مخصَّص للاستخدام خلف بروكسي ينهي TLS).

فقدت APP_KEY الخاص بي

يشتق APP_KEY كلمة مرور مستودع restic. بدونه (وبدون حقيبة استعادة مفتاح التشفير)، لا يمكن استرداد النسخ الاحتياطية المشفّرة. لهذا تلحّ لوحة التحكم عليك بتنزيل حقيبة الاستعادة. راجع النسخ خارج الموقع والتعافي. أنشئ مفتاحاً بـ openssl rand -hex 32 واحفظه خارج الخادم قبل أن تعتمد على أي نسخة احتياطية.

نسخ الـ VM الاحتياطي لا يتصل

يتحدث نسخ الـ VM الاحتياطي إلى libvirt عبر SSH، وليس عبر نقطة تركيب أبداً.

  • تأكد من تفعيل SSH على المضيف ومن تفويض مفتاح BombVault العام في /root/.ssh/authorized_keys (الإعدادات، التكاملات، SSH المضيف يُظهر المفتاح وزر اختبار الاتصال).
  • على شبكة br0.x مخصصة، اضبط LIBVIRT_HOST على عنوان LAN IP الخاص بـ Unraid (لا تستطيع الحاوية الوصول إلى المضيف عبر host.docker.internal هناك). فعّل Settings, Docker, Host access to custom networks.
  • إذا غيّرت منفذ SSH في Unraid، اضبط LIBVIRT_SSH_PORT ليطابقه.
  • التشخيص الكامل خطوة بخطوة (اختبار قابلية الوصول، توجيه VLAN، Permission denied (publickey)، Host key verification failed) موجود في دليل نسخ الـ VM الاحتياطي عبر SSH.

لقطة VM حية لم تُشغَّل

تحتاج اللقطات الحية وكيل ضيف qemu مثبَتاً في الـ VM والقرص على /mnt/cache (أو /mnt/diskX)، لا /mnt/user. على VM مُطفأ، تعود الحية تلقائياً إلى الآمنة. تُوقِف النسخة الاحتياطية الآمنة الـ VM، وتنسخ الأقراص احتياطياً، ثم تعيد تشغيله، فتكون متسقة دائماً.

فشلت نسخة احتياطية بـ "repository is already locked"

هذا عادةً قفل restic يتيم تُرِك خلفه عند تحديث الحاوية أو إعادة تشغيلها أثناء عملية. يكتشف BombVault قفلاً يتيماً مثبَتاً، ويمسحه قسراً، ويعيد المحاولة مرة واحدة تلقائياً. إذا استمر، استخدم الإعدادات، السلامة، إلغاء القفل للنطاق المتأثر لمسح قفل عالق يدوياً. مشكلة حقيقية تظهر مع ذلك بدلاً من إخفائها. بعد إعادة التشغيل ينتظر BombVault حتى يمضي على هذا القفل عشر دقائق دون تجديد. فعملية restic التي ما زالت تعمل، مثلًا في نسخة ثانية من BombVault على المستودع نفسه، تجدّد قفلها كل خمس دقائق.

نسختي خارج الموقع لم تحدث بعد نسخة احتياطية

النسخ خارج الموقع بذل أفضل جهد بحكم التصميم، فعثرة خارج الموقع لا تُفشل النسخة المحلية أبداً. تحقق من الجدول الزمني خارج الموقع لذلك النطاق (الإعدادات، الجداول): جدول فارغ ينسخ بعد كل نسخة احتياطية محلية، بينما وتيرة ترسل أقل. استخدم نسخ الآن في صفحة خارج الموقع لتشغيل عند الطلب، وراقب مؤشر النسخ في لوحة التحكم.

استعادة أُجهضت قبل أن تبدأ

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

فشل تصدير نصي بدلاً من كتابة ملف

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

فشل تفريغ قاعدة بيانات

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

  • رُفض تسجيل الدخول. يسجّل التفريغ الدخول بمتغيرات كلمة المرور الخاصة بالحاوية نفسها (POSTGRES_PASSWORD أو MARIADB_ROOT_PASSWORD أو MYSQL_ROOT_PASSWORD أو نسخها بـ _FILE). تحقق منها في حاوية قاعدة البيانات. ومتغير _FILE الذي يشير إلى سر لا يستطيع مستخدم الحاوية نفسه قراءته يفشل بالطريقة ذاتها.
  • صلاحيات ناقصة. مع كلمة مرور جذر عشوائية لا يستطيع التفريغ الدخول إلا بوصفه مستخدم التطبيق، فيضم قاعدة بيانات واحدة فقط، وقد يرفضه MySQL 8.4 وما بعده رفضاً تاماً. امنح الحاوية كلمة مرور جذر حقيقية، أو أطفئ تفريغها.
  • جداول النظام بحاجة إلى ترقية. يرفض MariaDB التفريغ حين تأتي جداول نظامه من إصدار أقدم (الخطأ 1558). أضف المتغير MARIADB_AUTO_UPGRADE=1 وأعد تشغيل الحاوية، أو نفّذ mariadb-upgrade داخلها مرة واحدة.
  • لا توجد أداة تفريغ. الصورة النحيفة أو المبنية يدوياً بلا pg_dump أو mysqldump أو mariadb-dump لا يمكن تفريغها. استخدم الصورة الرسمية، أو أطفئ التفريغ.
  • حدّ زمني. يحصل التفريغ على DB_DUMP_MAX_HOURS (افتراضياً 6)، وتحصل النسخة الاحتياطية من حوله على BACKUP_MAX_HOURS، ويُقطع التفريغ الذي يتوقف عن التقدم بعد BACKUP_STALL_HOURS. وراء الحالة الأخيرة يقف عادةً قفل يمسكه التطبيق. ارفع الحدّ الذي انطبق، أو فرّغ حين يكون التطبيق هادئاً.
  • الحاوية موقوفة مؤقتاً أو تعيد التشغيل. يتحدث التفريغ مع الخادم وهو يعمل. وإن ظلت الحاوية تعيد التشغيل، فسجلّها هو الذي يقول السبب.
  • تعذّرت إزالة تفريغ تالف. التفريغ الذي لم يستطع BombVault إتمامه يُحذف. وحين يفشل ذلك الحذف يبقى التفريغ في القائمة موسوماً بأنه تالف، ويمكنك حذفه من هناك.

فشل استيراد

يوقف الاستيراد الحاوية، ويزيح مجلد بياناتها جانباً، ويترك الصورة تنشئ مجلداً فارغاً مكانه. وإن فشلت خطوة قبل الاستيراد نفسه، أُعيد المجلد القديم إلى مكانه تلقائياً. وإن فشل الاستيراد، احتفظت الحاوية بالمجلد الجديد وبقي القديم إلى جانبه باسم <مجلد البيانات>.bombvault-before-import-<ختم زمني>؛ ورسالة خطأ التشغيل تذكر المسار بالضبط.

لإعادته يدوياً: أوقف الحاوية، وأعد تسمية مجلد البيانات الحالي لإزاحته عن الطريق، وأعد تسمية المجلد المحفوظ إلى اسمه الأصلي، ثم شغّل الحاوية. وفي Unraid يقوم مدير الملفات في تبويب Shares بذلك.

فشل نسخ مجموعة بيانات ZFS أو تخطّى مجموعة بيانات

كل مشكلة تحمل رمز سبب بين قوسين معقوفين، وصفحة مجموعات بيانات ZFS تسردها كلها مع طريقة الإصلاح. الثلاثة الأكثر شيوعًا:

  • snapshot-loop: لم تصل اللقطة إلى BombVault لأن Host Data لا يمرّر التركيبات الجديدة. حرّر الحاوية واضبط Access Mode لـ Host Data على Read/Write - Slave ثم أعد تشغيل BombVault.
  • key-not-loaded: مجموعة بيانات مشفّرة مفتاحها غير محمَّل تُتخطّى. حمّل المفتاح بـ zfs load-key وركّب مجموعة البيانات؛ النسخة التالية تشملها.
  • ssh-auth: رفض الخادم مفتاح BombVault. بطاقة الاتصال في صفحة ZFS تعرض الأمر الذي يسمح به؛ نفّذه مرة واحدة على الخادم.

يبقى عنصر عند "يتعلم N/10"

تبدأ معظم فحوص الشذوذ بعد 10 نسخ ناجحة للعنصر، ويبدأ العد من جديد بعد تعليمها كمتوقعة وبعد تغيير تحديد العنصر. العنصر غير المجدول لا يتعلّم، والحاوية التي بلا appdata ليس لديها ما تتعلّم منه، وهذا ما تقوله شارتها أيضًا.

توقف الاستبقاء عن حذف النسخ القديمة لعنصر واحد

تمسكها حالة شذوذ حرجة مفتوحة: مصدر العنصر شبه فارغ، أو تقلّص بشدة، أو أعادت نسخةٌ حفظ معظم بياناته. افتح حالة الشذوذ من الشارة على العنصر. إذا كانت بيانات مفقودة أو مشفّرة، فاستعد أولًا من آخر نسخة سليمة مرتبطة. ثم أكّد حالة الشذوذ، أو علّمها كمتوقَّعة إن كان التغيير منك، وسينظّف التشغيل التالي كالمعتاد. تعلّم معاينة الاستبقاء مثل هذا العنصر بأنه محتفَظ به. في عنصر ZFS لا تحتفظ بنسخها القديمة إلا مجموعة البيانات التي تسميها حالة الشذوذ، وتُنظَّف بقية مجموعات الشجرة كالمعتاد.

يقول التنظيف اليدوي إن بعض العناصر احتُفظ بها

السبب نفسه: لا يمس التنظيف النسخ القديمة لعنصر لديه حالة شذوذ كهذه ويذكره في رسالته. ويُنظَّف كل ما عدا ذلك كالمعتاد.

يقول استيراد السجل إنه تعذّرت قراءة مستودع

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

تحذير مساحة القرص لا يطابق لوحة Unraid

على مشاركة المستخدم في Unraid (/mnt/user) تكون المساحة الحرة هي مساحة المصفوفة كلها، لا قرص واحد. لا تُقاس المستودعات البعيدة إلا عبر وجهات rclone البعيدة التي تبلّغ عن مساحتها الحرة؛ ليست لمستودعات S3 وB2 وREST وSFTP قيمة، وتظهر كغير مَقيسة في بطاقة الحالات الشاذة.

مساعد الذكاء الاصطناعي لا يستطيع الاتصال

تشرح صفحة خادم MCP معنى كل رمز حالة وكل رفض من نقطة اتصال MCP وما يمكنك فعله حياله.

الحاوية تظل تعيد التشغيل أو تبدو غير صحية

يبلّغ BombVault عن حالته الصحية / غير الصحية من /api/health الخاص به. يمكن لأداة إصلاح ذاتي (مثل Autoheal) إعادة تشغيله تلقائياً إذا علِق المحرك يوماً. تحقق من سجل الحاوية وتقرير /spike للسبب الكامن.

ما زلت عالقاً؟