Linux Komut Dosyalarının Sanal Makinelerde Çalıştıklarını Algılamasına Nasıl İzin Verilir?

Yayınlanan: 2022-06-27
İki el, biri kırmızı hap, diğeri mavi hap tutuyor.
diy13/Shutterstock.com

Sanal makineler, işletim sistemlerini fiziksel donanım üzerinde çalıştıklarına ikna etmek için gerçekten çok uğraşırlar. Peki, bilgisayarın fiziksel mi yoksa sanal mı olduğunu Linux komut satırından anlayabilir misiniz?

Sanal Makineler ve Hiper Yöneticiler

Geleneksel bir bilgisayar fiziksel bir nesnedir. Bir işletim sistemi yükleyebilmeniz, uygulamaları kurabilmeniz, başlatabilmeniz ve kullanabilmeniz için birbirine takılı ve cıvatalı olan farklı donanım parçalarından oluşan bir koleksiyondur.

Donanım pahalıdır. Fiziksel bilgisayar başına bir işletim sistemiyle sınırlı olmak, birden fazla işletim sistemini çalıştırmanın maliyetinin kısa sürede engelleyici hale gelmesi anlamına gelir. Daha iyi bir çözüm, tek bir fiziksel bilgisayarın, her biri kendi benzersiz donanımında çalıştığını düşünerek, aynı anda bir dizi işletim sistemini çalıştırmasına izin vermek olacaktır.

Sanal Makine Hipervizörü Nedir?
İLGİLİ Sanal Makine Hiper Yönetici Nedir?

Bir hiper yönetici bunu mümkün kılar. Sanal makine yöneticisi veya sanal makine monitörü olarak da adlandırılan hiper yönetici, sanal makineler oluşturmanıza olanak tanıyan bir yazılımdır. Bunlar, sabit disk alanını, belleği ve CPU çekirdeklerini paylaşarak aynı fiziksel ana bilgisayar üzerinde çalışsalar da, bireysel, fiziksel bilgisayarlarmış gibi davranırlar.

Elbette ana bilgisayar, sanal makinelerin toplanmasının taleplerini karşılayacak kadar güçlü olmalıdır, ancak ana bilgisayardaki yeterli RAM ve işlem gücü verildiğinde, sanal makineler neredeyse çıplak metal hızlarında çalışabilir.

2.6.20 çekirdeğinin 2007'de piyasaya sürülmesinden bu yana, Linux, Çekirdek tabanlı Sanal Makine desteğini tam olarak hazırlamıştır. Linux'un VirtualBox, GNOME Kutuları ve QEMU-KVM gibi birkaç hiper denetleyicisi vardır. Kullanıcı arabirimleri ve sanal bir makinenin anlık görüntüsünü alabilme gibi işlevler ekleyerek yerel çekirdek işlevselliğini temel alarak Linux'un yerel KVM yeteneğinden yararlanırlar.

Sanal makineler, maliyet tasarrufu, verimlilik, basitleştirilmiş dağıtımlar ve - doğru bir şekilde sağlandığında - güvenlik avantajları sağlar. Ayrıca ölçeklenebilirliği de kolaylaştırırlar. Yeni sunucular, bir hizmete olan talep arttıkça otomatik olarak çalıştırılabilir ve talep düştüğünde kapatılabilir. Bu, onları hem bulutta hem de şirket içi altyapıda oldukça popüler hale getirir.

Belki de bir Linux sunucusunu uzaktan yönetiyorsunuz ve bunun sanal bir makine mi yoksa fiziksel bir kutu mu olduğunu bilmeniz gerekiyor. Veya ne tür bir platformda yürütüldüğünü bilmesi gereken bir komut dosyanız var. Burada, üzerinde çalıştığınız bilgisayarın fiziksel mi yoksa sanal mı olduğunu algılamanın birkaç yolu vardır.

dmidecode Komutu

dmidecode komutu, çok sayıda seçeneği ve değiştiriciyi destekler. Masaüstü Yönetim Arayüzü (DMI) tablolarını sorgular ve bilgileri terminal penceresinde yazdırır.

Bilgisayarınızın Cihazlarını Linux Terminalinden Nasıl Listeleyebilirsiniz?
İLGİLİ Bilgisayarınızın Cihazlarını Linux Terminalinden Nasıl Listeleyebilirsiniz?

-s (tek bir dize göster) seçeneğiyle kullanacağız ve sistem ürün adını soracağız. sudo kullanmamız gerektiğini unutmayın.

Komutu Ubuntu 22.04 çalıştıran bir VirtualBox VM'de çalıştıracağız.

 sudo dmidecode -s sistem-ürün-adı 

dmidecode komutu, bir VirtualBox VM'sini doğru şekilde tanımlıyor

Platform, VirtualBox olarak doğru bir şekilde tanımlandı.

Fedora 35 çalıştıran bir QEMU-KVM VM'de bu çıktıyı alıyoruz.

 sudo dmidecode -s sistem-ürün-adı 

