Virtualisierung


© Mai 2020, Letzte Änd. 03.10.22

Übersicht

Allgemeines

Hat man früher im PC verschiedene Betriebssysteme gleichzeitig
auf verschiedenen Platten oder verschiedenen Partitionen gehabt,
bestand immer die Gefahr der gegenseitigen Beeinflussung.
Beispielsweise konnte man sich fast sicher sein,
dass der Linux-Bootloader nach der Windows-Installation
stumpf überschrieben wurde.
Die Linux nfts-Treiber waren früher noch ein wenig buggy,
sodass es bei Fremdzugriff leicht zu Datenschrott kam.
Ein gleichzeitiger Betrieb verschiedener Betriebssystem ist quasi ausgeschlossen.
Das heißt im Moment des Bootens muß man sich entscheiden...

Anders sieht die Situation aus wenn man
verschiedenen Betriebssystemen virtuelle Hardware anbietet.
Ich kann vom Host-System aus entscheiden,
was der virtuellen Umgebung zur Verfügung gestellt wird
(z.B. Netzwerk, Tauschlaufwerk, Speicher & CPU-Kerne, etc.).
Es ist möglich mehrere voneinander abgeschottete Gast-Systeme
gleichzeitig zu betreiben, aber benötigt nur eine Hardware.
Wenn Windows mal wieder nicht runter fahren will
wegen irgendwelcher Updates, muss ich nicht warten,
sondern kann zu jedem Zeitpunkt eine Session einfrieren und sie später fortsetzen.
Ebenso sind sogenannte Snapshots möglich,
zu denen ich wieder zurückgehen kann um
gewisse Veränderungen ungeschehen zu machen.

Virtualisierungs-Klassiker sind meines Erachtens Vmware.com und VirtualBox.org.
Mittlerweile tummeln sich hier noch etliche weitere technische Lösungen,
wobei ich hier nicht drauf eingehen möchte was die Unterschiede sind,
wo Emulation anfängt, welche Ebenen der Virtualisierung es gibt, etc..

Mit VirtualBox habe ich die meisten Jahre Erfahrungen und Kummer
sammeln können, daher hier eine VirtualBox-Anleitung.
VM-Ware, verwendete ich in der Firma und zickt ab und zu auch mal rum...

Noch nicht so lange benutzte ich die opensource-Lösung
KVM - kernel-based virtual machine, welche mein Nachfolger ist.
Je nach Anwendung, ist es einfacher eine VM - virtual machine über ein
CLI - command line interface wie die Kombination KVM & Virsh zu bedienen
oder per GUI - graphical user interface mit der Kombination KVM & VM-Manager.
Nachfolger vom virt-manager wird wahrscheinlich KVM & Cockpit.

Eine unter Umständen ausreichende Spezial-Lösung um
Windows-Programme auf Linux lauffähig zu machen, findet man auf folgender Seite
winehq.org   WINE - Wine Is Not an Emulator

Ich persönlich jedoch, bevorzuge eine saubere Trennung
von Produktiv-System (DEB) und temporären oder
mit Fremdsoftware angereicherten Systemen.
Das heist, sobald etwas ausserhalb der üblichen Software benötigt wird,
welches sich nicht in den Paketen befindet,
weiche ich auf ein virtualisiertes System aus.

Voraussetzungen für Virtualisierung

Eigentlich schon fast wie selbstverständlich,
gehe ich davon aus das die CPU (> Jahr 2000)
entsprechende Befehle zur Virtualisierung beherrscht.
Im einfachsten Fall ist die Befehls-Erweiterung lediglich im BIOS deaktiviert.
Je nach CPU (AMD/Intel) muss nach einer anderen
Zeichenkette oder String gesucht werden.
Wird im Text "vmx" gefunden, steht Intel VT zur Verfügung,
entsprechend bei AMD heißt die Erweiterung für "svm" AMD-V.
Ist weder die ein noch die andere Endung zu entlocken,
ist Hardware Virtualisierung z.B. mit VirtualBox zwar möglich,
aber ungenießbar langsam. Mit kvm ist es ähnlich, sollte keine Ausgabe kommen,
wie z.B. bei meinem ca. 14 Jahre alten T60 Laptop,
ist Hardware Virtualisierung mit KVM nicht erträglich möglich
(verwendet dann QEMU).

grep svm /proc/cpuinfo                      Beispiel für AMD ohne Markierung
flags:  fpu vme de pse tsc msr pae mce cx8 apic sep mtrr…
        svm…                                4x bei vier AMD-Kernen


egrep '(vmx|svm)' --color=always /proc/cpuinfo
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb 
rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology 
tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 
monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe 
popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault 
cat_l2 ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase 
tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt 
xsavec xgetbv1 xsaves dtherm ida arat pln pts md_clear arch_capabilities

für einen Intel-Prozessor mit 4 Kernen, wiederholt sich der Text 4 Mal

Entsprechend der Anzahl an CPU-Kernen wiederholt sich die obige gekürzte Meldung.

Anbei eine wesentlich kürzere Möglichkeit zu überprüfen,
ob die CPU Hardwarevirtualisierung beherrscht.
Ist alles in Ordnung, sind zwei Kernel-Module (hier kvm_amd & kvm) vorhanden.

lsmod | grep kvm                             
kvm_amd              2183168  0
kvm                   606208  1 kvm_amd     Antwort AMD-V
irqbypass              16384  1 kvm

Für Intel sieht es vergleichbar aus. Zwei Kernel-Module: (hier kvm_intel & kvm)

lsmod | grep kvm 
kvm_intel             233472  8
kvm                   757760  1 kvm_intel
irqbypass              16384  5 kvm

Noch eleganter kann man mit folgenden Befehl feststellen,
ob die CPU (hier intel) mit der jetzigen BIOS-Einstellung, Virtualisierung beherrscht.
Zudem sehe ich auch ob 64 Bit möglich sind.

lscpu                                            
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       39 bits physical, 48 bits virtual
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               92
Model name:          Intel(R) Celeron(R) CPU J3455 @ 1.50GHz
Stepping:            9
CPU MHz:             1122.746
CPU max MHz:         2300.0000
CPU min MHz:         800.0000
BogoMIPS:            2995.20
Virtualization:      VT-x
L1d cache:           24K
L1i cache:           32K
L2 cache:            1024K
NUMA node0 CPU(s):   0-3
Flags:               fpu vme de pse tsc msr pae…

Zum Anfang

32 Bit oder 64 Bit CPU Architektur

Ein weiterer Aspekt wäre die Frage ob eine 64 Bit-CPU oder noch eine 32-Bit-CPU verbaut ist.
Auch hierfür gibt es verschiedene Möglichkeiten.

grep " lm " --color=always /proc/cpuinfo         lm - long mode = 64 Bit
 
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc … 

grep -o -w 'lm' /proc/cpuinfo
lm
lm
lm
lm                                               für vier 64 Bit CPU-Kerne

uname -a                                         386/486/… steht für 32 bit Kernel
Linux gj2 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux

getconf LONG_BIT
64

Zum Anfang

Quellen:

pcwelt.de - Vergleich VBox, vmware & hyper-v von 2019
tecchannel.de - Vergleich kostenloser Virtualisierungssoftware 2015
com-magazin.de - 5 Virtualisierer im Vergleich 2015
netzwelt.de - Aufzählung von Virtualisierungs-Software 2020
ubuntupit.com - 15 best Windows-Emulators under Linux, Jahr?
heise.de - Auflistung von Emulatoren
sourceforge.net - WINE
itsfoss.com - run Windows applications on Linux with WINE