Skip to content

تنسيق الأجهزة الافتراضية ​

يوفر Cockpit وحدة تحكم مركزية للإدارة لتنسيق دورة حياة الأجهزة الافتراضية (VMs) التي تعمل عبر خوادم Vapor الفيزيائية المضيفة. يمكن للمسؤولين مراقبة الأداء، وتوفير بيئات عمل جديدة، وإدارة مرفقات الأجهزة الافتراضية، وتنفيذ إجراءات الطاقة، وتنسيق سياسات النسخ الاحتياطي من لوحة تحكم واحدة.


1. مخزون الأجهزة الافتراضية المركزي ​

يدمج Cockpit الأجهزة الافتراضية عبر جميع مضيفي Vapor المتصلين في مخزون واحد.

الميزات الرئيسية ​

  • مخزون موحد (Unified Inventory): عرض الأجهزة الافتراضية والبحث عنها وتنظيمها في مجموعات منطقية بغض النظر عن المضيف الفيزيائي الذي تقيم عليه.
  • لوحة الموارد والمقاييس (Resource and Metrics Panel): تعرض مخططات مباشرة لوقت استخدام المعالج، وتخصيص الذاكرة، وحركة مرور الشبكة (عناوين IP/MAC)، وإنتاجية قراءة/كتابة القرص.
  • الوصول إلى وحدة التحكم (Console Access): فتح جلسات وحدة تحكم تفاعلية مباشرة (بروتوكول VNC أو SPICE) في متصفح الويب. يعامل هذا كشاشة افتراضية ولوحة مفاتيح للوصول المباشر إلى نظام التشغيل واستكشاف الأخطاء وإصلاحها.

2. معالج توفير الأجهزة الافتراضية ​

يوجه معالج التوفير المسؤولين خلال إنشاء الأجهزة الافتراضية والقوالب. تتكيف خطواته مع نوع الإنشاء المختار أولاً: يكشف البناء من الصفر عن المجموعة الكاملة لخطوات الأجهزة، بينما تنكمش تدفقات الاستنساخ والنشر والتحويل إلى الحقول التي تحتاجها فقط.

أنواع الإنشاء ​

النوعما يفعله
Create a New Virtual Machineبناء جهاز افتراضي من الصفر — التحديد، نظام التشغيل، البرنامج الثابت، التخزين، الشبكة، PCI، و cloud-init.
Deploy from Templateإنشاء جهاز افتراضي جديد من قالب حالي، مع اختيار اسمه والتخزين المستهدف وهوية الضيف.
Clone an Existing VMإنشاء نسخة كاملة ومستقلة من إعدادات وأقراص الجهاز الافتراضي، بهوية ضيف خاصة بها أو كنسخة مطابقة.
Clone a VM to Templateنسخ جهاز افتراضي وتسجيل النسخة كقالب قابل لإعادة الاستخدام.
Convert Template to VMتحويل مباشر للقالب في مكانه ليعود إلى جهاز افتراضي قابل للتشغيل.
Clone Template to Templateإنشاء نسخة من قالب حالي.
Convert VM to Templateتحويل قسري ومباشر في المكان لجهاز افتراضي إلى قالب.

