Linux Komut Dosyalarının Sanal Makinelerde Çalıştıklarını Algılamasına Nasıl İzin Verilir?
Yayınlanan: 2022-06-27
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.
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.
-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ı
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ı
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ı
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.
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
- "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
Bu komutu GNOME Kutularında çalışan Fedora VM'mizde deneyelim.
sudo lshw -sınıf sistemi
- 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
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
- “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
- “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” 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
GNOME Kutularında çalışan Fedora kopyamızın KVM sanallaştırmasını kullandığı bildiriliyor.
systemd-tespit-virt
systemd-detect-virt
donanım makinemizde çalıştırmak, terminale "hiçbirinin" yazdırılmamasına neden olur.
systemd-tespit-virt
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.
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
Ubuntu VirtualBox VM'mizi sanal bir makine olarak doğru bir şekilde tanımlar.
./platform.sh
Ayrıca Fedora'yı çalıştıran GNOME Boxes VM'yi de doğru bir şekilde algılar.
./platform.sh
Komut dosyası ayrıca fiziksel bir makinede ne zaman çalıştığını doğru bir şekilde algılar.
./platform.sh
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
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.