مجازی سازی و Cloud

تحلیل خطای صفحه بنفش (PSOD) در هاستهای ESXi

یکی از خطاهای ناهنجاری که اکثر مدیران سیستم های مجازی از آن رنج می برند، مواجه شدن با صفحه مرگبار بنفش یا PSOD است که خاطره صفحه آبی مرگ سیستم های ویندوزی را زنده می کند. پرداختن به اینکه چرا یک سرور با خطای وحشتناک PSOD مواجه می شود خود دلایل متعددی می تواند داشته باشد که متاسفانه بسیاری از ادمین ها در بسیاری از مواقع از پاسخ منطقی به آن درمانده اند. در این مقاله قصد دارم تا با کنکاشی دقیق تر، این خطای مهلک را بررسی، به سراغ دلایل رخ دادن آن رفته و تاثیرات منفی که بر روی سرویسها می گذارد را مرور کنم و در پایان به معرفی یک راهکار جدید برای مقابله و جلوگیری از آن خواهم پرداخت. 

خطای PSOD چیست؟

خطای PSOD در یک صفحه بنفش ظاهر می شود که به آن صفحه بنفش مرگ (Purple Screen of Death) می گویند (چیزی شبیه صفحه آبی مرگ در سیستم های مایکروسافتی). می توان آنرا به نوعی یک صفحه عیب یابی دانست که ESXi آنرا در هنگامیکه کرنل، یک خطای مهلک را شناسایی می کند نمایش می دهد. در این خطا، کرنل در وضعیتی است که نه می تواند بصورت امن و کامل از آن خارج شود و نه قادر به ادامه دادن و اجرای برنامه ها بدون ریسک از دست رفتن داده ها است. در این خطا، وضعیت حافظه در زمانیکه Crash صورت گرفته و همچنین جزئیات اضافه تری نمایش داده می شود که تماما برای خطایابی و شناسایی دلایل این crash بسیار مهم هستند. می توان از نسخه، نوع exception، محتوای دامپ رجیستر شده، اپ تایم سیستم، پیام های خطا و اطلاعاتی درباره core dump آگاه شد. این صفحه در کنسول نمایش یک سرور قابل رویت می باشد.

 

دلایل و اینکه چرا PSOD رخ می دهد

خطای PSOD یک مشکل کرنلی است. در واقع، vmkernel هاست این مقدار امنیتی را در پاسخ به یک رویداد یا خطایی که در آن امکان بازیابی و حیات وجود ندارد فعال می نماید. در شرایط مذکور، امکان ادامه و اجرای سرویس ها بدون اختلال در سرویس ها یا ماشین های مجازی وجود دارد. به عبارتی ساده تر، هاست های ESXi به وضعیت خراب و corrupted در می آیند.

رایج ترین علت برای خطای PSOD ایتمهای ذیل است:

۱- مشکلات سخت افزاری که اغلب مربوط به پردازشگر و حافظه می باشند. این خطا بصورت عادی از MCE یا NMI سرچشمه می گیرد.

  • MCE” – Machine Check Exception, which is a mechanism within the CPU to detect and report hardware issues. There are important details for identifying the root cause of the issue in the codes displayed on the purple screen.
  • NMI” – non-maskable interrupt, which is a hardware interrupt that cannot be ignored by the processor. Since NMI is a very important message about a HW failure, the default response starting with ESXi 5.0 and later is to trigger a PSOD. Earlier versions were just logging the error and continuing. Same as with MCEs, purple screen caused by NMI will provide important codes that are crucial for troubleshooting.

۲- باگ ها و ضعفهای امنیتی

۳٫ درایورهای غیراستاندارد با رفتار نادرست و غلط. 

(ex: KB2146526 , KB2148123)

باید بدانید که شما نیز می توانید یک خطای PSOD را بصورت دستی ایجاد کنید. برای کنجکاوی بیشتر و اینکه ببینید چه اتفاقی می افتد به هاست ESXi از طریق DCUI یا پروتکل SSH متصل شوید و در ادامه دستور زیر را وارد کنید.

