Tags: Windows 10, Linux, Server Core
Mitte 2019 kündigte Microsoft die Version 2 von Windows Subsystem for Linux (WSL 2) an. Sie nutzt im Hintergrund eine leichtgewichtige virtuelle Maschine und umfasst einen vollständigen Linux-Kernel. Dies soll zu einer höheren Performance führen und die Kompatibilität mit Linux-Programmen verbessern.
Bereits die erste Version von WSL eröffnete interessante Möglichkeiten wie das Ausführen unmodifizierter ELF64-Programme, die auch auf das Windows-Dateisystem zugreifen können. Gleichzeitig stellt es einen Großteil des Unix-Werkzeugkastens zur Verfügung, ohne dass man dafür Portierungen wie Cygwin benötigt.
Bei der Version 1 verwies Microsoft noch explizit darauf, dass WSL auf einer Erweiterung des Windows-Kernels beruhe und daher eine engere Integration zwischen den beiden Systemen biete als wenn man Linux in einer VM unter Hyper-V ausführt. Mit WSL 2 versucht Microsoft nun, das Beste aus diesen beiden Ansätzen zu kombinieren.
Linux-Kernel läuft in VM
Der künftig mit Windows ausgelieferte Linux-Kernel läuft in einer schlanken virtuellen Maschine, die man nicht selbst anlegen muss und die auch keine Installation von Hyper-V erfordert. Dieses Konzept einer Utility-VM liegt bereits anderen Features wie der Windows Sandbox oder der Virtualization Based Security (beispielsweise Credential Guard) zugrunde.
Anstatt wie vorher viele System-Calls von Linux-Programmen auf die Windows-API zu übersetzen, können sie nun die nativen Schnittstellen des Linux-Kernels nutzen. Dadurch lassen sich mehr Anwendungen unter WSL ausführen als zuvor, darunter auch Docker-Container.
EXT4-Dateisystem in VHDX
Ein weiterer Effekt dieses Architekturwechsels besteht darin, dass Microsoft kein hybrides Dateisystem mehr benötigt, bei dem jenes für Linux unter %localappdata% eingehängt wird. Vielmehr nutzt WSL 2 innerhalb der VHDX ein natives EXT4. Den Speicherort dieses virtuellen Laufwerks ermittelt man beispielsweise bei Ubuntu mit
"$env:LOCALAPPDATA\Packages\" + (Get-AppxPackage -Name Canonical*).PackageFamilyName
Gerade die Dateizugriffe sollen sich Microsoft zufolge deswegen in WSL 2 deutlich beschleunigen, solange man sich mit den Linux-Programmen innerhalb des root-Dateisystems bewegt. Dieser Performance-Gewinn fällt weg, sobald man Dateioperationen auf Windows-Laufwerken ausführt, die unter /mnt eingehängt werden, also etwa /mnt/c für C:.
Ein weiterer Fortschritt besteht darin, dass Windows-Programme nun auch auf das Linux-Dateisystem zugreifen können. So kann man etwa den Explorer nutzen, um Dateien zu kopieren oder zu löschen.
Nachteile der neuen Architektur
Der Einsatz von Virtualisierungstechnik bringt aber auch Nachteile mit sich. Sie äußern sich nicht, wie man vermuten könnte, durch eine geringe Integration der beiden Welten. Die Ausführung einer VM stellt aber höhere Anforderungen an die Hardware. Die meisten physischen Rechner mit modernen CPUs erfüllen diese leicht, Support für Intel VT oder AMV-V sind dort Standard.
Anders sieht es aus, wenn man Windows 10 oder einen SAC-Server in einer VM ausführt. In diesem Fall benötigt man Nested Virtualization, damit WSL 2 eine VM in der VM nutzen kann.
Besonders unter Windows 10 kommt hinzu, dass der vermehrte Einsatz von Utility-VMs andere Hypervisor wie VirtualBox oder VMware Workstation ausbremst (Letztere soll in der nächsten Version auch auf Hyper-V laufen, VirtualBox unterstützt seit der Version 6.0 ein Fallback auf Hyper-V, wenn auch auf Kosten der Performance).
Wer damit ein Problem hat, kann auf absehbare Zeit weiterhin WSL 1 nutzen und es ist auch möglich, zwischen den beiden Versionen umzuschalten.
Installation von WSL 2
Das Subsystem für Linux 2 ist in den aktuellen Previews für Windows 10 20H1 und Server im Semi-annual Channel mit an Bord und soll im endgültigen Release als neues Feature dabei sein. Auf Windows Server 2019 wird WSL 2 nicht unterstützt.
Die Installation hat sich gegenüber WSL 1 nicht grundsätzlich verändert. Man fügt WSL 2 wie gehabt als optionales Feature über die Systemsteuerung hinzu. Das aktiviert aber nicht die notwendige Virtualisierungsfunktion, das muss man über PowerShell tun:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Dieser Schritt ist aber nicht erforderlich, wenn auf dem Rechner bereits Hyper-V oder das Sandbox-Feature läuft.
Der ganze Vorgang lässt sich auch vollständig über die Kommandozeile erledigen. Dies ist unter Windows Server im SAC ohnehin erforderlich, da es dort nur die Core-Variante gibt.
Im ersten Schritt aktiviert man dabei das eigentliche WSL-Feature über PowerShell. Dafür ruft man
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
auf, beim Server funktioniert auch
Install-WindowsFeature -Name Microsoft-Windows-Subsystem-Linux
Danach schaltet man, wie oben gezeigt, die Virtualisierungsfunktionen frei:
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
WSL-Version festlegen
Nach dem Neustart steht das Kommandozeilen-Tool wsl.exe zur Verfügung, mit dem man unter anderem zwischen WSL 1 und 2 umschalten kann. Vor der Installation der ersten Distribution empfiehlt es sich, WSL 2 durch den Aufruf von
wsl.exe --set-default-version 2
zu aktivieren. Es besteht aber auch die Möglichkeit, die WSL-Version für jede Linux-Distribution individuell zu wählen, und zwar nach dem Muster
wsl.exe --set-version <Name-der-Distribution> 2
Den genauen Namen der Distributionen ermittelt man mit
wsl.exe -l -v
Linux-Distribution hinzufügen
Nun kann man sich daran machen, eine Linux-Distribution zu installieren. Dies lässt sich unter Windows 10 einfach über den Microsoft Store bewerkstelligen. Alternativ lädt man ein Paket über den Browser von der Adresse herunter, die auf dieser Seite von Microsoft Docs angegeben ist.
Anschließend fügt man dieses bei Ubuntu über den Befehl
Add-AppxPackage CanonicalGroupLimited.Ubuntu18.04onWindows_[…].Appx
hinzu.
Mittels
Get-AppxPackage Canonical*
findet man heraus, wo das Paket installiert wurde und schaut, wie die ausführbare Datei heißt. Im Fall von Ubuntu 18.04 ist der Name ubuntu1804.exe. Beim ihrem ersten Aufruf installiert sich das Linux und es erwartet dann gleich die Eingabe eines Benutzers und eines Passworts.
Distribution unter Server Core einrichten
Unter Server Core funktioniert dieses Vorgehen nicht, weil dort ein Web-Browser fehlt und sich APPX nicht regulär installieren lassen. Daher bemüht man PowerShell für den Download mit dem Aufruf von Invoke-WebRequest und einer URL aus der oben genannten Quelle. Bei Ubuntu wäre das
Invoke-WebRequest https://aka.ms/wsl-ubuntu-1804 -OutFile ubuntu-1804.zip `
-UseBasicParsing
Bei APPX handelt es sich um ein ZIP-Archiv mit einer anderen Dateiendung. Der obige Beispiel-Download speichert das Paket gleich mit der Extension .zip, weil das Cmdlet Expand-Archive sonst seinen Dienst verweigern würde. Mit dessen Hilfe entpackt man die Distribution:
Expand-Archive -Path .\ubuntu-1804.zip
Der Inhalt des Archivs findet sich dann im Unterverzeichnis .\ubuntu-1804, wo man die .exe-Datei startet, um das Linux einzurichten.
Falls man auf dem Rechner Windows Terminal einsetzt, dann erhält es automatisch einen Eintrag für die eben installierte Distribution und man kann von dort direkt die bash starten.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Version 1.0 mit neuen Features: Windows Subsystem for Linux kommt künftig aus dem Store
- Windows Subsystem für Linux über die Kommandozeile (wsl.exe) installieren
- GUI-Anwendungen ausführen im Windows Subsystem für Linux (WSL)
- Distributionen im Subsystem für Linux (WSL) duplizieren, verschieben und exportieren
- Docker-Container im Subsystem für Linux 2 (WSL 2) ausführen
Weitere Links