خطوات البناء من الصفر ​

  1. Creation Type: اختر أحد الأوضاع المذكورة أعلاه.

  2. Placement Target: اختر مركز البيانات، والعنقود، والمضيف. يعرض Cockpit المعالج والذاكرة المتاحين لكل مضيف للمساعدة في الجدولة.

  3. Identity & OS: حدد اسم الجهاز الافتراضي؛ المعالج الافتراضي والأقصى لـ vCPUs والذاكرة (MiB) — تحجز القيم القصوى مساحة للتوصيل الساخن (Hot-plug) للمعالج/الذاكرة؛ autostart؛ البرنامج الثابت (UEFI، Secure Boot — يتطلب q35 على x86_64، وTPM)؛ وحزمة نظام التشغيل الضيف (OS family مثل Linux، Windows، FreeBSD، Other) المتغير الذي يطبق الإعدادات المسبقة لبرنامج تشغيل libvirt.

  4. Storage: أضف قرصًا واحدًا أو أكثر. كل قرص لديه إجراء (action):

    • Create New — تخصيص قرص جديد (qcow2 أو raw أو vmdk) بالحجم المحدد على مستودع تخزين.
    • Clone From — نسخ وحدة تخزين حالية.
    • Attach Existing — إرفاق وحدة تخزين موجودة بالفعل على مستودع تخزين.
    • Direct Raw Device (DRM) — تعيين جهاز كتل فيزيائي مباشر من المضيف (تنسيق raw).

    تختار أيضًا ناقل القرص (bus) (مثل VirtIO، SCSI، IDE، أو SATA)، ويمكنك إضافة وسائط ISO/CD-ROM.

  5. Network: أضف واجهات الشبكة. لكل واجهة، اختر النوع (Network، Bridge، Direct/macvtap، أو User mode)، ومحول الشبكة الافتراضي المصدر (جسر قياسي أو شبكة موزعة للعنقود)، وطراز برنامج التشغيل (VirtIO، e1000، rtl8139، أو vmxnet3)، واختياريًا عنوان MAC ثابت.

  6. Advanced: إرفاق أجهزة تمرير PCI (PCI passthrough) مثل بطاقات الرسم (GPUs) أو متحكمات الشبكة. تعين كل خانة عنوان PCI الخاص بالمضيف، مع إعدادات اختيارية لعنوان الضيف، وملف ROM، والوظائف المتعددة (multi-function)، وبطاقة الرسم الرئيسية (primary-GPU).

  7. Cloud-Init: حقن تخصيصات cloud-init عبر خمسة تبويبات — User Data، Metadata، Network Data، SSH Keys، وPackages — للتوفير التلقائي بعد الإقلاع.

  8. Review and Create: التحقق من التكوين وإرسال طلب الإنشاء غير المتزامن إلى المضيف المستهدف. مفتاح اختياري Power on VM after creation يعيد إقلاع الضيف بمجرد بنائه.

تتضمن تدفقات الاستنساخ والنشر والتحويل مجموعة مصغرة من الخطوات — عادةً اختيار المصدر، واسم جديد، و(عند نسخ الأقراص) مجمع التخزين المستهدف. يطلب استنساخ جهاز افتراضي والنشر من قالب أيضًا اختيار Guest identity؛ راجع هوية الضيف في الاستنساخ.


3. العمليات التشغيلية ودورة الحياة ​

يوفر Cockpit عناصر التحكم في الطاقة التالية للجهاز الافتراضي:

  • Power On: يشغل نظام التشغيل الضيف.
  • Pause: يوقف التنفيذ مؤقتًا، مما يجمد الحالة النشطة للمعالج والذاكرة للجهاز الافتراضي في مكانها.
  • Resume: يستأنف تنفيذ المعالج وحالة الذاكرة للجهاز الافتراضي الموقوف مؤقتًا.
  • Restart Guest OS: يطلب إعادة تشغيل من داخل الضيف (ACPI)، مما يسمح لنظام التشغيل بإعادة التشغيل بنظافة.
  • Reset (Hard): يعيد تشغيل الجهاز الافتراضي فورًا — وهو ما يعادل زر إعادة التشغيل الفيزيائي، دون تعاون من النظام الضيف.
  • Power Off (Hard): يوقف تشغيل الجهاز الافتراضي فورًا (يشبه فصل الطاقة)، مما ينهي المجال دون إيقاف تشغيل سلس من الضيف.

يُعرض كل إجراء فقط عندما ينطبق على الحالة الحالية للجهاز الافتراضي — على سبيل المثال، يظهر Resume فقط للجهاز الموقوف مؤقتًا، ويظهر Restart Guest OS / Reset (Hard) فقط أثناء تشغيله.


4. تعديل الأجهزة والمواصفات ​

