Für das Schreiben hardwarenaher Skripte muss der Admin wissen, ob er gerade auf einer physischen oder einer virtuellen Maschine unterwegs ist. Charly behilft sich da mit einigen pfiffigen Tricks.
Inhalt
68 SSH-Verbindungen
SSH-Verbindungen richtig absichern
Von den Systemen, auf denen ich arbeite, sind etwa 90 Prozent virtualisiert und 10 Prozent klassische Hardware-Server. Für viele Arbeiten macht das keinen Unterschied, aber wenn ich Skripte schreibe, die hardwarenahe Funktionen aufrufen oder ändern, benötige ich diese Information.
Habe ich auf dem System Root-Rechte und darf auch Software nachinstallieren, lässt sich das Problem sehr schnell lösen. Ich installiere entweder Facter [1] oder Virt-what [2]. Facter liefert umfangreiche Informationen zur Hardware des Systems, ähnlich wie Lshw, und ist für die Beantwortung der Frage “virtuell oder nicht” eigentlich überdimensioniert. Der Aufruf von »facter virtual« liefert als Antwort die Virtualisierungsplattform, also etwa »vmware« oder »kvm«. Dasselbe Ergebnis liefert der Aufruf »virt-what«. Wenn ich die Mächtigkeit von Facter nicht anderweitig benötige, ziehe ich das schlankere Virt-what vor.
Besitze ich zwar Root-Rechte, darf aber keine Software installieren, etwa wegen eingeschränkter Repositories, gibt es eine andere Möglichkeit: Das Kommando »dmidecode -t system« liefert mir die gewünschte Auskunft (Abbildung 1).
Was aber, wenn ich auf dem System keine Root-Rechte habe? Auch dafür gibt es Lösungen, sogar mehrere. Die erste ist das Kommando »dmesg | grep DMI«. Auf einem VMware-Gast sieht die Ausgabe so aus wie in der zweiten Zeile von Listing 1. Führe ich dasselbe Kommando auf einem physischen Server aus, gibt es an dieser Stelle meist Informationen zum Server-Modell (Zeile 4).
Listing 1
Virtuell oder physisch?
$ dmesg | grep DMI [ 0.000000] DMI: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/28/2020 [...] [ 0.000000] DMI: HP ProLiant DL320e Gen8, BIOS J05 12/10/2012 $ cat /proc/scsi/scsi Attached devices: Host: scsi2 Channel: 00 Id: 00 Lun: 00 Vendor: QEMU Model: QEMU HARDDISK Rev: 2.5+ Type: Direct-Access ANSI SCSI revision: 05 [...] Attached devices: Host: scsi2 Channel: 00 Id: 00 Lun: 00 Vendor: ATA Model: SanDisk SSD PLUS Rev: 00RL Type: Direct-Access ANSI SCSI revision: 05
Eine weitere Möglichkeit bietet »cat /proc/scsi/scsi«. Auf einem virtualisierten System bekomme ich eine Ausgabe wie in den Zeilen 7 bis 10 von Listing 1. Das physische System dagegen antwortet wieder mit Informationen zur Hardware (ab Zeile 12).
Es gibt noch eine ganze Reihe weiterer Möglichkeiten, aber wann immer es technisch möglich ist, benutze ich Virt-what: Schneller und einfacher geht es nicht. (jlu)
Infos
- Facter: https://github.com/puppetlabs/facter
- Virt-what: https://people.redhat.com/~rjones/virt-what/