vsish -e set /reliability/crashMe/Panic

تاثیرات PSOD چیست؟

زمانی که خطا رخ می دهد و هاست Crash می کند، سرور تمام سرویس های در حال اجرا را با یکدیگر خاتمه داده و همه ماشین های مجازی مقیم بر روی هاست را متوقف می کند. در حقیقت، ماشین های مجازی بصورت استاندارد خاموش نمی شوند و می توان خاموشی ناگهانی آنها را (Power off) متصور شد. حال اگر این هاست عضوی از یک کلاستر باشد که روی آن قابلیت HA پیکربندی شده باشد، ماشین های مجازی بر روی سایر هاست های داخل کلاستر راه اندازی خواهند شد. فارغ از این ماشین های مجازی، بایستی برخی نرم افزارهای حساس از جمله بانکهای اطلاعاتی، سرور ایمیل، سرور تهیه پشتیبان و … را نیز متصور شد که بصورت غیراستاندارد دچار خاموشی می شوند و این فرآیند مخرب بر روی آنها نیز تاثیرگذار خواهد بود. علاوه بر موارد فوق، سرویس های دیگری که توسط این هاست ارائه می شوند نیز خاتمه می یابند. برای مثال، اگر هاست شما بخشی از یک کلاستر ذخیره سازی VSAN باشد، تاثیر PSOD را بر روی VSAN نیز مشاهده خواهید کرد. 

شاید یکی از بدترین تاثیرات PSOD آن باشد که شما اعتمادتان به زیرساخت مجازی را از دست می دهید و نگرانی های خاصی برای شما بوجود می آید. بله، شما می توانید سیستم را با راه اندازی مجدد بازیابی کنید و تا زمانیکه ریشه مشکل را شناسایی نکنید، این اتفاق ممکن است بارها و بارها شما را متوقف نماید.

هنگام رخ دادن PSOD چه کاری باید انجام داد

۱- آنالیز و تحلیل پیام خطای PSOD

یکی از مهمترین اقداماتی که لازم است در مواجه شدن با PSOD انجام دهید، گرفتن یک اسکرین شات از پیام خطای ظاهر شده است. اگر شما بصورت ریموت از طریق IMM/iLO/iDRAC و … به کنسول هاست وصل شده باشید، براحتی می توانید اسکرین شات تهیه کنید، در غیر اینصورت از دوربین موبایل تان کمک بگیرید زیرا داشتن این اطلاعات در تحلیل و ریشه یابی خطا بسیار سودمند خواهد بود. 


۲- با پشتیبانی VMware تماس بگیرید.

پیش از آنکه سراغ جستجوها و خطایابی های بیشتر بروید، به شما توصیه می شود که با پشتیبانی شرکت VMware تماس بگیرید، البته اگر قرارداد پشتیبانی دارید! 

۳- هاست ESXi متاثرشده را راه اندازی مجدد کنید.

به منظور بازیابی هاست، لازم است تا یکبار آنرا راه اندازی و ریبوت کنید. همچنین پیشنهاد می کنم تا زمانیکه یک RCA کامل را انجام نداده اید و دلایل خطا را شناسایی و رفع نکرده اید، آنرا در وضعیت Maintenance Mode نگه دارید. اگر نمی تواید هاست را در این مد نگه دارید، حداقل از یک رول DRS مناسب استفاده کنید تا قرار گرفتن ماشین های غیرمهم روی این هاست را پیکربندی کنید. اینکار باعث می شود تا در صورتیکه یک PSOD دیگر رخ دهد، آسیب های کمتری بر روی ماشین های مجازی مهم را شاهد باشید.

۴- گرفتن Core Dump