تغير نافذة Edit Settings الأجهزة الافتراضية للجهاز. وهي منظمة في تبويبات Hardware، وOptions، وAdvanced Parameters، وتطبق على الأجهزة الافتراضية الشغالة والمتوقفة (تدخل بعض التغييرات دخل التنفيذ في الإقلاع القادم).

  • الموارد والمعالج (Resources & CPU): ضبط vCPUs والذاكرة، وهيكلية المعالج (Sockets / Dies / Cores / Threads)، وطراز المعالج. حد السقف لـ Max vCPUs وMax Memory — المعين فوق القيم الحالية — يحجز مساحة للتوصيل الساخن (Hot-plug) للمعالج والذاكرة.
  • إدارة الأجهزة (Device Management):
    • الأقراص الصلبة (Hard Disks): إضافة أو فصل الأقراص الافتراضية. يمكن إنشاء أقراص جديدة أو استنساخها أو إرفاقها أو تعيينها كجهاز كتل خام مباشر، مع ناقل وتنسيق قابلين للاختيار؛ وتدعم وسائط CD-ROM/ISO.
    • محولات الشبكة (Network Adapters): إضافة أو إزالة واجهات الشبكة (أوضاع Network أو Bridge أو Direct/macvtap أو User؛ وطرازات VirtIO / e1000 / rtl8139 / vmxnet3).
    • تمرير أجهزة PCI (PCI Device Passthrough): تعيين أجهزة PCI الخاصة بالمضيف (مثل GPUs أو متحكمات الشبكة) مباشرة إلى الجهاز الافتراضي، مع خيارات ملف ROM، والوظائف المتعددة، وبطاقة الرسم الرئيسية.
  • البرنامج الثابت والخيارات (Firmware & Options): تبديل UEFI، Secure Boot، وTPM، وتحديد المعمارية ونوع الجهاز، والتحكم في autostart with host.
  • المعلمات المتقدمة (Advanced Parameters): عرض للقراءة فقط لتعريف المجال الحالي للجهاز الافتراضي (معلمات البدء التلقائي و libvirt الأخرى)، للمرجعية واستكشاف الأخطاء وإصلاحها. يعكس هذا التبويب التكوين المباشر؛ ولا يقدم تعديلاً عليه.

5. الاستنساخ وإدارة القوالب ​

توحد القوالب والاستنساخ تكوينات الأجهزة الافتراضية وتسرع التوفير. تعمل جميعها من خطوة نوع الإنشاء في معالج التوفير:

  • استنساخ الجهاز الافتراضي (VM Cloning): ينشئ نسخة مستقلة من تكوين الجهاز الافتراضي المصدر وأقراصه الافتراضية. يطلب المعالج الجهاز المصدر، واسم الجهاز الافتراضي الجديد، ومجمع التخزين المستهدف لتكرار الأقراص، وGuest identity. تُنسخ كل صورة قرص (disk image) بالكامل، لذا لا يعتمد الاستنساخ على المصدر بعد إنشائه، وتستغرق الأقراص الأكبر وقتًا أطول؛ الاستنساخ المرتبط (linked/copy-on-write) غير متاح. لا يُنسخ Direct Raw Device ولا الأقراص للقراءة فقط ولا وسائط ISO: يستخدم الاستنساخ الجهاز أو الملف نفسه الذي يستخدمه المصدر، لذا لا تشغّل الجهازين في الوقت نفسه ما داما يتشاركان جهازًا قابلًا للكتابة.
  • النشر من قالب (Deploy from Template): يوفر جهازًا افتراضيًا جديدًا من قالب، مع اختيار اسمه وتخزين الوجهة وGuest identity.
  • استنساخ VM إلى قالب (Clone VM to Template): ينسخ الجهاز الافتراضي المصدر ويسجل النسخة كقالب للقراءة فقط في مخزون الأجهزة الافتراضية والقوالب. تجمع نافذة القالب أيضًا وصفًا اختياريًا ومجمع تخزين مستهدفًا. القوالب دائمًا نسخ مطابقة؛ ويُعاد تعيين الهوية، إذا اخترت ذلك، عند النشر من القالب.
  • استنساخ قالب إلى قالب (Clone Template to Template): يكرر قالبًا حاليًا.
  • تحويل VM إلى قالب (Convert VM to Template): يحول جهازًا افتراضيًا بشكل دائم إلى قالب في مكانه — وهو انتقال في الحالة يعلم الجهاز الافتراضي كقالب.
  • تحويل قالب إلى VM (Convert Template to VM): يعيد القالب إلى جهاز افتراضي مستقل، محولاً دورات الطاقة وتعديلات التكوين العادية.

هوية الضيف في الاستنساخ ​

