إدارة الأجهزة الوهمية عبر سطر الأوامر باستخدام KVM و QEMU
أهلاً بك يا مهندس! اليوم سنتعمق مباشرة في إدارة الأجهزة الوهمية باستخدام KVM و QEMU من سطر الأوامر. لا تعقيدات، فقط الشغل العملي.
KVM (Kernel-based Virtual Machine) هي وحدة نواة تسمح بتحويل نواة Linux إلى برنامج مراقبة أجهزة افتراضية (hypervisor). QEMU هو محاكي آلة مفتوح المصدر يقوم بتنفيذ المحاكاة، وعندما يعمل مع KVM، فإنه يستفيد من تسريع الأجهزة لتقديم أداء شبه أصلي.
لنبدأ!
1. التحقق من تثبيت KVM و QEMU
قبل أي شيء، تأكد من أن KVM مفعل وأن QEMU مثبت لديك. يمكنك التحقق من ذلك بالأوامر التالية:
lsmod | grep kvm
يجب أن ترى مخرجات مثل kvm_intel أو kvm_amd و kvm.
تأكد أيضاً أن نظامك يدعم المحاكاة الافتراضية وأنها مفعلة في الـ BIOS/UEFI:
kvm-ok
إذا رأيت رسالة INFO: KVM is accelerated، فأنت جاهز للانطلاق.
ملاحظة سريعة: إذا لم يكن KVM مثبتاً، يمكنك تثبيته عادةً باستخدام
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utilsعلى توزيعات دبيان/أوبونتو، أوsudo dnf install qemu-kvm libvirt virt-install bridge-utilsعلى فيدورا/RHEL.
2. إنشاء قرص صلب افتراضي (Virtual Hard Disk)
الأجهزة الوهمية تحتاج إلى مكان لتخزين نظام التشغيل والبيانات. سنستخدم qemu-img لإنشاء ملف صورة قرص. صيغة qcow2 هي الأكثر شيوعاً لأنها تدعم التوسع الديناميكي (sparse files) واللقطات (snapshots).
qemu-img create -f qcow2 my_vm.qcow2 20G
هذا الأمر ينشئ ملفاً اسمه my_vm.qcow2 بحجم أقصى 20 جيجابايت، لكنه لن يشغل هذا الحجم على الفور على القرص الفعلي.
3. تشغيل جهاز وهمي جديد وتثبيت نظام التشغيل
الآن، حان وقت تشغيل الجهاز الوهمي. سنحتاج إلى ملف ISO لنظام التشغيل الذي نريد تثبيته (مثل Ubuntu Server). تأكد من وجود ملف ISO في مسار يمكن الوصول إليه.
هذا الأمر سيقوم بتشغيل الجهاز الوهمي، وتحديد الذاكرة، وعدد المعالجات، والقرص الصلب الافتراضي، وملف ISO للتمهيد منه، وتوفير واجهة VNC للاتصال:
qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-cpu host \
-smp 2 \
-hda my_vm.qcow2 \
-cdrom /path/to/your/linux.iso \
-boot d \
-vnc :0 \
-name "MyFirstKVMVM"
qemu-system-x86_64: الأمر لتشغيل محاكاة 64 بت.-enable-kvm: تفعيل تسريع KVM. مهم جداً للأداء.-m 2048: تخصيص 2048 ميجابايت (2 جيجابايت) من الذاكرة العشوائية.-cpu host: استخدام نفس نوع المعالج الخاص بالمضيف لتحسين الأداء.-smp 2: تخصيص 2 نواة معالج للجهاز الوهمي.-hda my_vm.qcow2: تحديد القرص الصلب الافتراضي الرئيسي.-cdrom /path/to/your/linux.iso: تحديد ملف ISO للتمهيد منه.-boot d: التمهيد من محرك الأقراص الضوئية (CD-ROM).-vnc :0: تمكين خادم VNC على المنفذ 5900 (المنفذ الافتراضي للعرض :0).-name "MyFirstKVMVM": إعطاء اسم للجهاز الوهمي (مفيد للتعرف عليه).
تلميح: بعد التثبيت، أعد تشغيل الجهاز الوهمي بدون خيار
-cdromو-boot dللتمهيد مباشرة من القرص الصلب.مثال بعد التثبيت:
qemu-system-x86_64 \ -enable-kvm \ -m 2048 \ -cpu host \ -smp 2 \ -hda my_vm.qcow2 \ -vnc :0 \ -name "MyFirstKVMVM"
4. الاتصال بالجهاز الوهمي
بما أننا استخدمنا خيار -vnc :0، يمكنك الآن الاتصال بالجهاز الوهمي باستخدام أي عميل VNC (مثل remmina أو tightvncviewer) على العنوان localhost:5900.
5. إدارة الجهاز الوهمي (الإيقاف والتشغيل في الخلفية)
الإيقاف:
أفضل طريقة لإيقاف الجهاز الوهمي هي إيقافه بشكل طبيعي من داخل نظام التشغيل الضيف (shutdown). إذا كنت بحاجة لإيقاف تشغيل قسري من واجهة QEMU مباشرة (إذا لم يكن يعمل في الخلفية)، يمكنك استخدام Ctrl+A ثم x.
إذا كان الجهاز الوهمي يعمل في الخلفية (سنرى كيف بعد قليل)، ستحتاج إلى معرفة معرف العملية (PID) لـ QEMU واستخدام kill:
ps aux | grep qemu
# ابحث عن PID الخاص بالجهاز الوهمي
kill -9 [PID]
التشغيل في الخلفية (Detached Mode):
لتشغيل الجهاز الوهمي في الخلفية بحيث لا يغلق عند إغلاق الطرفية، يمكنك استخدام خيار -daemonize مع QEMU:
qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-cpu host \
-smp 2 \
-hda my_vm.qcow2 \
-vnc :0 \
-name "MyFirstKVMVM" \
-daemonize
الآن سيعمل الجهاز الوهمي في الخلفية، وستعود لك الطرفية فوراً.
6. الشبكات (Network)
الشبكات مع QEMU يمكن أن تكون معقدة قليلاً، لكن أبسط طريقة هي استخدام شبكة المستخدم (User-mode networking) أو شبكة الجسر (Bridge networking).
شبكة المستخدم (NAT):
بشكل افتراضي، QEMU يستخدم شبكة المستخدم (NAT) إذا لم تحدد شيئاً آخر. هذا يعني أن الجهاز الوهمي يمكنه الوصول إلى الإنترنت، لكن لا يمكن الوصول إليه من الشبكة الخارجية مباشرة. لتحديد واجهة شبكة:
qemu-system-x86_64 \
... (خياراتك السابقة) ... \
-netdev user,id=mynet0 \
-device virtio-net-pci,netdev=mynet0 \
-name "MyFirstKVMVM" \
-daemonize
شبكة الجسر (Bridge Networking):
إذا كنت تريد أن يكون الجهاز الوهمي على نفس الشبكة المحلية مع المضيف ويحصل على عنوان IP خاص به، ستحتاج إلى إعداد جسر شبكة (bridge) على نظام المضيف. هذه عملية تتطلب بعض الإعدادات على مستوى نظام التشغيل المضيف (خارج نطاق هذا الدرس التفصيلي حالياً، ولكنها تتضمن استخدام أدوات مثل brctl أو nmcli لإنشاء جسر).
بعد إعداد الجسر (مثلاً br0)، يمكنك ربط الجهاز الوهمي به:
qemu-system-x86_64 \
... (خياراتك السابقة) ... \
-netdev bridge,id=mynet0,br=br0 \
-device virtio-net-pci,netdev=mynet0 \
-name "MyFirstKVMVM" \
-daemonize
ملاحظة هامة: إدارة الشبكات المتقدمة تتطلب فهماً جيداً لشبكات Linux. إذا كنت تستخدم
libvirt(وهي أداة إدارة أعلى مستوى لـ QEMU/KVM)، فإنها تبسط إعدادات الشبكة بشكل كبير.
7. ملاحظة أخيرة: libvirt
بينما يوفر QEMU تحكماً دقيقاً عبر سطر الأوامر، فإن إدارة العديد من الأجهزة الوهمية بهذه الطريقة يمكن أن تصبح مرهقة. هنا يأتي دور libvirt. libvirt هي مكتبة وأداة لإدارة منصات المحاكاة الافتراضية المختلفة (بما في ذلك KVM/QEMU). إنها توفر واجهة موحدة (مثل الأمر virsh) لإنشاء، تعديل، تشغيل، وإيقاف الأجهزة الوهمية بسهولة أكبر، وتدير الشبكات والتخزين تلقائياً.
إذا كنت تخطط لإدارة بيئة افتراضية أكبر، فتعلم libvirt (و virsh) هو الخطوة التالية الطبيعية. ولكن بالنسبة للتحكم المباشر وفهم كيفية عمل QEMU على مستوى منخفض، فإن الأوامر التي تعلمناها اليوم هي الأساس.
هذا كل شيء لدرس اليوم! تدرب على هذه الأوامر، وستصبح سيد الأجهزة الوهمية من سطر الأوامر.