Linux-scripts laten detecteren dat ze in virtuele machines worden uitgevoerd

0
126
diy13/Shutterstock.com

Virtuele machines doen erg hun best om hun besturingssystemen ervan te overtuigen dat ze op fysieke hardware draaien. Kun je aan de Linux-opdrachtregel zien of de computer fysiek of virtueel is?

Virtuele machines en hypervisors

Een traditionele computer is een fysiek object. Het is een verzameling van verschillende stukjes hardware die aan elkaar zijn geplugd en vastgeschroefd, zodat u een besturingssysteem kunt laden, toepassingen kunt installeren, starten en gebruiken.

Hardware is duur. Omdat het beperkt is tot één besturingssysteem per fysieke computer, worden de kosten van het uitvoeren van meerdere besturingssystemen al snel onbetaalbaar. Een betere oplossing zou zijn om op één fysieke computer een selectie van besturingssystemen tegelijkertijd te laten draaien, waarbij elk besturingssysteem denkt dat het op zijn eigen, unieke hardware draait.

GERELATEERDWat is een virtuele machine-hypervisor?

Een hypervisor maakt dit mogelijk. Een hypervisor, ook wel virtual machine manager of virtual machine monitor genoemd, is software waarmee u virtuele machines kunt maken. Deze gedragen zich alsof het individuele, fysieke computers zijn, hoewel ze op dezelfde fysieke host draaien en de ruimte op de harde schijf, het geheugen en de CPU-kernen delen.

Natuurlijk moet de hostcomputer krachtig genoeg zijn om omgaan met de eisen van het verzamelen van virtuele machines, maar met voldoende RAM en verwerkingskracht in de host, kunnen virtuele machines bijna bare-metal snelheden draaien.

Advertentie

Sinds de release van de 2.6.20-kernel in 2007, heeft Linux Kernel-gebaseerde Virtual Machine-ondersteuning ingebouwd. Linux heeft verschillende hypervisors beschikbaar, zoals VirtualBox, GNOME Boxes en QEMU-KVM. Ze maken gebruik van de native KVM-mogelijkheden van Linux en bouwen voort op de native kernelfunctionaliteit door gebruikersinterfaces en functionaliteit toe te voegen, zoals het kunnen maken van een momentopname van een virtuele machine.

Virtuele machines zorgen voor kostenbesparingen, efficiëntie, vereenvoudigde implementaties en de juiste beveiligingsvoordelen. Ze vergemakkelijken ook de schaalbaarheid. Nieuwe servers kunnen automatisch worden opgestart als de vraag naar een service toeneemt en worden uitgeschakeld wanneer de vraag daalt. Dit maakt ze enorm populair, zowel in de cloud als in de on-premise infrastructuur.

Misschien beheert u op afstand een Linux-server en moet u weten of het een virtuele machine of een fysieke box is. Of je hebt een script dat moet weten op welk type platform het wordt uitgevoerd. Hier zijn verschillende manieren waarop u kunt detecteren of de computer waaraan u werkt fysiek of virtueel is.

Het dmidecode-commando

De dmidecode commando ondersteunt een groot aantal opties en modifiers. Het ondervraagt ​​de Desktop Management Interface (DMI)-tabellen en drukt de informatie in het terminalvenster af.

< strong class='relatedtext'>GERELATEERDHoe u de apparaten van uw computer kunt weergeven vanaf de Linux-terminal

We gebruiken het met de optie -s (een enkele tekenreeks weergeven) en vragen naar de productnaam van het systeem. Merk op dat we sudo moeten gebruiken.

We zullen de opdracht uitvoeren op een VirtualBox VM met Ubuntu 22.04.

sudo dmidecode -s system-product-name

Het platform is correct geïdentificeerd als VirtualBox.

Advertentie

Op een QEMU -KVM VM met Fedora 35, we krijgen deze uitvoer.

sudo dmidecode -s system-product-name

Hoewel dit wordt gerapporteerd als een standaard pc, het is een standaard QEMU virtuele pc, van het type Q35. Het platform wordt dus correct herkend als een virtuele machine.

Als we hetzelfde commando uitvoeren op een fysieke computer, krijgen we wat informatie over de fabrikant.

sudo dmidecode -s system-product-name < p>

Deze computer is op maat gemaakt op basis van een Micro-Star International Company Limited-moederbord, met de productcode MS-7B86.

Het lshw-commando

Het lshw-commando geeft de details weer voor een breed scala aan computerhardware. We kunnen kiezen over welke hardwareklasse we willen dat lshw rapporteert.

GERELATEERDIshw gebruiken in Linux (met een praktisch voorbeeld)

We gaan de -class optie gebruiken met de systeemmodifier. Door sudo met deze opdracht te gebruiken, zien we alle details.

We zullen deze opdracht uitvoeren op onze Ubuntu VirtualBox VM.

sudo lshw -class system

  • De “description” veld heeft een generieke invoer van “computer.”
  • Het “product” veld vertelt ons dat dit een virtuele machine is die draait in VirtualBox.
  • De “verkoper” veld bevat de naam van het Duitse bedrijf dat VirtualBox heeft gemaakt, Innotek GmbH. Innotek werd in 2010 overgenomen door de Oracle Corporation als onderdeel van de overname van Sun Microsystems, Inc.

We moesten lshw op Fedora installeren.

sudo dnf install lshw

Advertentie

Laten we dat commando eens proberen in onze Fedora VM die in GNOME-boxen.

sudo lshw -class system

  • Nogmaals, de “description” veld heeft een generieke invoer van “computer.”
  • Het “product” veld geeft ons dezelfde standaard QEMU pc-informatie die we zagen met het dmidecode-commando.
  • De “verkoper” veld bevat “QEMU” wat heel duidelijk aangeeft dat dit een virtuele machine is.

