VIRT-WHAT(1) Virtualization Support VIRT-WHAT(1)

virt-what - تشخیص نوع و فناوری مجازی‌سازی سیستم جاری

virt-what [options]

"virt-what" یک اسکریپت شل است که می‌تواند برای تشخیص این‌که آیا برنامه در یک ماشین مجازی در حال اجرا است یا خیر، استفاده شود.

این برنامه فهرستی از «حقایق» (facts) درباره ماشین مجازی را بر اساس روش‌های اکتشافی (heuristics) در خروجی چاپ می‌کند. در هر خط یک حقیقت چاپ می‌شود.

اگر هیچ متنی چاپ نشود و اسکریپت با کد ۰ (بدون خطا) خارج شود، می‌تواند به این معنی باشد که یا برنامه روی سخت‌افزار واقعی (bare-metal) در حال اجرا است، یا در نوعی ماشین مجازی اجرا می‌شود که برنامه از آن اطلاعی ندارد یا قادر به تشخیص آن نیست.

یک سرویس رایانش ابری مبتنی بر علی‌بابا کلود (Alibaba Cloud).

وضعیت: مشارکت توسط Weisson.

سرویس‌های وب آمازون (Amazon Web Services).

توجه داشته باشید که virt-what این حقیقت را برای نمونه‌های baremetal در AWS نیز چاپ می‌کند، که ممکن است شما آن را یک مجازی‌سازی واقعی در نظر نگیرید. در این حالت، سایر حقایق (مانند "kvm" یا "xen") وجود نخواهند داشت.

وضعیت: مشارکت توسط Qi Guo و Vitaly Kuznetsov، تأیید شده توسط RWMJ.

یک مهمان در هایپروایزر bhyve (هایپروایزر FreeBSD).

وضعیت: مشارکت توسط Leonardo Brondani Schenkel.

مهمان درون یک کانتینر CRI-O در حال اجرا است.

وضعیت: پیشنهاد شده توسط Alessandro Taufer، تأیید شده توسط RWMJ و Xiaodai Wang.

یک کانتینر داکر (Docker).

وضعیت: تأیید شده توسط Charles Nguyen.

سیستم بر روی Google Cloud Platform / Google Compute Engine در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

هایپروایزر مایکروسافت هایپروی (Microsoft Hyper-V).

وضعیت: تأیید شده توسط RWMJ.

یک سیستم مهمان روی IBM POWER KVM.

وضعیت: مشارکت توسط Adrian Likins.

یک LPAR (پارتیشن سخت‌افزاری) در IBM POWER در حالت اشتراکی (shared) یا اختصاصی (dedicated).

وضعیت: مشارکت توسط Adrian Likins.

یک سیستم پارتیشن‌بندی سخت‌افزاری IBM SystemZ (یا سایر سیستم‌های S/390). حقایق تکمیلی فهرست‌شده در ادامه نیز ممکن است چاپ شوند.
لینوکسی که مستقیماً روی یک سیستم پارتیشن‌بندی سخت‌افزاری IBM SystemZ در حال اجرا است.

انتظار می‌رود این یک پیکربندی بسیار نامعمول باشد - اگر چنین نتیجه‌ای دیدید، باید با تردید با آن برخورد کنید.

وضعیت: تأیید نشده.

لینوکسی که مستقیماً روی یک LPAR در یک سیستم پارتیشن‌بندی سخت‌افزاری IBM SystemZ در حال اجرا است.

وضعیت: تأیید شده توسط Thomas Huth.

یک مهمان z/VM که در یک LPAR روی یک سیستم پارتیشن‌بندی سخت‌افزاری IBM SystemZ در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ با استفاده از یک مهمان فدورا در z/VM.

یک مهمان KVM که روی یک سیستم سخت‌افزاری IBM System Z در حال اجرا است.

وضعیت: مشارکت توسط Thomas Huth.

مهمان بر روی Illumos با لایه شبیه‌سازی فراخوان‌های سیستمی لینوکس (Linux syscall emulation layer) در حال اجرا است.

وضعیت: مشارکت توسط Steve Mokris.

