SYSTEMD-DETECT-VIRT(1) systemd-detect-virt SYSTEMD-DETECT-VIRT(1)

systemd-detect-virt - تشخیص اجرای سیستم در محیط‌های مجازی‌سازی یا کانتینر

systemd-detect-virt [گزینه‌ها...]

دستور systemd-detect-virt اجرای سیستم در یک محیط مجازی‌سازی‌شده را شناسایی می‌کند. این ابزار فناوری مجازی‌سازی را مشخص کرده و می‌تواند مجازی‌سازی کامل ماشین را از مجازی‌سازی کانتینر تشخیص دهد. در صورتی که یک فناوری مجازی‌سازی شناسایی شود، systemd-detect-virt با مقدار بازگشتی 0 (موفقیت) خارج می‌شود، و در غیر این صورت مقداری غیرصفر (خطا) برمی‌گرداند. به‌طور پیش‌فرض، هر نوع مجازی‌سازی شناسایی می‌شود، و می‌توان از گزینه‌های --container و --vm برای محدود کردن انواع مجازی‌سازی‌های شناسایی‌شده استفاده کرد.

در صورت اجرا بدون --quiet یک شناسه کوتاه برای فناوری مجازی‌سازی شناسایی‌شده چاپ خواهد شد. فناوری‌های زیر در حال حاضر قابل شناسایی هستند:

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

نوع (Type) شناسه (ID) محصول (Product)
ماشین مجازی (VM) qemu مجازی‌سازی نرم‌افزاری QEMU، بدون KVM
kvm ماشین مجازی هسته لینوکس KVM، در ترکیب با QEMU. برای سایر مجازی‌سازهایی که از رابط‌های KVM استفاده می‌کنند (مانند Oracle VirtualBox یا Amazon EC2 Nitro) استفاده نمی‌شود؛ به موارد زیر مراجعه کنید.
amazon سرویس Amazon EC2 Nitro با استفاده از Linux KVM
zvm سامانه s390 z/VM
vmware نرم‌افزار VMware Workstation یا Server و محصولات مرتبط
microsoft فناوری Hyper-V، که با نام‌های Viridian یا Windows Server Virtualization نیز شناخته می‌شود
oracle نرم‌افزار Oracle VM VirtualBox (از نظر تاریخی عرضه شده توسط innotek و Sun Microsystems)، برای هایپروایزر قدیمی و KVM
powervm هایپروایزر IBM PowerVM — همراه با سفت‌افزار برخی سرورهای IBM POWER عرضه می‌شود
xen هایپروایزر Xen (صرفاً domU، نه dom0)
bochs شبیه‌ساز Bochs Emulator
uml لینوکس در حالت کاربر (User-mode Linux)
parallels نرم‌افزارهای Parallels Desktop و Parallels Server
bhyve هایپروایزر bhyve در FreeBSD
qnx هایپروایزر QNX
acrn هایپروایزر ACRN[1]
apple فریم‌ورک مجازی‌سازی اپل[2]
sre هایپروایزر LMHS SRE[3]
google موتور محاسباتی گوگل (Google Compute Engine)[4]
کانتینر (Container) openvz سامانه OpenVZ/Virtuozzo
lxc پیاده‌سازی کانتینر لینوکس توسط LXC
lxc-libvirt پیاده‌سازی کانتینر لینوکس توسط libvirt
systemd-nspawn پیاده‌سازی حداقلی کانتینر در systemd'، به systemd-nspawn(1) مراجعه کنید
docker مدیر کانتینر Docker
podman مدیر کانتینر Podman[5]
rkt محیط اجرایی کانتینر برنامه rkt
wsl زیرسیستم ویندوز برای لینوکس (Windows Subsystem for Linux)[6]
proot شبیه‌سازی chroot/bind mount در فضای کاربری توسط proot[7]
pouch موتور کانتینر Pouch[8]

اگر از چندین راهکار مجازی‌سازی استفاده شود، فقط "داخلی‌ترین" لایه شناسایی و مشخص می‌شود. این بدان معناست که اگر هر دو نوع مجازی‌سازی ماشین و کانتینر همزمان استفاده شوند، فقط کانتینر شناسایی خواهد شد (مگر اینکه گزینه
--vm داده شود).

