سؤال

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

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

هل هناك مكتبة أو مجموعة من نظام الملفات/المكتبة التي يمكن أن تساعدني بشكل أفضل في حل هذا النوع من المشاكل؟أم هل ينبغي عليّ فقط استخدام ملف نصي بتنسيق يشبه CSV؟

هل كانت مفيدة؟

المحلول

ونحن نستخدم أن syslogd سهل القديمة إلى قسم YAFFS2 على فلاش NAND، يبدو للعمل بشكل جيد: عندما يتم إرسال الرسائل إلى مسجل ويتم إزالة السلطة فورا بعد (<100MS) الرسالة هناك ولم يظهر السجل ل فاسد.

ويستند هذا على الملاحظة بدلا من بلدي مع العلم صراحة بأن كل شيء سيكون دائما متسقة حسب التصميم، والعقل.

نصائح أخرى

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

إذا كنت لا تحتاج للبحث داخل النظام، ثم CSV يعمل تماما.

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

والملفات اثنان CSV / النص. بدء زوج جديد في كل مرة إعادة تشغيل النظام. كتابة كل حدث إلى الملف الأول، بمسح ملف لتخزين وإرسال السجل إلى الملف الثاني، ثم طرد مرة أخرى.

وبهذه الطريقة، إذا تعطل أثناء الكتابة الأولى كافة البيانات في النسخة الثانية (حتى أن الكتابة) سيظل هناك.

تأكد من الاحمرار هو نظام ملف كامل دافق وليس فقط دافق عازلة clib.

وربما أيضا وضع الملفات على أنظمة الملفات منفصلة. حجز مساحة قبل ما تحتاجه يمكن أن يساعد أيضا في تسريع هذه العملية.

ما هي التسهيلات المتاحة لك؟الخيار الأفضل هو في كثير من الأحيان تسجيل الدخول إلى مورد خارجي، على سبيل المثال عبر سجل النظام، أو SNMP، أو المقبس الخام، أو المنفذ التسلسلي.وهذا يحميك من السجلات غير السارة على الجهاز نفسه.

إذا كنت بحاجة إلى تخزين السجلات داخليًا، فقد وجدت أن الملفات ذات النص العادي والقابلة للقراءة من قبل الإنسان هي الخيار الأفضل في الأجهزة المضمنة.تعتبر دورة "الكتابة/المسح" سريعة، ولا توجد حاجة إلى أدوات لصيانتها، ويمكنك مراقبتها في الوقت الفعلي.إذا كان حجم الملف يمثل مشكلة، فيمكنك وضع الطابع الزمني باستخدام عدد صحيح بدلاً من النص المنسق، ويمكنك استخدام "معرف الحدث" الرقمي لاختصار كل سجل (اترك فقط البيانات الخاصة بالمثيل كنص).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top