Dit is het resultaat van het uitvoeren van dezelfde opdracht op onze fysieke computer.

sudo lshw -class system

We kunnen zien dat dit een hardwarecomputer is, met een Micro-Star-moederbord.

  • De hardware wordt geïdentificeerd als een desktopcomputer.
  • Het “product” veld geeft ons het type moederbord, MS-7B86.
  • De "verkoper" veld bevat de naam van de fabrikant.

De hostnamectl-opdracht

Deze opdracht heeft het voordeel dat u geen sudo-rechten hoeft te hebben om deze uit te voeren. Het is echter alleen beschikbaar op door het systeem ingeschakelde distributies. De meeste moderne distributies gebruiken systemd.

Dit is het antwoord van het uitvoeren van de opdracht op onze Ubuntu VirtualBox VM.

hostnamectl

  • De “pictogramnaam” veld heeft “-vm” toegevoegd.
  • Het “Chassis” veld bevat “vm.”
  • De “virtualisatie” veld bevat “oracle.”
  • De “Hardware Vendor” veld bevat “innotek GmbH.”
  • Het “hardwaremodel” veld bevat “VirtualBox.”

De uitvoer op onze Fedora VM in GNOME Boxes lijkt erg op elkaar.

hostnamectl

  • De “pictogramnaam” veld heeft “-vm” toegevoegd.
  • Het “Chassis” veld bevat “vm.”
  • De “virtualisatie” veld bevat “kvm.”
  • De “Hardware Vendor” veld bevat “QEMU”
  • Het “Hardware Model” veld bevat “Standard PC (Q35 + ICH9, 2009).”

Advertentie

Als we de opdracht hostnamectl op ons fysieke bureaublad gebruiken, bevat de uitvoer geen “virtualisatie” regel.

hostnamectl

Als er geen & #8220;Virtualisatie” veld, moet je op bare metal werken.

Het systemd-detect-virt-commando

Als je een zo kort mogelijk antwoord wilt krijgen, is systemd-detect-virt waarschijnlijk wat je zoekt. Nogmaals, dit vereist een met het systeem uitgeruste distributie, maar het vereist geen sudo-privileges. Dit en zijn beknopte uitvoer maken het zeer geschikt voor gebruik in scripts.

Dit is het resultaat van het uitvoeren van de opdracht op onze Ubuntu VirtualBox VM.

systemd-detect-virt

Ons exemplaar van Fedora dat in GNOME Boxes draait, maakt naar verluidt gebruik van KVM-virtualisatie.

systemd-detect-virt

Het uitvoeren van systemd-detect-virt op onze hardwaremachine resulteert in “none” wordt afgedrukt naar de terminal.

systemd-detect-virt

Een platformgevoelig script

Om een ​​script de mogelijkheid te geven om te detecteren of het in een gevirtualiseerde omgeving of op fysieke hardware draait, kunnen we de systemd gebruiken -detect-virt commando en gebruik Bash case statements om de opties af te handelen.

Advertentie

Dit is het script dat we zullen gebruiken. Kopieer deze tekst en sla het op in een bestand genaamd “platform.sh.”

#!/bin/bash shopt -s nocasematch case $(systemd-detect-virt) in none) echo ” Fysieke hardware” ;; *) echo “Virtuele machine”;; esac

Het script gebruikt shopt om hoofdletterongevoelige overeenkomsten te kiezen. Het systemd-detect-virt commando wordt gebruikt in het case statement. De uitvoer van deze opdracht wordt vergeleken met elk van de case-clausules in de hoofdtekst van de case-instructie totdat een overeenkomst is gevonden. Alles wat niet overeenkomt, wordt vastgelegd door de “*)” standaardclausule.

GERELATEERDCase-statements gebruiken in Bash Scripts

De eenvoudigste manier is om te testen of het antwoord van systemd-detect-virt “none is.” Als dit het geval is, wordt het script op fysieke hardware uitgevoerd. Voor alle andere gevallen moet het script op een virtuele machine draaien.

Voordat we het script kunnen uitvoeren, moeten we het uitvoerbaar maken met chmod.

chmod +x platform.sh

Het identificeert onze Ubuntu VirtualBox VM correct als een virtuele machine.

./platform.sh

Advertentie

Het detecteert ook correct de GNOME Boxes VM waarop Fedora draait.

./platform.sh

Het script detecteert ook correct wanneer het op een fysieke machine draait.

./platform.sh

De verschillende hoofdletters kunnen variabelen instellen die elders in het script zijn gecontroleerd om verschillende soorten verwerking uit te voeren, of ze kunnen specifieke functies in uw script aanroepen.

Als je script verschillende soorten virtuele omgevingen moest detecteren en accommoderen, zou je meer hoofdletterclausules kunnen toevoegen, op zoek naar de verschillende tekenreeksen die systemd-detect-virt kan retourneren. We kunnen de volledige lijst met mogelijke antwoorden zien door de –list optie te gebruiken. Om het gemakkelijker te maken om ze allemaal tegelijk te zien, zullen we de uitvoer door het kolomcommando sturen.

systemd-detect-virt –list | column

Neem de Red Pill

Deze technieken laten uw scripts weten wanneer ze op naakte hardware draaien en wanneer ze zich in een virtuele machine bevinden.

Net als Neo in the Matrix, ze zullen weten wat echt is en wat niet.

LEES VOLGENDE

  • › 4 nutteloze technische producten die u niet zou moeten kopen
  • › Moet je een drone kopen?
  • › Heb ik vergulding op mijn kabels nodig?
  • › De beste budgetsprekers van 2022
  • › Logitech MX Master 3S Mouse Review: gedempte verfijningen
  • › Wat is er nieuw in Chrome 102, nu beschikbaar