به نظر می‌رسد مهمان روی یک سیستم لینوکس SPARC با پشتیبانی از سرور Oracle VM برای SPARC (دامنه‌های منطقی یا Logical Domains) در حال اجرا است.

وضعیت: مشارکت توسط Darren Kenny.

دامنه کنترلی (control domain) در سرور Oracle VM برای SPARC (دامنه‌های منطقی).

وضعیت: مشارکت توسط Darren Kenny.

دامنه مهمان (guest domain) در سرور Oracle VM برای SPARC (دامنه‌های منطقی).

وضعیت: مشارکت توسط Darren Kenny.

دامنه ورودی/خروجی (I/O domain) در سرور Oracle VM برای SPARC (دامنه‌های منطقی).

وضعیت: مشارکت توسط Darren Kenny.

دامنه ریشه (Root domain) در سرور Oracle VM برای SPARC (دامنه‌های منطقی).

وضعیت: مشارکت توسط Darren Kenny.

این مورد برای سازگاری با نسخه‌های قدیمی‌تر virt-what چاپ می‌شود که نمی‌توانستند بین کانتینر مهمان و میزبان در Linux VServer تفاوت قائل شوند.
این پردازش در یک کانتینر Linux VServer در حال اجرا است.

وضعیت: مشارکت توسط Barış Metin.

این پردازش به عنوان میزبان Linux VServer اجرا می‌شود (VxID 0).

وضعیت: مشارکت توسط Barış Metin و Elan Ruusamäe.

این پردازش در یک کانتینر Linux LXC در حال اجرا است.

وضعیت: مشارکت توسط Marc Fournier.

این مهمان روی هایپروایزر KVM با استفاده از شتاب‌دهنده سخت‌افزاری در حال اجرا است.

توجه داشته باشید اگر هایپروایزر از شبیه‌سازی نرم‌افزاری استفاده می‌کند، نباید این مورد را ببینید، بلکه در عوض باید حقیقت "qemu" را مشاهده کنید.

وضعیت: تأیید شده توسط RWMJ.

این مهمان روی هایپروایزر KVM با استفاده از شتاب‌دهنده سخت‌افزاری اجرا می‌شود و کامپوننت فضای کاربری هایپروایزر lkvm (شناخته‌شده با نام kvmtool) است.

وضعیت: مشارکت توسط Andrew Jones.

مهمان درون هایپروایزر Nutanix Acropolis (AHV) در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

مهمان درون یک کانتینر OCI در حال اجرا است.

وضعیت: مشارکت توسط Alessandro Valentini، تأیید شده توسط RWMJ.

به نظر می‌رسد مهمان درون یک کانتینر OpenVZ یا Virtuozzo در حال اجرا است.

وضعیت: مشارکت توسط Evgeniy Sokolov.

مهمان روی یک گره oVirt در حال اجرا است. (همچنین بخش "rhev" را در ادامه ببینید).

وضعیت: مشارکت توسط RWMJ، تأیید نشده.

مهمان درون بستر مجازی Parallels Virtual Platform (شامل Parallels Desktop، Parallels Server) در حال اجرا است.

وضعیت: مشارکت توسط Justin Clift.

یک کانتینر پادمن (Podman). (همچنین "oci" را در بالا ببینید).

وضعیت: مشارکت توسط Jordan Webb.

مهمان درون شبیه‌ساز IBM PowerVM Lx86 Linux/x86 در حال اجرا است.

وضعیت: داده‌ها در ابتدا توسط Jeffrey Scheel ارائه شدند، تأیید شده توسط Yufang Zhang و RWMJ.

هایپروایزر QEMU با استفاده از شبیه‌سازی نرم‌افزاری.

توجه داشته باشید که برای مهمان‌های KVM (با شتاب‌دهنده سخت‌افزاری) نباید این مورد را ببینید.

وضعیت: تأیید شده توسط RWMJ.

مهمان روی یک گره Red Hat Enterprise Virtualization (RHEV) در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

مهمان روی هایپروایزر رد هت (Red Hat) در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

یک مهمان لینوکس حالت کاربر (User-Mode Linux یا UML).

وضعیت: مشارکت توسط Laurent Léonard.

سیستم بر روی UpCloud در حال اجرا است.

وضعیت: مشارکت توسط Ville Skyttä.