بعد از آنکه هاست بوت شد، شما باید Coredump را جمع آوری کنید. Coredump همان vmkernel-zdump است که یک فایل شامل لاگ ها با جزئیات بیشتر است و برای خطایابی های بیشتر سودمند است. حتی ممکن است علت کرش در پیام های PSOD کاملا آشکار و واضح باشد که اینکار را در مرحله ۱ آنالیز و تحلیل کردید. بسته به نوع پیکربندی، ممکن است Core dump در یکی از این سه شکل را داشته باشید.

a. On the scratch partition
b. As a .dump file on one of the host’s datastores
c. As a .dump file on the vCenter – through the netdump service

فایل Coredump بصورت ویژه اگر هاست بصورت اتوماتیک ریست شود، مهم است زیرا شما امکان رویت و دسترسی به صفحه خطای PSOD را از دست داده اید. شما میتوانید یک کپی از فایل Core dump را از هاست ESXi با استفاده از SCP استخراج کنید و انرا با یک ادیتور متنی مانند Notepad++ ویرایش کنید. محتوای این فایل، شامل محتوای حافظه در زمانی که کرش صورت گرفته است می باشد که شما آنرا در صفحه بنفش نیز دیده اید. این فایل گاها توسط تیم پشتیبانی VMware بصورت کامل درخواست می شود. 


۵- Decipher کردن خطا

مهمترین نشانه، و اولین نکته ای که باید با آن شروع کنید، پیام خطای تولید شده توسط صفحه بنفش است. 

Exception Type 0 #DE: Divide Error
Exception Type 1 #DB: Debug Exception
Exception Type 2 NMI: Non-Maskable Interrupt
Exception Type 3 #BP: Breakpoint Exception
Exception Type 4 #OF: Overflow (INTO instruction)
Exception Type 5 #BR: Bounds check (BOUND instruction)
Exception Type 6 #UD: Invalid Opcode
Exception Type 7 #NM: Coprocessor not available
Exception Type 8 #DF: Double Fault
Exception Type 10 #TS: Invalid TSS
Exception Type 11 #NP: Segment Not Present
Exception Type 12 #SS: Stack Segment Fault
Exception Type 13 #GP: General Protection Fault
Exception Type 14 #PF: Page Fault
Exception Type 16 #MF: Coprocessor error
Exception Type 17 #AC: Alignment Check
Exception Type 18 #MC: Machine Check Exception
Exception Type 19 #XF: SIMD Floating-Point Exception
Exception Type 20-31: Reserved
Exception Type 32-255: User-defined (clock scheduler)

از آنجا که خطای کرنل توسط پردازشگر مدیریت می شود، برای اطلاعات بیشتر درباره استثناها و موارد خاص مقاله زیر را درمورد پردازشگرها ببینید.

 Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 1: Basic Architecture

 Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A.

مهمترین آیتم های رایج در مقالات متفاوتی در VMware پوشش داده شده است که در جدول زیر به آنها ارجاع داده شده است. 

Example Error Detailed KB Article
LINT1/NMI (motherboard nonmaskable interrupt), undiagnosed Using hardware NMI facilities to troubleshoot unresponsive hosts (1014767)
Panic requested by one or more 3rd party NMI handlers
COS Error: Oops Understanding an “Oops” purple diagnostic screen (1006802)
Lost Heartbeat Understanding a “Lost Heartbeat” purple diagnostic screen (1009525)
ASSERT bora/vmkernel/main/pframe_int.h:527 Understanding ASSERT and NOT_IMPLEMENTED purple diagnostic screens (1019956)
NOT_IMPLEMENTED /build/mts/release/bora-84374/bora/vmkernel/main/util.c:83 Understanding ASSERT and NOT_IMPLEMENTED purple diagnostic screens (1019956)
Spin count exceeded (iplLock) - possible deadlock Understanding a “Spin count exceeded” purple diagnostic screen (1020105)
PCPU 1 locked up. Failed to ack TLB invalidate Understanding a Failed to ack TLB invalidate purple diagnostic screen (1020214)
#GP Exception(13) in world 4130:helper13-0 @ 0x41803399e303 Understanding Exception 13 and Exception 14 purple diagnostic screen events (1020181)
#PF Exception type 14 in world 136:helper0-0 @ 0x4a8e6e
Machine Check Exception: Unable to continueHardware (Machine) Error Decoding Machine Check Exception (MCE) output after a purple screen error (1005184)
Hardware (Machine) Error
PCPU: 1 hardware errors seen since boot (1 corrected by hardware)