النسخ العادي للأقراص ينسخ أيضًا كل ما يستخدمه نظام تشغيل الضيف ليميّز نفسه عن الأجهزة الأخرى. عند تشغيل المصدر ونسخته المطابقة في الوقت نفسه، قد يحصل الجهازان على عنوان IP نفسه من DHCP، وقد يبدأ استنساخ جهاز مبني من صورة سحابية (cloud image) دون أي شبكة، ويعرض الجهازان اسم المضيف (hostname) ومفاتيح SSH للمضيف نفسها.

لذلك تتضمن خطوة Clone Options في المعالج (في Clone an Existing VM وDeploy from Template) خيار Guest identity:

الخيارما تحصل عليه
Reset guest identity (recommended)استنساخ بهوية خاصة به. يعدّل المضيف الأقراص المنسوخة قبل تشغيل الاستنساخ لأول مرة. لا يتغير الجهاز الافتراضي المصدر أو القالب أبدًا.
Keep an exact copyنسخة مطابقة بايتًا ببايت لأقراص المصدر. استخدمها لاختبارات الاستعادة، أو لنسخة تحتفظ بها للتحقيق، أو للأجهزة (appliances) التي ترتبط رخصتها بـ machine ID.

يكون Reset guest identity محددًا افتراضيًا عندما يستطيع المضيف المستهدف إعادة تعيين الهوية. وعندما لا يستطيع، يُحدد Keep an exact copy ويُعطَّل خيار إعادة التعيين وتعرض الخطوة السبب (راجع متطلبات المضيف). تعرض الخطوة أيضًا اسم المضيف الذي سيحصل عليه الاستنساخ وملخصًا قصيرًا لما يُعاد تعيينه وما لا يُعاد.

ما الذي تغيّره إعادة التعيين ​

  • Machine ID: معرّف عشوائي جديد، فتمنح خوادم DHCP التي تتعرف على العملاء بهذا المعرّف الاستنساخ عنوانًا خاصًا به. يُترك Machine ID كما هو إذا كانت قيمته uninitialized (قالب مُعدّ للإقلاع الأول).
  • مفاتيح SSH للمضيف (SSH host keys): مفاتيح جديدة من الأنواع والأحجام نفسها. العملاء الذين اتصلوا بالمصدر سيرون مفتاح مضيف مختلفًا على الاستنساخ. يُحذف مفتاح DSA القديم عندما يملك الجهاز نوع مفتاح أحدث أيضًا. تُستبدل مفاتيح RSA الأكبر من 4096 بت بمفاتيح 4096 بت، وتتضمن النتيجة ملاحظة بذلك.
  • ربط عناوين MAC للشبكة (network MAC bindings): يحصل الاستنساخ على عناوين MAC جديدة، وتُحدَّث تهيئة الشبكة التي تذكر عناوين MAC الخاصة بالمصدر (netplan وNetworkManager وملفات ifcfg وsystemd-networkd وقواعد udev و/etc/network/interfaces) لكي تعمل الواجهات.
  • عقود DHCP (DHCP leases): تُحذف العقود التي حفظها المصدر.
  • البذرة العشوائية (random seed): تُستبدل ببيانات عشوائية جديدة.
  • اسم المضيف (hostname): يُؤخذ من اسم الاستنساخ بأحرف صغيرة. يُستبدل كل حرف غير حروف ASCII والأرقام والشرطة بشرطة، وتُدمج الشرطات المتكررة في شرطة واحدة، وتُحذف الشرطات في البداية والنهاية، ثم يُقتطع الناتج إلى 63 حرفًا كحد أقصى. يُحتفظ بنطاق (domain) اسم مضيف المصدر عندما يكون نطاق DNS صالحًا: web01.example.com المستنسخ باسم web02 يصبح web02.example.com. تُحدَّث الأسماء المطابقة في أسطر loopback داخل /etc/hosts أيضًا. إذا لم يتبقَّ من اسم الاستنساخ شيء صالح للاستخدام، أو لم يكن لدى الضيف الملف /etc/hostname، يُترك اسم المضيف كما هو.

تبقى حسابات المستخدمين وكلمات المرور، ومفاتيح SSH المصرح بها للمستخدمين (authorized keys)، والبرامج وبرامج التشغيل المثبتة، وبيانات التطبيقات، وعناوين IP الثابتة كما كانت في المصدر.

التقدم والنتائج ​