به نظر می‌رسد نوعی از مجازی‌سازی وجود دارد، اما نوع دقیق آن مشخص نیست. در برخی موارد گوشه‌ای و بسیار نادر که می‌دانیم تشخیص مجازی‌سازی دشوار است، از حمله زمان‌بندی (timing attack) استفاده می‌کنیم تا بررسی شود آیا دستورالعمل‌های خاص ماشین بسیار کندتر از حالت عادی اجرا می‌شوند یا خیر، که این می‌تواند نشان‌دهنده مجازی‌سازی باشد. در این حالت، حقیقت عمومی "virt" چاپ می‌شود.
سیستم پارتیشن‌بندی سخت‌افزاری هیتاچی Virtage در Hitachi Virtualization Manager (HVM).

وضعیت: داده‌ها توسط Bhavna Sarathy ارائه شده، تأیید نشده.

یک مهمان در ویرچوال‌باکس (VirtualBox).

وضعیت: مشارکت توسط Laurent Léonard.

به نظر می‌رسد مهمان روی Microsoft VirtualPC در حال اجرا است.

وضعیت: تأیید نشده.

یک مهمان در هایپروایزر vmm (هایپروایزر OpenBSD).

وضعیت: مشارکت توسط Jasper Lievisse Adriaanse.

به نظر می‌رسد مهمان روی هایپروایزر VMware در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

به نظر می‌رسد مهمان روی هایپروایزر Xen در حال اجرا است.

وضعیت: تأیید شده توسط RWMJ.

دامنه دارای امتیاز Xen dom0 (دامنه ممتاز).

وضعیت: تأیید شده توسط RWMJ.

دامنه مهمان شبه‌مجازی‌شده Xen domU (دامنه غیرممتاز paravirtualized).

وضعیت: تأیید شده توسط RWMJ.

یک مهمان Xen با مجازی‌سازی سخت‌افزاری کامل (HVM).

وضعیت: تأیید شده توسط RWMJ.

برنامه‌هایی که از "virt-what" استفاده کرده یا آن را دربرمی‌گیرند، باید پیش از تلاش برای پردازش خروجی دستور، بررسی کنند که وضعیت خروج برابر با ۰ باشد.

وضعیت خروج غیرصفر نشان‌دهنده بروز خطا است، برای مثال ارائه یک آرگومان نامعتبر در خط فرمان. اگر وضعیت خروج غیرصفر باشد، صحت «حقایق» خروجی (در صورت چاپ شدن) قابل تضمین نیست و باید نادیده گرفته شوند.

وضعیت خروج هیچ ارتباطی با اجرای برنامه روی سخت‌افزار واقعی یا تحت مجازی‌سازی ندارد، و همچنین نشان‌دهنده موفقیت "virt-what" در تشخیص «صحیح» نیست (که با توجه به تنوع بسیار زیاد سیستم‌های مجازی‌سازی و شبیه‌سازی عمدی برخی سیستم‌ها توسط یکدیگر، عملاً غیرقابل تشخیص قطعی است).

دستور "virt-what" به گونه‌ای طراحی شده است که بتوانید آن را به سادگی از برنامه‌های دیگر اجرا کرده یا در قالب یک کتابخانه بسته‌بندی کنید.

برنامه شما باید وضعیت خروج را بررسی کند (بخش بالا را ببینید).

برخی از زبان‌های برنامه‌نویسی (به‌ویژه پایتون: شماره مسئله 1652) به اشتباه سیگنال "SIGPIPE" را ماسک کرده و هنگام اجرای زیرپردازش‌ها آن را بازیابی نمی‌کنند. از آنجا که "virt-what" یک اسکریپت شل است، در صورت انجام این کار برخی از دستورات شل به درستی کار نمی‌کنند. ممکن است هشدارهایی شبیه به این از سوی "virt-what" مشاهده کنید:

echo: write error: Broken pipe

راه‌حل این است که پیش از اجرای "virt-what"، گرداننده سیگنال "SIGPIPE" را مجدداً به "SIG_DFL" تنظیم کنید.

