حلّ المجتمع

يحفظ Syncthing على قرص النظام بدلًا من القرص الخارجي: إصلاح مسار وحدة التخزين

A December 2024 ZimaBlade/CasaOS thread where Syncthing kept creating external-drive paths inside its own container storage. The issue was solved after the user mapped the real drive into the container and used the container-side /DATA path inside Syncthing.

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

كان الحل النهائي مفاهيميًا، وليس أمرًا سحريًا لنظام الملفات: لدى Docker مسار على المضيف ومسار داخل الحاوية. يجب أن يستخدم Syncthing المسار المرئي داخل الحاوية، وليس المسار الخام المرئي لـ CasaOS أو ZimaOS.

لماذا كان يُعاد إنشاء المسار الخارجي في المكان الخطأ

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

العثور على نقطة التحميل الحقيقية على المضيف

استخدم المجتمع lsblk لتحديد المكان الذي حمّل فيه نظام التشغيل محرك الأقراص الخارجي. في مثال المُجيب، ظهر المحرك ضمن مسار مشابه لـ /media/devmon/...؛ ظهرت محركات الأقراص الخاصة بصاحب المنشور الأصلي لاحقًا ضمن /mnt/Storage1 و /mnt/Storage2.

تلك المسارات التاريخية الدقيقة لنقاط التحميل هي أمثلة من CasaOS/ZimaBlade، ولا ينبغي اعتبارها مسارات عامة حالية في ZimaOS.

تعيين محرك المضيف داخل Syncthing

إعدادات حاوية Syncthing التي تعيّن مسار محرك أقراص خارجي على المضيف إلى /DATA داخل الحاوية
الفكرة العملية هي تعيين مسار التخزين الحقيقي على المضيف إلى مسار ثابت يستطيع Syncthing رؤيته داخل الحاوية.

استخدم المُجيب /DATA باعتباره المسار المستخدم في Syncthing. بعد إنشاء هذا التعيين، ينبغي أن يشير Syncthing إلى المجلدات الموجودة أسفل /DATA بدلًا من مسار التحميل الأصلي على المضيف.

أدخل المستخدم في البداية مسار المضيف داخل Syncthing

مربع الحوار «إضافة مجلد» في Syncthing يستخدم /mnt/Storage1/Documents مسارًا للمجلد
أدخل المستخدم مسارًا على المضيف لا تملكه الحاوية باعتباره مسار المجلد الداخلي لها.

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

أبلغت لوحة تحكم Syncthing عن رفض الإذن وعدم العثور على مسار المجلد /mnt/Storage1
أكد الخطأ أن مسار المجلد داخل الحاوية، وليس اسم نقطة التحميل على المضيف، هو المسار الذي يجب استخدامه داخل Syncthing.

كان المسار النهائي العامل هو /DATA/Documents

أوضح المُجيب أنه بعد تعيين محرك المضيف إلى /DATA، ينبغي أن يستخدم Syncthing:

/DATA/Documents

أو ما يعادله ~/Documents صيغة مختصرة عندما يشير مجلد Syncthing الرئيسي إلى موقع البيانات المُعيَّن.

عاد صاحب المنشور الأصلي في اليوم التالي وأكد نجاح العملية.

كان chown التكراري جزءًا من سير عمل المجتمع، وليس الحل الأساسي

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

لا تُجرِ تغييرًا تكراريًا للملكية على قرص مشترك موجود قبل أن تعرف المستخدمين والتطبيقات الذين يعتمدون بالفعل على صلاحياته.

يُسهّل ZimaOS الحالي تعيين مساحة تخزين التطبيقات

يوثّق ZimaOS الحالي مسارات المضيف والحاوية مباشرةً في إعدادات التطبيق، ويوصي بتعيين بيانات التطبيق إلى التخزين المُدار بدلًا من السماح للتطبيقات بملء قرص النظام.

استخدم نموذج مسارات التطبيقات الحالي في ZimaOS لوحدات تخزين Docker بدلًا من الاعتماد على مواقع التحميل القديمة في CasaOS.

أعاد المستخدم المصدر تثبيت Syncthing وأعاد إنشاء التعيين

بعد أن ظلت المحاولات الأولى مربكة، أجرى صاحب المنشور الأصلي تثبيتًا جديدًا لـ Syncthing، وأعاد إضافة محركات التخزين، وعيّن /mnt/Storage1 على المضيف إلى /DATA داخل الحاوية. أزال هذا الاختبار النظيف إعدادات الحاوية القديمة من عملية التشخيص.

إعدادات تطبيق Syncthing على ZimaBlade، التي تعيّن مسار المضيف /mnt/Storage1 إلى /DATA داخل الحاوية، مع قيم PUID وPGID
منح الاختبار النظيف Syncthing تعيينًا صريحًا واحدًا للتخزين الخارجي بدلًا من الاعتماد على مسار منسوخ من متصفح ملفات المضيف.

صلاحيات المضيف وحدها لم تجعل مسار الحاوية الخاطئ يعمل

تمكن المستخدم من الاتصال عبر SSH بمحرك التخزين وإنشاء مجلدات، ومع ذلك ظل Syncthing يفشل عند مطالبته باستخدام /mnt/Storage1/Documents داخليًا. هذه النتيجة السلبية مفيدة: فالقدرة على الكتابة كمستخدم المضيف لا تعني أن الحاوية تستطيع رؤية مساحة الأسماء نفسها.

يجب أن تكون رؤية الحاوية صحيحة قبل أن تتمكن معايرة الصلاحيات من حل أي مشكلة.

يُفضّل أن يستخدم ZimaOS الحالي مسارات التخزين المُدارة

هذا النقاش منشور على جهاز ZimaBlade مزوّد بمسارات تخزين على نمط CasaOS. أما ZimaOS الحالي فلديه سلوك مختلف للتخزين المُدار وواجهة أوضح لوحدات تخزين التطبيقات. على خادم حالي، استخدم مسار التخزين المحدد عبر ZimaOS بدلًا من افتراض /mnt/Storage1 أو /media/devmon سيكون موجودًا.

غيّر الصلاحيات التي يحتاجها التطبيق فعلًا فقط

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

الأسئلة الشائعة حول محرك الأقراص الصلبة الخارجي في Syncthing

لماذا أنشأ Syncthing مسار محرك الأقراص الخارجي داخل قرص النظام؟

لم يكن مسار المضيف هو المسار الذي استطاع Syncthing رؤيته داخل حاويته.

ما المسار الذي نجح بعد تعيين محرك الأقراص إلى /DATA؟

أكد المستخدم المصدر /DATA/Documents نجح الأمر.

هل كان تغيير الملكية بشكل تكراري هو الحل الوحيد؟

لا. كان الفهم الحاسم هو الفرق بين مسار المضيف ومسار الحاوية.