كيف؟

طريقة السماح لبرامج Linux النصية باكتشاف أنها تعمل في الأجهزة الافتراضية

تحاول الأجهزة الافتراضية جاهدة إقناع أنظمة التشغيل الخاصة بها بأنها تعمل على أجهزة فعلية. لذا هل يمكنك معرفة ما إذا كان الكمبيوتر ماديًا أم افتراضيًا من سطر أوامر Linux؟

الأجهزة الافتراضية و Hypervisors

الكمبيوتر التقليدي هو كائن مادي. إنها مجموعة من قطع الأجهزة المختلفة التي يتم توصيلها وتثبيتها معًا حتى تتمكن من تحميل نظام التشغيل وتثبيت التطبيقات وتشغيلها واستخدامها.

الأجهزة باهظة الثمن. يعني التقيد بنظام تشغيل واحد لكل كمبيوتر فعلي أن تكلفة تشغيل العديد من أنظمة التشغيل تصبح باهظة في وقت قريب. يتمثل الحل الأفضل في السماح لجهاز كمبيوتر مادي واحد بتشغيل مجموعة مختارة من أنظمة التشغيل في نفس الوقت، بحيث يفكر كل واحد في أنه يعمل على أجهزته الفريدة.

برنامج Hypervisor يجعل هذا ممكنًا. برنامج Hypervisor – ويسمى أيضًا مدير الجهاز الظاهري أو مراقب الجهاز الظاهري – هو برنامج يتيح لك إنشاء أجهزة افتراضية. تتصرف هذه الأجهزة كما لو كانت أجهزة كمبيوتر فردية ومادية على الرغم من أنها تعمل على نفس المضيف الفعلي، وتتشارك في مساحة محرك الأقراص الثابتة والذاكرة ونواة وحدة المعالج.

بالطبع، يجب أن يكون الكمبيوتر المضيف قويًا بما يكفي للتعامل مع متطلبات مجموعة الأجهزة الافتراضية، ولكن، نظرًا لذاكرة الوصول العشوائي الكافية وقوة المعالجة في المضيف، يمكن للأجهزة الافتراضية العمل بسرعات شبه معدومة.

منذ إصدار 2.6.20 kernel في عام 2007، حصل Linux على دعم V irtual M المستند إلى K ernel. يتوفر لدى Linux العديد من برامج Hypervisor، مثل VirtualBox و GNOME Boxes و QEMU-KVM. إنهم يستفيدون من قدرة KVM الأصلية في Linux، بناءً على وظيفة kernel الأصلية عن طريق إضافة واجهات مستخدم ووظائف مثل القدرة على تصوير من آلة افتراضية.

توفر الأجهزة الظاهرية وفورات في التكلفة والكفاءات وعمليات النشر المبسطة و- المقدمة بشكل صحيح- مزايا الأمان. كما أنها تسهل قابلية التوسع. يمكن تشغيل الخوادم الجديدة تلقائيًا مع زيادة الطلب على الخدمة وإغلاقها عند انخفاض الطلب. وهذا ما يجعلهم يتمتعون بشعبية كبيرة في كل من السحابة والبنية التحتية داخل الشركة.

ربما تقوم بإدارة خادم Linux عن بُعد وتحتاج إلى معرفة ما إذا كان جهازًا افتراضيًا أو صندوقًا فعليًا. أو لديك برنامج نصي يحتاج إلى معرفة نوع النظام الأساسي الذي يتم تنفيذه عليه. فيما يلي عدة طرق يمكنك من خلالها اكتشاف ما إذا كان الكمبيوتر الذي تعمل عليه ماديًا أم افتراضيًا.

الأمر dmidecode

يدعم الأمر dmidecode عددًا كبيرًا من الخيارات والمعدِّلات. يقوم باستجواب جداول واجهة إدارة سطح المكتب (DMI)، ويطبع المعلومات في نافذة المحطة الطرفية.

سنستخدمه مع الخيار -s (عرض سلسلة واحدة)، ونطلب اسم منتج النظام. لاحظ أنه يجب علينا استخدام sudo.

سنقوم بتشغيل الأمر على VirtualBox VM يعمل بنظام Ubuntu 22.04.

 sudo dmidecode- اسم المنتج-النظام 

يقوم الأمر Dmidecode بتعريف Virtualbox Vm بشكل صحيح

تم تحديد النظام الأساسي بشكل صحيح على أنه VirtualBox.

على جهاز QEMU-KVM VM يعمل بنظام Fedora 35، نحصل على هذا الناتج.

 sudo dmidecode- اسم المنتج-النظام 

يقوم الأمر Dmidecode بتعريف الجهاز الظاهري لـ Gnome Boxes بشكل صحيح

على الرغم من أنه تم الإبلاغ عن هذا كجهاز كمبيوتر قياسي، إلا أنه كمبيوتر افتراضي قياسي QEMU، من النوع Q35. لذلك يتم التعرف على النظام الأساسي بشكل صحيح على أنه آلة افتراضية.

