QEMU یک شبیه‌ساز و ایمولاتور مجازی‌سازی است که اجازه‌ی اجرا کردن سیستم‌عامل‌های مختلف را روی سیستم شما می‌دهد. این شبیه‌ساز مشابه VWware و VirtualBox است با تفاوت‌هایی که در ادامه متوجه خواهید شد. QEMU رایگان و متن‌باز است و تحت لیسانس GPL2 عرضه شده است. قابلیت این را دارد که در هر دو مدل KVM و XEN اجرا شود و بسیاری از امکانات را در اختیار شما قرار می‌دهد. در این پست با این ایمولاتور آشنا شده و نحوه‌ی نصب و استفاده از آن را خواهید آموخت.

فرق شبیه‌ساز و ایمولاتور (Simulation vs Emulation) چیست؟

معمولا واژه های emulator و simulator به اشتباه به جای یکدیگر استفاده می شوند. در فارسی هم برای هر دو ترجمه شبیه‌ساز به کار می رود. ولی در واقع این دو مفهوم با یکدیگر متفاوت هستند. emulation فرآیندی است که یک سیستم کامپیوتری (میزبان) را قادر می‌سازد تا ویژگی‌های سخت‌افزاری و نرم‌افزاری دستگاه هدف دیگر (میهمان) را تقلید و مشابه سازی کند. emulator ها اساساً به عنوان "جایگزین" استفاده می شوند که جایگزین دستگاه اصلی برای استفاده واقعی می شود. در مقابل، simulation فرآیند مدل‌سازی یک محیط برای تقلید از رفتار و پیکربندی دستگاه هدف دیگر است. در مقایسه با ایمولاتور، یک شبیه ساز برای «تحلیل و مطالعه» استفاده می شود. با استفاده از یک سیمولاتور، یک محیط مجازی ایجاد می کنید که دستگاه مورد نظر را از دنیای واقعی تقلید می کند. در نهایت، فرآیند شبیه سازی به شما نشان می دهد که چگونه دستگاه در محیط واقعی کار می کند. با این حال، یک شبیه ساز دقیقاً فعالیت محیط واقعی را دنبال نمی کند. با این توضیح باید گفت که QEMU همان طور که نامش (Quick Emulator) اشاره می کند، یک ایمولاتور است.

مدهای کاری مختلف QEMU

User-mode emulation

در این حالت QEMU برنامه‌های لینوکس یا Darwin/macOS را اجرا می‌کند که برای مجموعه دستورالعمل‌های دیگری کامپایل شده‌اند. فراخوانی های سیستمی برای endianness و برای عدم تطابق 32/64 بیتی مورد استفاده قرار می گیرند. کامپایل سریع و cross compiling اهداف اصلی برای شبیه سازی حالت کاربر هستند.

System Emulation

در این حالت QEMU یک سیستم کامپیوتری کامل از جمله تجهیزات جانبی را ایموله می کند. می توان از آن برای ارائه میزبانی مجازی چندین سیستم مجازی روی یک سیستم استفاده کرد. QEMU می‌تواند بسیاری از سیستم‌عامل‌های مهمان از جمله لینوکس، سولاریس، مایکروسافت ویندوز، DOS و BSD را پشتیبانی کند.

KVM hosting

در اینجا QEMU به تنظیم و انتقال ایمیج‌های KVM می پردازد. با این که همچنان درگیر ایموله کردن سخت افزار است، اما اجرای سیستم guest توسط KVM طبق درخواست QEMU انجام می شود.

Xen hosting

QEMU فقط در ایمولاسیون سخت افزار نقش دارد. اجرای مهمان در Xen انجام می شود و کاملاً از QEMU پنهان است.

نصب QEMU

QEMU را می‌توان تقریبا از تمام رپوهای توزیع‌های مختلف لینوکس نصب کرد. به همین‌خاطر نیازی به دانلود یا نصب آن از روی رپوهای متفرقه 3rd-party نیست.

برای نصب آن روی لینوکس اوبونتو یا لینوکس مینت از دستور زیر استفاده می‌شود:

sudo apt install qemu qemu-kvm libvirt-bin

برای نصب آن روی Red Hat/CentOS/Fedora از دستور زیر استفاده کنید:‌ ( برای Red Hat/CentOS عبارت dnf را با yum جایگزین کنید.)

sudo dnf install qemu qemu-kvm

برای نصب روی SUSE/OpenSUSE از دستور زیر

sudo zypper in qemu

و روی Arch Linux از دستور زیر استفاده کنید:

sudo pacman -S qemu

 

استفاده از QEMU

QEMU امکانات، معماری‌ها و قالب‌های بسیار زیادی را در اختیار می‌گذارد. در ابتدا لازم است یک تصویر دیسک سخت مجازی ایجاد کنیم تا بتوانیم سیستم‌عامل خود را در جایی نصب کنیم. این تصویر تمام داده‌ها و فایل‌های سیستم‌عامل را شامل می‌شود. برای این کار می‌توانیم از ابزار qemu-img استفاده کنیم.