در بیشتر مواقع، استفاده از این برنامه رویکرد نادرستی است. به جای آن، باید ویژگی‌های خاصی را که واقعاً قصد استفاده از آن‌ها را دارید تشخیص دهید. (به عنوان مثال، اگر می‌خواهید دستورات هایپروایزر Xen را صادر کنید، باید به دنبال فایل "/proc/xen/privcmd" بگردید).

با این حال، به دلیل درخواست‌های مکرر کاربران، ما این ابزار را ارائه داده‌ایم. چند کاربرد معتبر وجود دارد:

ابزار گزارش باگ (Bug reporting tool)
اگر فکر می‌کنید مجازی‌سازی ممکن است بر نحوه اجرای برنامه شما تأثیر بگذارد، می‌توانید از "virt-what" برای گزارش این مورد در ابزار گزارش باگ استفاده کنید.
ابزارهای نمایش وضعیت و مانیتورینگ (Status display and monitoring tools)
می‌توانید این اطلاعات را در برنامه‌های مانیتورینگ و نمایش وضعیت بگنجانید.
تنظیم و بهینه‌سازی سیستم (گاهی اوقات) (System tuning (sometimes))
می‌توانید از این برنامه برای تنظیم سیستم‌عامل استفاده کنید تا به عنوان ماشین مجازی یک هایپروایزر خاص عملکرد بهتری داشته باشد. با این حال، هنگام نصب درایورهای شبه‌مجازی (paravirtualized)، بهتر است ویژگی‌های خاص مورد نیاز درایورها را بررسی کنید (مثلاً وجود دستگاه‌های PCI).

virt-what-cvm(1), http://people.redhat.com/~rjones/virt-what, http://www.vmware.com, http://www.microsoft.com/windows/products/winfamily/virtualpc, http://xensource.com, http://bellard.org/qemu, http://kvm.qumranet.com, http://openvz.org

Richard W.M. Jones <rjones @ redhat . com>

(C) Copyright 2008-2024 Red Hat Inc., http://people.redhat.com/~rjones/virt-what

این برنامه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GNU General Public License) که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، چه نسخه ۲ پروانه و چه (به انتخاب خودتان) هر نسخه پس از آن، بازتوزیع کرده و/یا تغییر دهید.

این برنامه به این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی تجاری بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر «پروانه عمومی همگانی گنو» را ببینید.

شما باید به همراه این برنامه یک نسخه از پروانه عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت به بنیاد نرم‌افزارهای آزاد به آدرس Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA مکاتبه کنید.

باگ‌ها در صفحه Red Hat Bugzilla قابل مشاهده هستند: https://bugzilla.redhat.com.

اگر باگی در virt-what پیدا کردید، لطفاً مراحل زیر را برای گزارش آن دنبال کنید:

۱. بررسی گزارش‌های باگ موجود
به نشانی https://bugzilla.redhat.com بروید و باگ‌های مشابه را جستجو کنید. ممکن است فرد دیگری پیش‌تر همین باگ را گزارش کرده باشد یا حتی برطرف شده باشد.
۲. ثبت پیام‌های اشکال‌زدایی و خطا
دستور زیر را اجرا کنید:
virt-what > virt-what.log 2>&1

و فایل virt-what.log را نگه دارید. این فایل ممکن است حاوی پیام‌های خطایی باشد که باید همراه با گزارش باگ خود ارسال کنید.

۳. دریافت نسخه virt-what
دستور زیر را اجرا کنید:
virt-what --version
۴. ارسال گزارش باگ
به نشانی https://bugzilla.redhat.com بروید و یک باگ جدید ثبت کنید. لطفاً مشکل را با بیشترین جزئیات ممکن شرح دهید.

به یاد داشته باشید که شماره نسخه (مرحله ۳)، فایل پیام‌های اشکال‌زدایی (مرحله ۲) و تا حد امکان سایر جزئیات را در گزارش خود بگنجانید.

۵. ارجاع باگ به rjones @ redhat.com
باگ را به rjones @ redhat.com (بدون فاصله‌ها) ارجاع یا بازارجاع دهید. همچنین در صورت تمایل به دریافت پاسخ سریع‌تر، می‌توانید یک ایمیل حاوی شماره باگ ارسال کنید.
2024-09-28 virt-what-1.27