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
dmidecodekomutuyla 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.