برای درست کردن یک تصویر دیسک سخت با اندازه‌ی ۱۵ گیگابایت و قالب‌بندی qcow2 (که قالب پیش‌فرض تصاویر QEMU است) دستور زیر را اجرا کنید.

qemu-img create -f qcow2 testing-image.img 15G

بعد از اجرای این دستور یک فایل در مسیری که هستید ایجاد می‌شود که البته اندازه‌ی آن ۱۵ گیگابایت نبوده بلکه در حدود ۱۵۰ کیلوبایت است. QEMU فقط مقداری از فضا را که توسط سیستم‌عامل مجازی مورد استفاده باشد اشغال می‌کند. بعد از ایجاد تصویر دیسک سخت، باید فایل .iso سیستم‌عاملی را که می‌خواهیم به صورت مجازی از آن استفاده کنید، در اختیار داشته باشید و به صورت یک درایو نوری به سیستم مجازی خود معرفی کنید:

qemu-system-x86_64 -m 1024 -boot d -enable-kvm -smp 3 -net nic -net user -hda testing-image.img -cdrom ubuntu-16.04.iso

بیایید دستور بالا را بخش به بخش توضیح دهیم:

m 1024- این پارامتر مقدار رم را مشخص می‌کند که سیستم مجازی با آن کار می‌کند.

boot -d- این پارامتر اجازه می‌دهد که ترتیب بوت را مشخص کنید. d- به معنی انتخاب درایو نوری مجازی اولین دستگاه است، بعد از آن QEMU از تصویر دیسک سخت مجازی استفاده خواهد کرد. از گزینه cdrom- در انتهای دستور استفاده کرده‌ایم. اگر بخواهید سیستم مجازی خود را از روی دیسک سخت مجازی بالا بیاورید باید از c- استفاده کنید.

enable-kvm- این پارامتر خیلی مهم است و این اجازه را می‌دهد که از فناوری KVM برای شبیه‌سازی معماری که می‌خواهید، استفاده کنید. بدون استفاده از این گزینه، QEMU از رندر مجازی استفاده خواهد کرد که خیلی کند است. فقط باید چک کنید که گزینه مجازی‌سازی در BIOS سیستم فعال شده باشد.

smp 3- اگر بخواهید بیشتر از یک هسته از سی‌پی‌یو را استفاده کنید، با استفاده از این پارامتر می‌توانید این کار را انجام دهید.

QEMU بهتر است یا دیگر مجازی‌سازها مانند Virtual Box و VmWare

QEMU را می توان هم برای ایمولاسیون و هم برای مجازی سازی استفاده کرد، اما VirtualBox و VmWare فقط برای مجازی سازی قابل استفاده هستند. QEMU با پشتیبانی دوگانه از ایمولاسیون و مجازی سازی ارائه می شود در حالی که Virtual Box و VmWare فقط ویژگی های مجازی سازی را ارائه می دهند. با توجه به این دیدگاه، می توان چند تفاوت بین این ابزارها فهرست کرد:

قابلیت استفاده: اولین چیزی که کاربران به آن توجه می کنند رابط کاربری و سهولت استفاده است، از این نظر مجازی‌سازها بهتر از QEMU عمل می کنند زیرا کاربر پسندتر هستند در حالی که نصب و استفاده از QEMU دشوار است.

پشتیبانی معماری: معماری های پردازشی پشتیبانی شده توسط مجازی‌سازها بر پایه x32bit و x64bit هستند. با این حال، QEMU دارای یک لیست طولانی از معماری های پشتیبانی شده مانند ARM، Alpha، SPARC است. بنابراین، QEMU برای کاربران سطح پیشرفته و برای توسعه دهندگان هسته توصیه می شود. از سوی دیگر، VirtualBox و VmWare برای کاربرانی که می خواهند چندین سیستم عامل را برای اجرا بر روی یک دستگاه بدون مانع بوت دوگانه داشته باشند، مناسب تر است.

سفارشی سازی: ویژگی سفارشی سازی VirtualBox و VmWare بیشتر از QEMU و حتی سایر رقبا طول می کشد. یکی از دلایل این است که استفاده از مجازی سازی آسان است و همچنین گزینه های سفارشی سازی برای کاربران مبتدی نیز قابل درک و استفاده است.

مجازی‌سازی: برای مجازی‌سازی، QEMU باید به KVM (یک ماژول لینوکس) متصل شود تا به عنوان یک ماشین مجازی عمل کند، در حالی که کاربران می‌توانند مستقیماً ماشین‌های مجازی را در VirtualBox و یا VmWare بدون افزودن هیچ جزء اضافی ایجاد کنند.

رضایت کاربر نهایی: تفاوت عمده بین هر دو دسته ابزار این است که VirtualBox و VmWare در مورد رضایت کاربر نهایی رتبه بندی خوبی دارد در حالی که QEMU فاقد این ویژگی است بنابراین QEMU در سبد ابزارهای کم ارزش قرار می گیرد.