روشن کردن VMها در ESXi Shell

تا به حال برای شما پیش آمده که تمام VMها خاموش شده باشند و به دلایلی امکان دسترسی به vCenter یا رابط کاربری وب ESXi را نیز نداشته باشید؟ این اتفاق چندین بار برای من اتفاق افتاده، برای همین روشن کردن ماشین‌های مجازی از طریق ESXi Shell می‌تواند کاربردی و نجات دهنده باشد. هیچوقت نمی‌دانید چه زمان به آن احتیاج پیدا می‌کنید! طبق تجربه من، اتفاقات این چنینی به دلیل برنامه ریزی ضعیف یا جابجایی بعضی از تجهیزات (که در ایران بسیار اتفاق می‌افتد) رخ می‌دهد. در ادامه مراحل لازم برای ورود به ESXi Shell و روشن کردن VMها را توضیح خواهم داد.

ورود به ESXi Shell

شاید باور آن سخت باشد، ولی تعداد زیادی از ادمین‌های VMware نمی‌دانند چطور باید محیط Command-Line یا همان ESXi Shell را در DCUI باز کرد. فرض کنید یک یا چند هاست ESXi را به سایت جدیدی منتقل کرده‌اید و هنوز بعضی از تنظیمات شبکه به درستی انجام نشده و یا مشکلاتی برای اتصال به شبکه، برای مدیریت هاست‌های ESXi وجود دارد و صرفاً امکان مدیریت ماشین‌های مجازی را ندارید، در این زمان ESXi Shell به کمک شما خواهد آمد. زمانی که هاست ESXi را روشن می‌کنیم در ابتدا صفحه DCUI معروف را که همه با آن آشنایی داریم، مشاهده خواهیم کرد، امّا قبل از اینکه وارد ESXi Shell بشویم باید کار دیگری انجام داد. دکمه F2 کیبورد را فشار داده تا منوی تنظیمات نمایش داده شود.

صفحه مشهور و محبوب DCUI

حالا گزینه Troubleshooting Options را انتخاب می‌کنیم و ESXi Shell را فعال می‌کنیم و سپس صفحه اصلی DCUI بازگشته و دکمه ALT+F1 را فشار داده و پسورد root را وارد می‌کنیم تا وارد ESXi Shell شویم.

با فشردن دکمه ALT+F2 وارد ESXi Shell خواهیم شد

روشن کردن VMها در ESXi Shell

برای روشن و خاموش کردن VMها باید ابتدا VMID آنها را داشته باشیم، به عنوان مثال با استفاده از دستور زیر می‌توان VMID ماشین‌های مجازی که در نام آنها عبارت “DC” وجود دارد را پیدا کرد:

vim-cmd vmsvc/getallvms | grep DC

VMID همان شماره‌ایست که در اولین ستون از سمت چپ قرار دارد؛ یعنی اعداد 2 و 3 حالا که VMID موردنظر را در اختیار داریم، می‌توان با استفاده از دستور زیر وضعیت هر کدام از آنها را از حیث روشن یا خاموش بودن، بررسی کرد:

vim-cmd vmsvc/power.getstate 2

حالا که از خاموش بودن VM موردنظر مطلع شدیم، می‌توان با استفاده از دستور زیر آن را روشن کرد:

vim-cmd vmsvc/power.on 2

حالا می‌توانیم با استفاده از دستور قبلی نیز از روشن بودن ماشین مجازی اطمینان حاصل کنیم. بدیهی است که در این دستورات باید به جای عدد 2، VMID ماشین مجازی موردنظر خود را وارد نمایید.

در صورتی قصد دارید ماشین مجازی را Graceful Shutdown کنید، باید عبارت power.shutdown را در انتهای دستور قرار دهید و در صورتی که قصد دارید VM را مستقیماً خاموش کنید باید از دستور power.off استفاده نمود. همچنین در نظر داشته باشید برای انجام عملیات Graceful Shutdown حتماً باید روی ماشین مجازی VMWare Tools نصب شده باشد.

vim-cmd vmsvc/power.shutdown 2

فرض کنید هاست ESXi شما هنگ کرده و در شرایط فعلی عملکرد درستی ندارد به طوری که امکان اتصال و مدیریت آن از طریق رابط کاربری وب و یا PowerCLI نیز وجود ندارد. بنابراین برای محدود کردن آسیب وارده به VMها بهتر است قبل Reboot کردن ESXi تمامی ماشین‌های مجازی روی آن را خاموش کنیم. برای این کار می‌توان وارد ESXi Shell شده و با استفاده از دستور vim-cmd هر ماشین را خاموش کنیم، دقیقاً مثل کاری که در بالا انجام دادیم. ولی اگر تعداد VMهای روی هاست زیاد باشند چطور؟ در این حالت می‌توانید با استفاده از یک اسکریپت ساده، VMID تمام ماشین‌های مجازی را به دست آورده و تک تک آن‌ها را با استفاده از دستور vim-cmd خاموش کنید. این اسکریپت چیزی شبیه به عبارات زیر خواهد بود، تنها کافیست پس از تایپ هر خط Enter را بزنید و بعد از اینکه عبارت “done” را تایپ کنید، اسکریپت اجرا خواهد شد.

for i in $(vim-cmd vmsvc/getallvms | grep DC | awk '{ print $1 }')
do
vim-cmd vmsvc/power.off $i
done

حرف آخر

همانطور که قبلاً گفتم، هیچوقت نمی‌دانید چه موقع با سناریویی برخورد می‌کنید که در آن نیاز به مدیریت VMها از طریق ESXi Shell دارید. من قبلاً در این موقعیت قرار گرفته‌ام و دستوراتی که در این مقاله به آن‌ها اشاره کردم بسیار کاربردی بوده است؛ حتی شاید ذخیره این مقاله در بوکمارک مرورگرتان ایده بدی نباشد! نکته بعدی اینکه برای بهبود امنیت ESXi Shell یا SSH می‌توان قبل از فعال کردن آن، تنظیمات Timeout (که در همان قسمت Troubleshooting Options قرار دارد) را انجام داد. به صورت پیشفرض Timeout غیرفعال است و می‌توانید آنرا به مقدار زمان دلخواه تنظیم کنید. این تنظیمات به شما این امکان را می‌دهد تا مشخص کنید که یک Session غیرفعال تا چه زمانی باز بماند و پس از گذشت این زمان ESXi به طور خودکار دسترسی به Shell را غیرفعال می‌کند.