إذا قمنا بتشغيل نفس الأمر على كمبيوتر فعلي، فسنحصل على بعض المعلومات حول الشركة المصنعة.

 sudo dmidecode- اسم المنتج-النظام 

يقوم الأمر Dmidecode بإرجاع معلومات حول كمبيوتر فعلي

هذا الكمبيوتر عبارة عن تصميم مخصص يعتمد على المذربورد Micro-Star International Company Limited، مع رمز المنتج MS-7B86.

أمر lshw

يسرد الأمر lshw تفاصيل مجموعة كبيرة من أجهزة الكمبيوتر. يمكننا اختيار فئة الأجهزة التي نريد أن lshw بالإبلاغ عنها.

سنستخدم الخيار -class مع معدّل system. يضمن استخدام sudo مع هذا الأمر أننا نرى كل التفاصيل.

سنقوم بتشغيل هذا الأمر على Ubuntu VirtualBox VM الخاص بنا.

 نظام sudo lshw -class 

يقوم الأمر Lshw بالإبلاغ عن Virtualbox Vm

  • يحتوي حقل “الوصف” على إدخال عام لـ “الكمبيوتر”.
  • يخبرنا حقل “المنتج” أن هذه آلة افتراضية تعمل في VirtualBox.
  • يحتوي حقل “البائع” على اسم الشركة الألمانية التي أنشأت VirtualBox، Innotek GmbH. استحوذت شركة Oracle على Innotek في عام 2010 كجزء من استحواذها على Sun Microsystems، Inc.

كان علينا تثبيت lshw على Fedora.

 sudo dnf تثبيت lshw 

تثبيت Lshw على Fedora باستخدام الأمر Dnf

لنجرب هذا الأمر في Fedora VM الذي يعمل في صناديق جنوم.

 نظام sudo lshw -class 

يقوم الأمر Lshw بالإبلاغ عن Gnome Boxes Vm

  • مرة أخرى، يحتوي حقل “الوصف” على إدخال عام لـ “الكمبيوتر”.
  • يعطينا حقل “المنتج” نفس معلومات QEMU PC القياسية التي رأيناها باستخدام الأمر dmidecode.
  • يحتوي حقل “البائع” على “QEMU” والذي يشير بوضوح تام إلى أن هذه آلة افتراضية.

هذا هو نتيجة تشغيل نفس الأمر على جهاز الكمبيوتر الخاص بنا.

 نظام sudo lshw -class 

يقوم الأمر Lshw بالإبلاغ عن كمبيوتر فعلي

يمكننا أن نرى أن هذا هو كمبيوتر، مع المذربورد Micro-Star.

  • يتم تحديد الأجهزة على أنها كمبيوتر مكتبي.
  • يعطينا حقل “المنتج” نوع المذربورد MS-7B86.
  • يحتوي حقل “البائع” على اسم الشركة المصنعة.

قيادة hostnamectl

يتمتع هذا الأمر بميزة أنك لست بحاجة إلى امتيازات sudo لتشغيله. ومع ذلك، فهو متاح فقط في systemd التي يدعمها النظام. تستخدم غالبية التوزيعات الحديثة systemd.

هذا هو الرد من تشغيل الأمر على Ubuntu VirtualBox VM.

 هوستناميكتل 

الإخراج من الأمر Hostnamectl في Virtualbox Vm مع تمييز خط المحاكاة الافتراضية

  • يحتوي حقل “icon-name” على “-vm” ملحق به.
  • يحتوي حقل “الهيكل” على “vm”.
  • يحتوي حقل “الظاهرية” على “oracle”.
  • يحتوي حقل “بائع الأجهزة” على “innotek GmbH”.
  • يحتوي حقل “إصدار الجهاز” على “VirtualBox”.

الإخراج في Fedora VM الخاص بنا داخل GNOME Boxes مشابه جدًا.

 هوستناميكتل 

الإخراج من الأمر Hostnamectl في Gnome Boxes Vm مع تمييز سطر المحاكاة الافتراضية

  • يحتوي حقل “icon-name” على “-vm” ملحق به.
  • يحتوي حقل “الهيكل” على “vm”.
  • يحتوي حقل “الظاهرية” على “kvm”.
  • يحتوي حقل “بائع الأجهزة” على “QEMU”
  • يحتوي حقل “إصدار الجهاز” على “كمبيوتر شخصي قياسي (Q35 + ICH9، 2009)”.

إذا استخدمنا الأمر hostnamectl على سطح المكتب الفعلي، فلن يحتوي الإخراج على سطر “Virtualization”.

 هوستناميكتل 

الإخراج من الأمر Hostnamectl على كمبيوتر فعلي، بدون معلومات عن

إذا لم يكن هناك مجال “افتراضية”، فيجب أن تعمل على المعدن.