زیرسیستم ویندوز برای لینوکس (Windows Subsystem for Linux) یک کانتینر لینوکس نیست، بلکه محیطی برای اجرای برنامه‌های فضای کاربری لینوکس بر روی هسته ویندوز با استفاده از یک رابط سازگار با لینوکس است. WSL برای مقاصد کاربردی به عنوان کانتینر دسته‌بندی می‌شود. چندین محیط WSL از یک هسته مشترک استفاده می‌کنند و سرویس‌ها عموماً باید به گونه‌ای رفتار کنند که گویی درون یک کانتینر در حال اجرا هستند.

هنگام اجرا با گزینه --cvm، به جای چاپ فناوری مجازی‌سازی، فناوری ماشین مجازی محرمانه (Confidential Virtual Machine) را در صورت وجود نمایش می‌دهد. فناوری‌های زیر در حال حاضر قابل شناسایی هستند:

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

معماری (Arch) شناسه (ID) فناوری (Technology)
x86_64 sev فناوری AMD Secure Encrypted Virtualization
sev-es فناوری AMD Secure Encrypted Virtualization - Encrypted State
sev-snp فناوری AMD Secure Encrypted Virtualization - Secure Nested Paging
tdx فناوری Intel Trust Domain Extensions
s390x protvirt فناوری IBM Protected Virtualization (Secure Execution)
arm64 cca معماری محاسبات محرمانه آرم (Arm Confidential Compute Architecture)

گزینه‌های زیر پشتیبانی می‌شوند:

-c, --container

فقط مجازی‌سازی کانتینر (یعنی مجازی‌سازی مبتنی بر اشتراک هسته) را شناسایی می‌کند.

-v, --vm

فقط مجازی‌سازی سخت‌افزاری را شناسایی می‌کند.

-r, --chroot

تشخیص می‌دهد که آیا دستور درون یک محیط chroot(2) اجرا شده است یا خیر. در این حالت، هیچ خروجی متنی نوشته نمی‌شود، اما مقدار بازگشتی نشان می‌دهد که آیا فرآیند درون یک محیط chroot() فراخوانی شده است یا خیر.

افزوده‌شده در نسخه 228.

--private-users

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

افزوده‌شده در نسخه 232.

--cvm

تشخیص می‌دهد که آیا دستور درون یک ماشین مجازی محرمانه اجرا شده است یا خیر. نتیجه این تشخیص ممکن است برای غیرفعال کردن ویژگی‌هایی استفاده شود که نباید در ماشین‌های مجازی محرمانه به کار گرفته شوند. از این نتیجه نباید برای افشای اطلاعات حساس امنیتی استفاده شود؛ این اطلاعات تنها پس از تصدیق و اثبات صحت (Attestation) محیط محرمانه باید منتشر شوند.

افزوده‌شده در نسخه 254.

-q, --quiet

از نمایش شناسه فناوری مجازی‌سازی در خروجی جلوگیری می‌کند.

--list

تمام محیط‌های کانتینر و ماشین مجازی شناخته‌شده و قابل تشخیص در حال حاضر را در خروجی چاپ می‌کند.

افزوده‌شده در نسخه 239.

--list-cvm

تمام فناوری‌های مجازی‌سازی محرمانه شناخته‌شده و قابل تشخیص در حال حاضر را در خروجی چاپ می‌کند.

افزوده‌شده در نسخه 254.

-h, --help

یک متن راهنمای کوتاه را چاپ کرده و خارج می‌شود.

--version

اطلاعات نسخه کوتاه برنامه را چاپ کرده و خارج می‌شود.

در صورت شناسایی یک فناوری مجازی‌سازی، مقدار 0 برگردانده می‌شود؛ در غیر این صورت یک کد غیرصفر بازگردانده خواهد شد.

systemd(1), systemd-nspawn(1), chroot(2), namespaces(7)

1.
هایپروایزر ACRN
2.
فریم‌ورک مجازی‌سازی اپل
3.
هایپروایزر LMHS SRE
4.
موتور محاسباتی گوگل (Google Compute Engine)
5.
Podman
6.
زیرسیستم ویندوز برای لینوکس (Windows Subsystem for Linux)
7.
proot
8.
Pouch
systemd 261.2