Bir GNOME Boxes VM'sini doğru şekilde tanımlayan dmidecode komutu

Bu standart bir PC olarak bildirilse de, Q35 tipi standart bir QEMU sanal PC'dir. Böylece platform sanal bir makine olarak doğru bir şekilde tanınır.

Aynı komutu fiziksel bir bilgisayarda çalıştırırsak, üretici hakkında bazı bilgiler alırız.

 sudo dmidecode -s sistem-ürün-adı 

Fiziksel bir bilgisayar hakkında bilgi döndüren dmidecode komutu

Bu bilgisayar, MS-7B86 ürün koduna sahip bir Micro-Star International Company Limited anakartına dayalı özel bir yapıdır.

lshw Komutu

lshw komutu, çok çeşitli bilgisayar donanımı için ayrıntıları listeler. lshw hangi donanım sınıfını raporlamasını istediğimizi seçebiliriz.

Linux'ta lshw Nasıl Kullanılır (Pratik Bir Örnekle)
İLGİLİ Linux'ta lshw Nasıl Kullanılır (Pratik Bir Örnekle)

system değiştirici ile -class seçeneğini kullanacağız. Bu komutla sudo kullanmak, tüm ayrıntıları görmemizi sağlar.

Bu komutu Ubuntu VirtualBox VM'mizde çalıştıracağız.

 sudo lshw -sınıf sistemi 

VirtualBox VM'de raporlama yapan lshw komutu

  • "Açıklama" alanında genel bir "bilgisayar" girişi bulunur.
  • "Ürün" alanı bize bunun VirtualBox'ta çalışan bir sanal makine olduğunu söylüyor.
  • "Satıcı" alanı, VirtualBox'ı oluşturan Alman şirketi Innotek GmbH'nin adını içerir. Innotek, 2010 yılında Sun Microsystems, Inc.'i satın almasının bir parçası olarak Oracle Corporation tarafından satın alındı.

lshw yüklemek zorunda kaldık.

 sudo dnf lshw'yi kurun 

lshw'yi dnf komutuyla Fedora'ya yükleme

Bu komutu GNOME Kutularında çalışan Fedora VM'mizde deneyelim.

 sudo lshw -sınıf sistemi 

Bir GNOME Boxes VM'sinde raporlama yapan lshw komutu

  • Yine, "açıklama" alanında genel bir "bilgisayar" girişi vardır.
  • "Ürün" alanı bize dmidecode komutuyla gördüğümüz aynı standart QEMU PC bilgilerini verir.
  • "Satıcı" alanı, bunun sanal bir makine olduğunu açıkça gösteren "QEMU" içerir.

Bu, aynı komutu fiziksel bilgisayarımızda çalıştırmanın sonucudur.

 sudo lshw -sınıf sistemi 

Fiziksel bir bilgisayarda raporlama yapan lshw komutu

Bunun Micro-Star anakartlı bir donanım bilgisayarı olduğunu görebiliriz.

  • Donanım bir masaüstü bilgisayar olarak tanımlanır.
  • “Ürün” alanı bize anakart tipini, MS-7B86'yı verir.
  • "Satıcı" alanı, üreticinin adını içerir.

hostnamectl Komutu

Bu komutun avantajı, onu çalıştırmak için sudo ayrıcalıklarına sahip olmanıza gerek olmamasıdır. Ancak, yalnızca systemd etkinleştirilmiş dağıtımlarda kullanılabilir. Modern dağıtımların çoğu systemd .

Bu, Ubuntu VirtualBox VM'mizde komutu çalıştırmanın yanıtıdır.

 hostnamectl 

Sanallaştırma satırı vurgulanmış olarak bir VirtualBox VM'deki hostnamectl komutunun çıktısı

  • “icon-name” alanına “-vm” eklenmiştir.
  • "Kasa" alanı "vm" içerir.
  • “Sanallaştırma” alanı “oracle” içerir.
  • "Donanım Satıcısı" alanında "innotek GmbH" bulunur.
  • "Donanım Modeli" alanında "VirtualBox" bulunur.

GNOME Kutuları içindeki Fedora VM'mizin çıktısı çok benzer.

 hostnamectl 

Sanallaştırma satırı vurgulanmış olarak bir GNOME Boxes VM'sindeki hostnamectl komutunun çıktısı

  • “icon-name” alanına “-vm” eklenmiştir.
  • "Kasa" alanı "vm" içerir.
  • “Sanallaştırma” alanında “kvm” bulunur.
  • "Donanım Satıcısı" alanı "QEMU" içerir
  • “Donanım Modeli” alanında “Standart PC (Q35 + ICH9, 2009)” bulunur.

Fiziksel masaüstümüzde hostnamectl komutunu kullanırsak çıktıda “Sanallaştırma” satırı bulunmaz.

 hostnamectl 