أثناء تعديل المضيف للنسخ، تعرض لوحة Tasks الرسالة Resetting guest identity…. الاستنساخ الذي أُنشئ لكنه يحتاج إلى انتباهك ينتهي بالحالة Completed with warning؛ افتح المهمة لرؤية التفاصيل. من التحذيرات الشائعة:

  • الاحتفاظ بعنوان IP ثابت: يحمل الاستنساخ العنوان نفسه الذي يحمله المصدر ويُنشأ مع إيقاف التشغيل التلقائي (autostart). غيّر العنوان قبل تشغيل الجهازين على الشبكة نفسها، مثلًا: أبقِ المصدر متوقفًا، وشغّل الاستنساخ، وغيّر عنوانه من وحدة التحكم (console)، ثم شغّل المصدر مرة أخرى.
  • الانضمام إلى نطاق Active Directory أو Kerberos: يظل الاستنساخ يستخدم حساب الجهاز (machine account) الخاص بالمصدر، مما قد يؤدي إلى قفل المصدر خارج النطاق. أخرج الاستنساخ من النطاق ثم أعد ضمه باسمه الجديد قبل توصيله بالشبكة.
  • cloud-init يدير اسم المضيف: قد يعيد cloud-init تعيين اسم مضيف المصدر عند كل إقلاع. إذا ظل الاستنساخ يعرض اسم المصدر، فغيّر اسم المضيف في تهيئة cloud-init الخاصة بالاستنساخ.

تظل وكلاء التسجيل والإدارة (Red Hat Subscription Manager وUbuntu Pro وPuppet وSalt وChef) تحمل تسجيل المصدر؛ سجّل الاستنساخ من جديد.

عندما لا يمكن إعادة تعيين الهوية ​

إذا اخترت Reset guest identity وتعذّر ذلك، يفشل الاستنساخ مع ذكر السبب، الذي يظهر في خطوة Clone Options أو في المهمة، ولا يُنشأ أي جهاز افتراضي. تُكتشف معظم الحالات قبل نسخ أي شيء. اختر Keep an exact copy بدلًا من ذلك، ثم غيّر الهوية من داخل الضيف قبل تشغيل الجهازين:

الحالةما يجب فعله
ضيف Windows أو ضيف آخر غير Linuxأنشئ نسخة مطابقة، ثم عمّم الضيف (في Windows باستخدام Sysprep).
أقراص مشفرة (مثل LUKS أو BitLocker)أنشئ نسخة مطابقة وغيّر الهوية من داخل الضيف.
لم يُعثر على نظام تشغيل في الأقراص، أو وُجد أكثر من نظامأنشئ نسخة مطابقة.
نظام ملفات لا يستطيع المضيف تعديله، مثل نظام ملفات XFS في RHEL 9 والتوزيعات المبنية منه (Rocky Linux وAlmaLinux) على مضيفات ذات نواة أقدمأنشئ نسخة مطابقة وغيّر الهوية من داخل الضيف.
جزء من نظام الضيف، مثل /var، موجود على قرص لا يُنسخ مع الاستنساخ (Direct Raw Device أو قرص للقراءة فقط)انقل ذلك الجزء من النظام إلى صورة قرص في الجهاز المصدر، ثم استنسخ من جديد. النسخة المطابقة ستظل تتشارك ذلك الجهاز مع المصدر.
للجهاز الافتراضي أكثر من واجهة شبكة، وتهيئة الشبكة تذكر عنوان MAC لا تملكه أي من واجهات شبكة المصدراحذف الإدخال القديم أو صحّحه في الجهاز المصدر، ثم استنسخ من جديد. عندما تكون قيمة guest_identity هي auto، يكون ذلك مجرد تحذير وتكتمل إعادة التعيين.
مفتاح SSH الوحيد للمضيف من نوع DSAأضف نوع مفتاح حديثًا في الجهاز المصدر (sudo ssh-keygen -A)، ثم استنسخ من جديد.
إصدار Vapor على المضيف لا يستطيع إعادة تعيين الهويةحدّث Vapor على المضيف، أو أنشئ نسخة مطابقة.

لتغيير هوية استنساخ Linux بنفسك، نفّذ داخل الاستنساخ:

bash
sudo rm -f /etc/machine-id /var/lib/dbus/machine-id
sudo systemd-machine-id-setup
sudo hostnamectl set-hostname <new-name>
sudo rm -f /etc/ssh/ssh_host_*
sudo ssh-keygen -A
sudo systemctl restart ssh    # اسم الخدمة sshd في ضيوف عائلة RHEL

