خطأ Oops في النواة عند تشغيل VPN: أدلة تستحق الحفظ
يتطلب تعطل عند بدء تشغيل VPN بناء النواة المطابق وأول أثر، لا لقطة شاشة للسطر الأخير. قرر ما يجب حفظه قبل إعادة التشغيل مرة أخرى.
يُعد تشغيل عميل VPN طابعًا زمنيًا مناسبًا لا سببًا، وهذا التمييز يحدد ما سيحدث بعد ذلك. عندما يقع خطأ Oops في النواة قرب تلك اللحظة، يكون الخيار بين جمع تقرير عطل صالح للاستخدام وإثارة العطل نفسه خمس مرات إضافية على جهاز إنتاجي. احفظ أربعة أشياء قبل إعادة التشغيل: بناء النواة الدقيق، وأول أثر للعطل، وحالة التلوث، ووصفًا قصيرًا لكل ما تغير في الدقيقة نفسها. أما الباقي فهو تفسير، ويمكن أن ينتظر التفسير حتى تصبح الأدلة في مكان آمن.
التقط العطل الأول، لا السطر الأخير
أول Oops في السجل هو المهم، لأن كل عطل لاحق قد يكون ضررًا جانبيًا من نواة غير سليمة أصلًا. انسخ الترويسة مع تتبع الاستدعاء، لأن الترويسة تحمل التعليمة المسببة للعطل وحالة السجلات التي تحدد مسار الشيفرة. التقرير الذي يبدأ من السطر الأخير لا قيمة له تقريبًا عند من يقرأه بعد أسبوع.
إذا كان الجهاز قد أعاد التشغيل بالفعل، فإن مخزن النواة المؤقت للتشغيل السابق يبقى غالبًا في السجل، بشرط أن يكون التخزين الدائم ممكّنًا حينها. اقرأه من الملف المحفوظ بدلًا من إعادة إنشاء الحمل، لأن إعادة إنتاج ثانية قد تطمس ما تحتاجه. وحين لا يستطيع الجهاز الاحتفاظ بسجل عبر عمليات إعادة التشغيل، فلا سبيل لظهور العطل إلا عبر طرفية تسلسلية أو netconsole.
حدّد البناء قبل قراءة أي رمز
لا معنى لأسماء الدوال والإزاحات إلا مقابل الملف الثنائي الذي أنتجها، لذا سجّل سلسلة إصدار النواة ومعرّف بناء التوزيعة معًا. ملف الرموز من بناء مختلف يشير إلى السطر الخطأ بثقة تامة، وهذا أسوأ من عدم وجود أي رمز. احتفظ بإصدار حزمة النواة، لا بالرقم الأصلي فقط، لأن التوزيعات تُرجع تعديلات كثيرة.
تستحق الوحدات خارج الشجرة سطرًا خاصًا بها في السجل، لأن نواة ملوّثة تحدّ مما يُسمح للمشرف باستنتاجه. اقرأ قيمة التلوث بدلًا من استنتاجها من قائمة الوحدات.
التلوث غير الصفري ليس اتهامًا ولا يجعل التقرير بلا قيمة. إنه يخبر القارئ بالوحدات التي كانت محمّلة عند وقوع العطل، وبعض العلامات تجعل التقرير أقل أولوية بحكم السياسة لا بحكم التقدير. سجّل القيمة وأسماء الوحدات وما إذا كان العتاد والحمل نفسهما قد شغّلا نواة بدونها يومًا. هذه المقارنة الأخيرة هي ما يفصل تراجعًا جديدًا عن خلل قديم.
افصل المحفّز عن الخلل
تشغيل النفق يمارس عادةً مسارًا كان موجودًا بالفعل: برنامج تشغيل شبكة، أو تخصص طابور، أو ميزة تفريغ، أو حالة طاقة. المحفّز يفسّر متى يظهر العطل، لا أي شيفرة خاطئة، ومعاملة المحفّز كسبب تؤدي إلى سلسلة تغييرات في الإعدادات لا تصلح شيئًا.
الصورة السابقة العاملة دليل، لا برهان. غيّر مكوّنًا واحدًا في كل تشغيل عند المقارنة، واحتفظ بالنتائج في مكان يبقى بعد الجهاز.
تحقّق مما يمكن للمشرف استخدامه فعليًا
اقرأ التقرير كما يقرأه غريب قبل إرساله. إذا كان الإعداد والتسلسل الدقيق وهوية البناء موجودة، والبيانات السرية مزالة، فالتقرير صالح للاستخدام. إذا كان لقطة شاشة لتتبع مكدس، فسيعود بطلب للمعلومات نفسها. يصف دليل تعقّب أخطاء النواة كيف يبدو تتبع مفيد مع رموز مطابقة.
uname -r
cat /proc/sys/kernel/tainted
journalctl -k -b -1 --no-pager | sed -n '/BUG:/,/Call Trace/p'
dmesg -T | grep -A 40 'RIP:'
كل أمر أعلاه يقرأ الحالة فقط، وينبغي تشغيل الأولين قبل إعادة التشغيل التالية إن كان الجهاز ما زال يستجيب لهما. وحيث لا يكون السجل دائمًا، فالأمران الأولان هما الوحيدان اللذان سيعملان مرة أخرى أبدًا.
احجب المفاتيح وكلمات المرور والحركة غير ذات الصلة، لكن أبقِ أسماء الدوال والإزاحات التي يحتاجها أحدهم لقراءة التتبع. أرسل المواد عبر مسار الإبلاغ الذي ينطبق على التوزيعة أو النواة، لا عبر لصق عام مرفق باسم مضيف. ثم انتظر سؤالًا بدلًا من حصاد مزيد من الأعطال، لأن العطل المحدد مقابل بناء مطابق هو النتيجة الوحيدة التي تدفع التقرير إلى الأمام. إذا لم يعد شيء، فالبديل هو إعادة إنتاج مضبوطة على عتاد احتياطي، لا على الجهاز الذي يعتمد عليه آخرون.