"Sanallaştırma" bilgisi olmadan fiziksel bir bilgisayardaki hostnamectl komutunun çıktısı

“Sanallaştırma” alanı yoksa, çıplak metal üzerinde çalışıyor olmalısınız.

systemd-tespit-virt Komutu

Mümkün olduğunca kısa bir yanıt almak istiyorsanız, muhtemelen aradığınız şey systemd-detect-virt . Yine bu, systemd donanımlı bir dağıtım gerektirir, ancak sudo ayrıcalıkları gerektirmez. Bu ve onun özlü çıktısı, onu komut dosyalarında kullanım için çok uygun hale getirir.

Bu, Ubuntu VirtualBox VM'mizde komutu çalıştırmanın sonucudur.

 systemd-tespit-virt 

systemd-detect-virt ile bir VirtualBox VM belirleme

GNOME Kutularında çalışan Fedora kopyamızın KVM sanallaştırmasını kullandığı bildiriliyor.

 systemd-tespit-virt 

systemd-detect-virt ile bir GNOME Boxes VM'sini belirleme

systemd-detect-virt donanım makinemizde çalıştırmak, terminale "hiçbirinin" yazdırılmamasına neden olur.

 systemd-tespit-virt 

Sanallaştırmaya sahip olmadığı doğru olarak tanımlanmış bir fiziksel bilgisayar

Platforma Duyarlı Bir Komut Dosyası

Bir betiğe sanallaştırılmış bir ortamda mı yoksa fiziksel bir donanımda mı çalıştığını algılama yeteneği vermek için systemd-detect-virt komutunu kullanabilir ve seçenekleri işlemek için Bash case deyimlerini kullanabiliriz.

Kullanacağımız komut dosyası bu. Bu metni kopyalayın ve “platform.sh” adlı bir dosyaya kaydedin.

 #!/bin/bash

shopt -s nocasematch

case $(systemd-algılama-virt) içinde

  Yok)
    echo "Fiziksel Donanım"
    ;;

  *)
    echo "Sanal Makine"
    ;;
esac

Komut dosyası, büyük/küçük harfe duyarlı olmayan eşleştirmeyi seçmek için shopt kullanır. case ifadesinde systemd-detect-virt komutu kullanılır. Bu komutun çıktısı, bir eşleşme bulunana kadar case ifadesinin gövdesindeki her bir case cümlesi ile karşılaştırılır. Eşleşmeyen her şey “*)” varsayılan yan tümcesi tarafından yakalanır.

Bash Komut Dosyalarında Vaka İfadeleri Nasıl Kullanılır
İLGİLİ Bash Komut Dosyalarında Vaka İfadeleri Nasıl Kullanılır

En basit yol, systemd-detect-virt gelen yanıtın "none" olup olmadığını test etmektir. Öyleyse, komut dosyası fiziksel donanım üzerinde çalışıyor. Diğer tüm durumlarda, komut dosyası sanal bir makinede çalışıyor olmalıdır.

Komut dosyasını çalıştırmadan önce chmod kullanarak çalıştırılabilir hale getirmeliyiz.

 chmod +x platform.sh 

Platform komut dosyasını chmod ile yürütülebilir hale getirme

Ubuntu VirtualBox VM'mizi sanal bir makine olarak doğru bir şekilde tanımlar.

 ./platform.sh 

Platform.sh betiğini VirtualBox VM'de kullanma

Ayrıca Fedora'yı çalıştıran GNOME Boxes VM'yi de doğru bir şekilde algılar.

 ./platform.sh 

GNOME Boxes VM'de platform.sh betiğini kullanma

Komut dosyası ayrıca fiziksel bir makinede ne zaman çalıştığını doğru bir şekilde algılar.

 ./platform.sh 

Fiziksel bir bilgisayarda platform.sh komut dosyasını kullanma

Farklı case yan tümceleri, farklı işleme türlerini gerçekleştirmek için komut dosyasının başka bir yerinde kontrol edilen değişkenleri ayarlayabilir veya komut dosyanızdaki belirli işlevleri çağırabilir.

Komut dosyanızın farklı sanal ortam türlerini algılaması ve barındırması gerekiyorsa, systemd-detect-virt döndürebileceği farklı dizeleri arayarak daha fazla case cümlesi ekleyebilirsiniz. --list seçeneğini kullanarak olası yanıtların tam listesini görebiliriz. Hepsini bir kerede görmeyi kolaylaştırmak için çıktıyı column komutuyla aktaracağız.

 systemd-detect-virt --list | kolon 

systemd-detect-virt'in döndürebileceği yanıtların tamamı

kırmızı hapı al

Bu teknikler, komut dosyalarınızın ne zaman çıplak donanım üzerinde çalıştıklarını ve ne zaman sanal bir makinenin içinde olduklarını bilmelerini sağlar.

Matrix'teki Neo gibi, neyin gerçek neyin gerçek olmadığını bilecekler.