اذهب إلى المحتوى

تفريغ انهيار النواة Kernel Crash في أوبنتو


عبد اللطيف ايمش

يشير تفريغ انهيار النواة (Kernel Crash Dump) إلى جزء من محتويات ذاكرة الوصول العشوائي غير الدائمة التي تُنسَخ إلى القرص عندما يتعرض تنفيذ النواة إلى اضطراب ما.

kernel-crash-dump.thumb.png.960aff9605a6

الأحداث الآتية تسبب اضطراب النواة:

  • ارتياع النواة (Kernel Panic).
  • تقطعات غير مقنَّعة (Non Maskable Interrupts‏ [NMI]).
  • استثناءات تفحص الجهاز (Machine Check Exceptions ‏[MCE]).
  • عطب في العتاد.
  • تدخل يدوي.

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

آلية تفريغ انهيار النواة

عندما يحدث ارتياع النواة، فإن النواة تعتمد على آلية kexec لتعيد الإقلاع بسرعة لنسخةٍ جديدةٍ من النواة في القسم المحفوظ من الذاكرة المحجوزة عندما أقلع النظام (انظر في الأسفل)، وهذا يسمح لمنطقة الذاكرة المتبقية أن تبقى دون أن تُلمَس لنسخها نسخًا آمنًا إلى وسيطة التخزين.

التثبيت

تُثبَّت أداة تفريغ انهيار النواة بالأمر الآتي:

sudo apt-get install linux-crashdump

الضبط

عدِّل الملف ‎/etc/default/kdump-tool مضيفًا السطر الآتي:

USER_KDUMP=1

يجب إعادة إقلاع النظام بعد ذلك.

التحقق

للتأكد من أن آلية تفريغ انهيار النواة مفعَّلة، فهنالك عدِّة أمور يجب التحقق منها، تأكد أولًا من أن مُعامِل الإقلاع crashkernel موجودٌ (لاحظ أن الأسطر الآتية قد قُسِّمَت لكي تظهر بشكلٍ سليم):

cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.2.0-17-server root=/dev/mapper/PreciseS-root ro
   crashkernel=384M-2G:64M,2G-:128M

لمعامل crashkernel الشكل العام الآتي:

crashkernel=<range1>:<size1>[,<range2>:<size2>,...][@offset]
   range=start-[end] 'start' is inclusive and 'end' is exclusive.

لذا، لمعامل crashkernel الذي وجدناه في ملف ‎/proc/cmdline، سيكون لدينا:

crashkernel=384M-2G:64M,2G-:128M

السطر السابق يعني الآتي:

  • إذا كانت قيمة الذاكرة في النظام أقل من 384 ميغابايت، فلا تُبقي على شيء (هذه هي حالة «الإنقاذ» [rescue]).
  • إذا كانت قيمة الذاكرة في النظام بين 384 ميغابايت و 2 غيغابايت (بما فيها 2 غيغابايت)، فحافظ على 64 ميغابايت.
  • إذا كان حجم الذاكرة في النظام أكبر من 2 غيغابايت، فحافظ عندها على 128 ميغابايت.

ثانيًا، يجب التأكد من أن النواة قد حافظت على مكان الذاكرة المطلوبة للأداة kdump باستخدام:

dmesg | grep -i crash
...
[ 0.000000] Reserving 64MB of memory at 800MB for crashkernel (System RAM: 1023MB)

اختبار آلية تفريغ انهيار النواة

تحذير: سيؤدي اختبار آلية تفريغ انهيار النواة إلى إعادة إقلاع النظام، وقد يسبب ذلك فقدانًا للبيانات في بعض الأحيان إذا كان النظام تحت حِملٍ شديد؛ إذا أردت اختبار الآلية فتأكد من أن نظامك لا يجري أيّة عمليات مهمة، أو أنَّه تحت حمل خفيف جدًا.

تأكد من أن آلية SysRq مُفعَّلة بالنظر إلى قيمة معامل النواة في ‎/pro/sys/kernel/sysrq:

cat /proc/sys/kernel/sysrq

إذا أُعيدَت القيمة 0، فإن تلك الميزة معطلة، وعليك تنفيذ الأمر الآتي لتفعيلها:

sudo sysctl -w kernel.sysrq=1

بعد فعل ذلك، يجب أن تصبح المستخدم الجذر حيث لا يكفي استخدام sudo؛ وعليك تنفيذ الأمر التالي كمستخدم جذر:

 echo c > /proc/sysrq-trigger 

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

إن ناتج فحصٍ عادي سيكون شبيهًا بما يلي:

sudo -s
[sudo] password for ubuntu:
# echo c > /proc/sysrq-trigger
[ 31.659002] SysRq : Trigger a crash
[ 31.659749] BUG: unable to handle kernel NULL pointer dereference at               (null)
[ 31.662668] IP: [<ffffffff8139f166>] sysrq_handle_crash+0x16/0x20
[ 31.662668] PGD 3bfb9067 PUD 368a7067 PMD 0
[ 31.662668] Oops: 0002 [#1] SMP
[ 31.662668] CPU 1
....

لقد اُقتطِعَت بقية السجل، لكن يجب أن تشاهد أن النظام قد أعيد إقلاعه في مكان ما في السجل، حيث سترى السطر الآتي:

Begin: Saving vmcore from kernel crash ...

عند الإكمال، سيُعاد تشغيل النظام لحالته الاعتيادية، وستجد ملف تفريغ انهيار النواة في مجلد ‎/var/crash:

ls /var/crash
linux-image-3.0.0-12-server.0.crash

مصادر

تفريغ انهيار النواة هو موضوع واسع يتحاج إلى خبرات في نواة لينُكس، تستطيع إيجاد المزيد من المعلومات حول الموضوع في:

ترجمة -وبتصرّف- لـ Kernel Crash Dump.


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...