أمر systemd-detective

إذا كنت ترغب في الحصول على إجابة مختصرة قدر الإمكان، فمن المحتمل أن يكون ما تبحث عنه هو systemd-detect-virt. مرة أخرى، يتطلب هذا systemd مجهزًا من قبل النظام، لكنه لا يتطلب امتيازات sudo. هذا – وإخراجها المقتضب – يجعلها مناسبة تمامًا للاستخدام في البرامج النصية.

هذه نتيجة تشغيل الأمر على Ubuntu VirtualBox VM.

 systemd- كشف- الفضيلة 

التعرف على Virtualbox Vm مع نظام -اكتشاف-فيرت

تم الإبلاغ عن نسختنا من Fedora التي تعمل في GNOME Boxes على أنها تستخدم المحاكاة الافتراضية لـ KVM.

 systemd- كشف- الفضيلة 

التعرف على جهاز افتراضي في Gnome Boxes مع نظام اكتشاف الفضيلة

يؤدي تشغيل systemd-detect-virt على أجهزتنا إلى طباعة “لا شيء” على الجهاز.

 systemd- كشف- الفضيلة 

يتم تحديد الكمبيوتر الفعلي بشكل صحيح على أنه لا يحتوي على المحاكاة الافتراضية

برنامج نصي حساس للمنصة

لمنح البرنامج النصي القدرة على اكتشاف ما إذا كان يعمل في بيئة افتراضية أو على أجهزة مادية، يمكننا استخدام الأمر systemd-detect-virt واستخدام عبارات case Bash للتعامل مع الخيارات.

هذا هو النص الذي سنستخدمه. انسخ هذا النص واحفظه في ملف يسمى “platform.sh”.

 #! / bin / bash shopt -s nocasematch case $ (systemd-detect-Virt) بلا) صدى "الأجهزة المادية"؛؛ صدى "Virtual Machine"؛؛ esac

يستخدم البرنامج النصي shopt لاختيار المطابقة غير الحساسة لحالة الحروف. يتم استخدام الأمر systemd-detect-virt في بيان case. تتم مقارنة الإخراج من هذا الأمر مع كل بند من عبارات case في نص بيان case حتى يتم العثور على تطابق. يتم التقاط أي شيء لا يتم مطابقته بواسطة الجملة الافتراضية “*)”.

إن أبسط طريقة هي اختبار ما إذا كانت الاستجابة من systemd-detect-virt “لا شيء”. إذا كان الأمر كذلك، فسيتم تشغيل البرنامج النصي على أجهزة فعلية. بالنسبة لجميع الحالات الأخرى، يجب تشغيل البرنامج النصي على جهاز افتراضي.

قبل أن نتمكن من تشغيل البرنامج النصي، يجب أن نجعله قابلاً للتنفيذ باستخدام chmod.

 chmod + x platform.sh 

جعل البرنامج النصي للنظام الأساسي قابلاً للتنفيذ باستخدام Chmod

إنه يعرّف بشكل صحيح على Ubuntu VirtualBox VM الخاص بنا كجهاز افتراضي.

./platform.sh 

استخدام البرنامج النصي Platform.sh في Virtualbox Vm

كما أنه يكتشف بشكل صحيح جهاز GNOME Boxes VM الذي يقوم بتشغيل Fedora.

./platform.sh 

باستخدام البرنامج النصي Platform.sh في Gnome Boxes Vm

يكتشف البرنامج النصي أيضًا بشكل صحيح عندما يتم تشغيله على جهاز فعلي.

./platform.sh 

استخدام البرنامج النصي Platform.sh على كمبيوتر فعلي

يمكن أن تحدد عبارات case المختلفة المتغيرات التي تم التحقق منها في مكان آخر في البرنامج النصي لإجراء أنواع مختلفة من المعالجة، أو يمكنها استدعاء وظائف معينة داخل البرنامج النصي.

إذا كان البرنامج النصي الخاص بك بحاجة إلى اكتشاف أنواع مختلفة من البيئات الافتراضية واستيعابها، فيمكنك إضافة المزيد من عبارات case، والبحث عن السلاسل المختلفة التي يمكن أن systemd-detect-virt. يمكننا الاطلاع على القائمة الكاملة --list المحتملة باستخدام خيار القائمة. لتسهيل رؤيتهم جميعًا مرة واحدة، سنقوم بتوجيه الإخراج عبر أمر column.

 systemd-detect-Virt - قائمة | العمود 

المجموعة الكاملة من الاستجابات التي يمكن أن يعود بها Systemd-Det-Virtue

خذ الحبة الحمراء

تتيح هذه الأساليب لنصوصك معرفة وقت تشغيلها على أجهزة عارية ومتى تكون داخل جهاز افتراضي.

مثل Neo in the Matrix، سيعرفون ما هو حقيقي وما هو غير ذلك.

مقالات ذات صلة

زر الذهاب إلى الأعلى