إذا حدث خطأ أثناء تعديل المضيف للأقراص المنسوخة، يفشل الاستنساخ بالكامل: تُحذف النسخ ولا يُنشأ أي جهاز افتراضي. لا يتأثر المصدر.

القوالب ​

القوالب نفسها دائمًا نسخ مطابقة: Clone VM to Template وClone Template to Template وConvert VM to Template لا تغيّر هوية الضيف أبدًا. يتم الاختيار في كل مرة تنشر فيها من القالب. القالب الذي أُنشئ باستنساخ جهاز افتراضي في إصدار أقدم من Vapor قد يتسبب في فشل إعادة التعيين عندما يملك الجهاز عدة واجهات شبكة؛ أعد استنساخ القالب من الجهاز الأصلي لحل ذلك.

وكيل الضيف (Guest agent) ​

يحتفظ الاستنساخ باتصال QEMU guest agent الخاص بالمصدر، لذا تعمل الميزات التي تعتمد على الوكيل، مثل تجميد نظام الملفات للنسخ المتماثل (replication) والنسخ الاحتياطي والإبلاغ عن عنوان IP للضيف، على الاستنساخ كما تعمل على المصدر.

متطلبات المضيف ​

تتطلب إعادة تعيين الهوية وجود guestfish (جزء من libguestfs) على مضيف Vapor الذي ينفّذ الاستنساخ. ثبّته بصلاحيات root على ذلك المضيف:

bash
# Debian 12 وما بعده، وUbuntu 22.04 وما بعده
sudo apt-get install guestfish libguestfs-xfs

# Debian 11، وUbuntu 20.04
sudo apt-get install libguestfs-tools libguestfs-xfs

# RHEL 9 والإصدارات المعاد بناؤها منه (Rocky Linux وAlmaLinux)
sudo dnf install libguestfs libguestfs-xfs

# RHEL 8 والإصدارات المعاد بناؤها منه
sudo dnf install libguestfs-tools-c libguestfs-xfs

لا حاجة لإعادة تشغيل Vapor: فهو يكتشف الأداة ويتحقق منها باختبار ذاتي قصير في الخلفية. افتح المعالج مرة أخرى بعد دقيقة تقريبًا. وإذا ظل Reset guest identity غير متاح، يوضح السبب المعروض في الخطوة ما ينقص المضيف.

لعملاء API ​

يقبل POST /api/v1/vms/{id}/clone وPOST /api/v1/vms/from-template الحقل guest_identity: reset (إعادة تعيين الهوية، أو الفشل مع 409 والرمز IDENTITY_RESET_UNAVAILABLE أو IDENTITY_RESET_UNSUPPORTED_GUEST إذا تعذّر ذلك)، أو auto (إعادة التعيين عند الإمكان، وإلا إنشاء نسخة مطابقة والإبلاغ بتحذير)، أو keep (نسخة مطابقة). عند حذف الحقل يُطبَّق الإعداد الافتراضي للمضيف. يُبلغ GET /api/v1/vms/{id}/clone-capabilities عما إذا كان مضيف الجهاز الافتراضي يستطيع إعادة تعيين الهوية. يُبلَّغ عن فشل أداة إعادة التعيين نفسها (خطأ أو انتهاء المهلة) بالرمز IDENTITY_RESET_FAILED (HTTP 500).


6. خيارات الحذف والتنظيف ​

عند حذف جهاز افتراضي، يوفر Cockpit خيارات لإدارة الموارد الأساسية:

  • حذف البيانات الوصفية (Metadata Deletion): يزيل تسجيل الجهاز الافتراضي من Cockpit وتكوين hypervisor الخاص بالمضيف.
  • تنظيف التخزين (Storage Cleanup): افتراضيًا، يؤدي حذف جهاز افتراضي إلى الاحتفاظ بأقراصه الافتراضية لمنع فقدان البيانات. يمكن للمسؤولين تبديل المعلمة remove_disks (تنفيذ API DELETE /vms/:id?remove_disks=true) لحذف جميع أحجام الأقراص الافتراضية المرتبطة بها من مستودعات التخزين الخاصة بها.