۶- بررسی لاگ ها

گاهی ممکن است دلیل PSOD از روی نگاه کردن به پیام های صفحه بنفش مشهود و واضح نباشد یا حتی در Core dump هم نتوانید سرنخ خوبی بدست بیاورید. بنابراین، جای بعدی که باید آنرا با دقت بررسی و تحلیل کنید، لاگ های هاست ESXi است که بایستی بصورت خاص در زمای که PSOD ظاهر شده است آنها را مورد آنالیز قرار دهید. اگر شما مدیریت یک زیرساخت پیشرفته را عهده دارد هستید، پیشنهاد می کنم از راهکارهای مدیریت لاگ مخصوص مانند Log Insight/Solarwinds LEM یا … استفاده کنید که امکان مطالعه ساده لاگ ها را فراهم می کند. 

جالبترین لاگ هایی که می توانید از آنها استفاده کنید

Components Location What is it
System messages /var/log/syslog.log Contains all general log messages and can be used for troubleshooting.
VMkernel /var/log/vmkernel.log Records activities related to virtual machines and ESXi. Most PSOD relevant entries will be in this log, so pay special attention to it.
ESXi host agent log /var/log/hostd.log Contains information about the agent that manages and configures the ESXi host and its virtual machines.
VMkernel warnings /var/log/vmkwarning.log Records activities related to virtual machines. Watch for heap exhaustion(Heap WorkHeap) related log entries.
vCenter agent log /var/log/vpxa.log Contains information about the agent that communicates with vCenter, so you can use it to spot tasks triggered by the vCenter and might have caused the PSOD.
Shell log /var/log/shell.log Contains a record of all commands typed, so you can correlate the PSOD to a command executed.

روش جلوگیری از آن

اما یکی از بهترین راهکارها برای جلوگیری از رخ دادن این مشکل، نصب به روزرسانی های امنیتی است. در واقع، مشکل بسیاری از نرم افزارهای مرتبط با PSOD توسط پچ ها رفع می گردد، از این رو از نصب آخرین نسخه و به روز بودن وصله های امنیتی و پچ های ضروری اطمینان حاصل کنید.

همچنی سرورهایتان را در لیست Hardware Compatibility شرکت VMware بررسی کنید تا از ناسازگاری آنها مطمئن شوید. البته گاهی درایورهای اشتباه که رفتار نادرستی دارند ممکن است دلیل اصلی بروز یک PSOD باشند، از این رو، لازم است تا بصورت دوره ای و مستمر وب سایت شرکت های تولید کننده تجهیزات را بررسی کنید تا Firmware و Driver های به روزشده را نصب کنید. با توجه به اهمیت نصب این به روزرسانی ها، پچ ها و وصله های نرم افزاری، به شما پیشنهاد استفاده از نرم افزار Runecast را می کنم. 

با بکارگیری نرم افزار Runecast که مدتی قبل با آن آشنا شدم، بصورت مستمر و منظم می توانید تمام KB های موجود در سایت VMware را آنالیز کنید که شامل بیش از ۳۰۰۰۰ مقاله منتشر شده است. از این نرم افزار جهت پایش پیشگیرانه و مانیتور کردن KBها می توانید استفاده کنید که شما را قادر می سازد تا از مشکلات و خطاهای این چنینی دوری کنید. البته در مقالات دیگری به معرفی دقیق تر این نرم افزار و بحث در مورد استفاده از این راهکار جهت مقاوم سازی و امن کردن زیرساخت مجازی خواهم پرداخت.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.