البحث في الموقع
المحتوى عن 'انهيار النواة'.
-
يشير تفريغ انهيار النواة (Kernel Crash Dump) إلى جزء من محتويات ذاكرة الوصول العشوائي غير الدائمة التي تُنسَخ إلى القرص عندما يتعرض تنفيذ النواة إلى اضطراب ما. الأحداث الآتية تسبب اضطراب النواة: ارتياع النواة (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/cmdlineBOOT_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مصادرتفريغ انهيار النواة هو موضوع واسع يتحاج إلى خبرات في نواة لينُكس، تستطيع إيجاد المزيد من المعلومات حول الموضوع في: توثيق kdumpالأداة crashمقالة «تحليل تفريغ انهيار نواة لينُكس» (هذه المقالة مبنية على فيدورا، لكنها تشرح تحليل تفريغ النواة جيدًا).ترجمة -وبتصرّف- لـ Kernel Crash Dump.