Vergleich zwischen WSL 1 und WSL 2

Der Hauptunterschied und die Gründe für die Aktualisierung des Windows-Subsystems für Linux von WSL 1 auf WSL 2 sind:

  • Steigern der Leistung des Dateisystems,
  • Unterstützen der vollständigen Kompatibilität von Systemaufrufen.

WSL 2 verwendet das Neueste und Beste an Virtualisierungstechnologie, um einen Linux-Kernel innerhalb einer schlanken Hilfsprogramms-VM auszuführen. WSL 2 ist jedoch keine herkömmliche VM-Benutzererfahrung.

Vergleich der Features

Feature WSL 1 WSL 2
Integration zwischen Windows und Linux
Schnelle Startzeiten
Geringer Ressourcenbedarf im Vergleich zu herkömmlichen virtuellen Computern
Wird mit aktuellen Versionen von VMware und VirtualBox ausgeführt
Verwaltete VM
Vollständiger Linux-Kernel
Vollständige Kompatibilität von Systemaufrufen
Leistung über Betriebssystem-Dateisysteme hinweg

Wie Sie aus der Vergleichstabelle oben ersehen können, übertrifft die WSL 2-Architektur WSL 1 in mehrfacher Hinsicht, mit Ausnahme der Leistung über Betriebssystem-Dateisysteme hinweg.

Leistung über Betriebssystem-Dateisysteme hinweg

Es wird davon abgeraten, mit Ihren Dateien betriebssystemübergreifend zu arbeiten, es sei denn, es liegt ein besonderer Grund dafür vor. Für die schnellste Leistungsgeschwindigkeit speichern Sie Ihre Dateien im WSL-Dateisystem, wenn Sie mit einer Linux-Befehlszeile (Ubuntu, OpenSUSE usw.) arbeiten. Wenn Sie in einer Windows-Befehlszeile (PowerShell, Eingabeaufforderung) arbeiten, speichern Sie Ihre Dateien im Windows-Dateisystem.

Wenn Sie z. B. die WSL-Projektdateien speichern:

  • Verwenden Sie das Stammverzeichnis des Linux-Dateisystems: \\wsl$\Ubuntu-18.04\home\<user name>\Project
  • Verwenden Sie nicht das Stammverzeichnis des Windows-Dateisystems: C:\Users\<user name>\Project

Auf alle derzeit ausgeführten Verteilungen (wsl -l) kann über eine Netzwerkverbindung zugegriffen werden. Um dorthin zu gelangen, führen Sie einen Befehl [WIN+R] (Tastaturkürzel) aus, oder geben Sie \\wsl$ in die Adressleiste des Datei-Explorers ein, um die Namen der jeweiligen Verteilungen zu finden und auf deren Stammdateisysteme zuzugreifen.

Sie können auch Windows-Befehle innerhalb des Linux-Terminal von WSL verwenden. Öffnen Sie eine Linux-Verteilung (z. B. Ubuntu), und stellen Sie sicher, dass Sie sich im Basisverzeichnis von Linux befinden, indem Sie den Befehl cd ~ eingeben. Öffnen Sie dann das Linux-Dateisystem im Datei-Explorer, indem Sie Folgendes eingeben (den Punkt am Ende nicht vergessen) : powershell.exe /c start .

Wichtig

Wenn der Fehler -bash: powershell.exe: Befehl nicht gefunden auftritt, lesen Sie die Seite zur WSL-Problembehandlung, um den Fehler zu beheben.

WSL 2 ist nur in Windows 10, Version 1903, Build 18362 oder höher verfügbar. Überprüfen Sie Ihre Windows-Version, indem Sie die Windows-Logo-Taste+R auswählen, winver eingeben und OK auswählen. (Oder geben Sie den Befehl ver an der Windows-Eingabeaufforderung ein.) Möglicherweise müssen Sie auf die neueste Windows-Version aktualisieren. Für Builds vor 18362 wird WSL überhaupt nicht unterstützt.

Hinweis

Die WSL 2 verwendet VMware 15.5.5+ und VirtualBox 6+. Weitere Informationen finden Sie in den häufig gestellten Fragen zu WSL 2.

Neues in WSL 2

WSL 2 ist eine wichtige Überarbeitung der zugrunde liegenden Architektur und nutzt Virtualisierungstechnologie und einen Linux-Kernel, um neue Features zu ermöglichen. Die Hauptziele für diese Aktualisierung sind eine gesteigerte Leistung des Dateisystems und das Hinzufügen vollständiger Kompatibilität von Systemaufrufen.

WSL 2-Architektur

Eine herkömmliche VM-Benutzerumgebung lässt sich unter Umständen nur langsam starten, verbraucht viele Ressourcen und nimmt für die Verwaltung Ihre Zeit in Anspruch. WSL 2 weist diese Merkmale nicht auf.

WSL 2 bietet die Vorteile von WSL 1, einschließlich der nahtlosen Integration zwischen Windows und Linux, schnellen Startzeiten, einem geringem Ressourcenbedarf und erfordert keine VM-Konfiguration oder -Verwaltung. Zwar verwendet WSL 2 eine VM, diese wird jedoch hinter den Kulissen verwaltet und ausgeführt, und Ihnen bleibt die Benutzererfahrung von WSL 1 erhalten.

Vollständiger Linux-Kernel

Der Linux-Kernel in WSL 2 wird von Microsoft aus dem aktuellsten Stable-Branch auf der Grundlage der auf „kernel.org“ verfügbaren Quelle erstellt. Dieser Kernel wurde speziell für WSL 2 optimiert und zwar hinsichtlich Größe und Leistung, um unter Windows eine beeindruckende Linux-Erfahrung zu bieten. Der Kernel wird mit Windows-Updates gewartet, was bedeutet, dass Sie die neuesten Sicherheitskorrekturen und Kernelverbesserungen erhalten, ohne die Aktualisierungen selbst verwalten zu müssen.

Der WSL 2 Linux-Kernel ist Open Source-. Wenn Sie weitere Informationen benötigen, lesen Sie den Blogbeitrag Shipping a Linux Kernel with Windows (Ausliefern eines Linux-Kernels mit Windows), der von dem Team geschrieben wurde, das ihn erstellt hat.

Verbesserte E/A-Leistung für Dateien

Dateiintensive Vorgänge wie Git-Klon, npm-Installation, apt-Update, apt-Upgrade und mehr sind mit WSL 2 deutlich schneller.

Die tatsächliche Geschwindigkeitssteigerung hängt davon ab, welche App Sie ausführen und wie sie mit dem Dateisystem interagiert. Anfängliche Versionen von WSL 2 werden im Vergleich mit WSL 1 bis zu 20mal schneller ausgeführt (Entpacken eines gezippten Tarballs) und 2–5mal schneller beim Verwenden von Git-Klon, npm-Installation und CMake in verschiedenen Projekten.

Vollständige Kompatibilität von Systemaufrufen

Linux-Binärdateien verwenden Systemaufrufe für Funktionen, wie den Zugriff auf Dateien, das Anfordern von Arbeitsspeicher, das Erstellen von Prozessen und mehr. Während WSL 1 eine Übersetzungsschicht verwendete, die vom WSL-Team erstellt wurde, enthält WSL 2 seinen eigenen Linux-Kernel mit vollständiger Kompatibilität der Systemaufrufe. Vorteile umfassen:

  • Ein ganz neuer Satz von Apps, die Sie in WSL ausführen können, wie etwa Docker und mehr.

  • Alle Updates des Linux-Kernels sind sofort einsatzbereit. (Sie müssen nicht warten, bis das WSL-Team Updates implementiert und die Änderungen hinzufügt).

Ausnahmen zur Verwendung von WSL 1 anstelle von WSL 2

Es wird empfohlen, WSL 2 zu verwenden, da es eine schnellere Leistung und 100%ige Kompatibilität von Systemaufrufen bietet. Es gibt jedoch einige spezielle Szenarien, in denen Sie möglicherweise WSL 1 verwenden möchten. Erwägen Sie in folgenden Fällen die Verwendung von WSL 1:

  • Ihre Projektdateien müssen im Windows-Dateisystem gespeichert werden. WSL 1 bietet schnelleren Zugriff auf Dateien, die von Windows aus bereitgestellt werden.
    • Wenn Sie Ihre WSL Linux-Verteilung verwenden, um auf Projektdateien im Windows-Dateisystem zuzugreifen, und diese Dateien nicht im Linux-Dateisystem gespeichert werden können, erzielen Sie mithilfe von WSL 1 eine schnellere Leistung über die Betriebssystemdateien.
  • Ein Projekt, das die Kreuzkompilierung mithilfe von Windows- und Linux-Tools für dieselben Dateien erfordert.
    • Die Dateileistung über Windows- und Linux-Betriebssysteme hinweg ist in WSL 1 schneller als in WSL 2. Wenn Sie also Windows-Anwendungen für den Zugriff auf Linux-Dateien verwenden, erzielen Sie derzeit eine schnellere Leistung mit WSL 1.
  • Ihr Projekt benötigt Zugriff auf einen seriellen Anschluss oder ein USB-Gerät.
  • Sie haben strenge Arbeitsspeicheranforderungen
    • Der Arbeitsspeicherbedarf von WSL 2 wächst und schrumpft je nach Verwendung. Wenn ein Prozess Arbeitsspeicher freigibt, wird dieser automatisch an Windows zurückgegeben. Momentan gibt WSL 2 jedoch zwischengespeicherten Seiten im Speicher erst dann an Windows zurück, wenn die WSL-Instanz heruntergefahren wird. Wenn Sie über zeitintensive WSL-Sitzungen verfügen oder auf sehr viele Dateien zugreifen, kann dieser Cache unter Windows viel Speicherplatz belegen. Wir verfolgen die Arbeiten zur Verbesserung dieser Erfahrung im WSL-Github-Repository, Problem 4166.

Hinweis

Probieren Sie den VS-Code Remote WSL-Erweiterung aus, mit dem Sie Ihre Projektdateien im Linux-Dateisystem speichern können, indem Sie Linux-Befehlszeilentools verwenden, aber auch VS-Code unter Windows zum Verfassen, Bearbeiten, Debuggen oder Ausführen Ihres Projekts in einem Internetbrowser ohne die mit den Linux- und Windows-Dateisystemen verbundenen Leistungseinbußen. Weitere Informationen

Zugriff auf Netzwerkanwendungen

Zugreifen auf Linux-Netzwerk-Apps aus Windows (localhost)

Wenn Sie in Ihrer Linux-Verteilung eine Netzwerk-App (z. B. eine App, die auf einer NodeJS- oder SQL Server-Instanz ausgeführt wird) entwickeln, können Sie auf diese über eine Windows-App (z. B. Ihren Microsoft Edge- oder Chrome-Internetbrowser) unter Verwendung von localhost zugreifen (genau wie Sie dies normalerweise tun würden).

Wenn Sie jedoch eine ältere Version von Windows ausführen (Build 18945 oder älter), müssen Sie die IP-Adresse der Linux-Host-VM abrufen (oder auf die neueste Windows-Version aktualisieren).

So ermitteln Sie die IP-Adresse des virtuellen Computers, der Ihre Linux-Verteilung unterstützt:

  • Führen Sie in ihrer WSL-Verteilung (z. B. Ubuntu) den folgenden Befehl aus: ip addr
  • Suchen und kopieren Sie die Adresse unter dem inet-Wert der eth0-Schnittstelle.
  • Wenn Sie das grep-Tool installiert haben, finden Sie es leichter, indem Sie die Ausgabe mit dem Befehl ip addr | grep eth0 filtern.
  • Stellen Sie mithilfe dieser IP-Adresse eine Verbindung mit Ihrem Linux-Server her.

Die Abbildung zeigt ein Beispiel dafür – hier wird mithilfe des Microsoft Edge-Browsers eine Verbindung mit einem Node.js-Server hergestellt.

Herstellen einer Verbindung mit dem NodeJS-Server über Microsoft Edge

Zugreifen auf Windows-Netzwerk-Apps aus Linux (Host-IP)

Wenn Sie von Ihrer Linux-Verteilung (d. h. Ubuntu) aus, auf eine Netzwerk-App zugreifen möchten, die unter Windows ausgeführt wird (z. B. eine App, die auf einer NodeJS- oder SQL Server-Instanz ausgeführt wird), müssen Sie die IP-Adresse des Hostcomputers verwenden. Obwohl dies kein gängiges Szenario ist, können Sie die folgenden Schritte ausführen, damit es funktioniert.

  1. Rufen Sie die IP-Adresse Ihres Hostcomputers ab, indem Sie den folgenden Befehl aus Ihrer Linux-Verteilung heraus ausführen: cat /etc/resolv.conf
  2. Kopieren Sie die IP-Adresse nach dem Begriff: nameserver.
  3. Stellen Sie mithilfe der kopierten IP-Adresse eine Verbindung zu jedem beliebigen Windows-Server her.

Die Abbildung zeigt ein Beispiel dafür – hier wird über curl eine Verbindung mit einem Node.js-Server hergestellt, der unter Windows ausgeführt wird.

Herstellen einer Verbindung mit dem NodeJS-Server in Windows über Curl

Weitere Netzwerküberlegungen

Verbinden über Remote-IP-Adressen

Wenn Sie Remote-IP-Adressen verwenden, um Verbindungen mit Ihren Anwendungen herzustellen, werden diese als Verbindungen aus dem LAN (Local Area Network) behandelt. Dies bedeutet, Sie müssen sicherstellen, dass Ihre Anwendung LAN-Verbindungen akzeptieren kann.

Sie müssen z. B. möglicherweise Ihre Anwendung an 0.0.0.0 statt an 127.0.0.1 binden. In dem Beispiel einer Python-App, die Flask verwendet, kann das mithilfe dieses Befehls erfolgen: app.run(host='0.0.0.0'). Beachten Sie bei diesen Änderungen die Sicherheit, da Verbindungen aus Ihrem LAN zugelassen werden.

Zugreifen auf eine WSL 2-Verteilung aus Ihrem LAN (Local Area Network)

Wenn Sie eine WSL 1-Verteilung verwenden und Ihr Computer so eingerichtet wurde, dass auf ihn über Ihr LAN zugegriffen wird, kann auf Anwendungen, die in WSL ausgeführt werden, in Ihrem LAN ebenfalls zugegriffen werden.

Dies ist nicht der Standardfall in WSL 2. WSL 2 verfügt über einen virtualisierten Ethernet-Adapter mit einer eigenen eindeutigen IP-Adresse. Um diesen Workflow zu aktivieren, müssen Sie aktuell die gleichen Schritte wie bei einem gewöhnlichen virtuellen Computer durchlaufen. (Wir untersuchen Möglichkeiten, dieses Verhalten zu verbessern.)

Hier ist ein PowerShell-Beispielbefehl zum Hinzufügen eines Portproxys, der Port 4000 auf dem Host überwacht und ihn mit Port 4000 mit der IP-Adresse 192.168.101.100 zum WSL 2-Computer verbindet.

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

IPv6-Zugriff

WSL 2-Verteilungen können aktuell keine reinen IPv6-Adressen erreichen. Wir arbeiten daran, diese Funktion hinzuzufügen.

Erweitern der Größe Ihrer virtuellen WSL 2-Festplatte (VHD)

WSL 2 verwendet eine virtuelle Festplatte (VHD) zum Speichern Ihrer Linux-Dateien. In WSL 2 wird eine VHD auf Ihrer Windows-Festplatte als .vhdx-Datei dargestellt.

Die WSL 2-VHD verwendet das Ext4-Dateisystem. Diese VHD wird automatisch an Ihre Speicheranforderungen angepasst, und verfügt über eine anfängliche maximale Größe von 256 GB. Wenn der von Ihren Linux-Dateien benötigte Speicherplatz diese Größe überschreitet, müssen Sie ihn eventuell erweitern. Wenn Ihre Verteilung über die Größe von 256 GB anwächst, werden Ihnen Fehler angezeigt, die besagen, dass kein Speicherplatz mehr zur Verfügung steht. Sie können diesen Fehler beheben, indem Sie die Größe der VHD heraufsetzen.

So erweitern Sie die maximale VHD-Größe auf über 256 GB:

  1. Beenden Sie alle WSL-Instanzen mit dem Befehl wsl --shutdown.

  2. Suchen Sie den Namen des Installationspakets Ihrer Verteilung (PackageFamilyName):

    • Geben Sie in PowerShell Folgendes ein (wobei „distro“ für den Namen Ihrer Verteilung steht):
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
    • Beispiel: Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName

    Screenshot der Get-AppxPackage-Befehlszeile

  3. Suchen Sie mithilfe des angezeigten PackageFamilyName die VHD-Datei fullpath, die von Ihrer WSL 2-Installation verwendet wird. Dies ist Ihr pathToVHD. So finden Sie den vollständigen Pfad:

    • Geben Sie im Startmenü „%LOCALAPPDATA%“ ein, und öffnen Sie den Dateiordner „%LOCALAPPDATA%“.
    • Als Nächstes öffnen Sie den Ordner „Packages“ und suchen nach dem PackageFamilyName Ihrer Verteilung. Öffnen Sie diesen Ordner (d. h. „CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxxx“).
    • Öffnen Sie im Ordner PackageFamilyName den Ordner „LocalState“, und suchen Sie die Datei <disk>.vhdx.
    • Kopieren Sie den Pfad zu dieser Datei, der in etwa wie folgt aussehen sollte: %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
    • Beispielsweise sollte <pathToVHD> für Ubuntu 20.04 Folgendem ähneln: %LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxx\LocalState\ext4.vhdx
  4. Ändern Sie die Größe Ihrer WSL 2-VHD, indem Sie die folgenden Befehle ausführen:

    • Öffnen Sie die Windows-Eingabeaufforderung mit Administratorrechten, und geben Sie Folgendes ein:

      diskpart
      
      DISKPART> Select vdisk file="<pathToVHD>"
      
      DISKPART> detail vdisk
      
    • Prüfen Sie die Ausgabe des Befehls detail. Die Ausgabe enthält einen Wert für Virtuelle Größe. Dies ist der aktuelle Höchstwert. Konvertieren Sie diesen Wert in Megabytes. Wenn die Ausgabe von detail beispielsweise Virtuelle Größe: 256 GB anzeigt, konvertieren Sie diesen Wert in 256000.

    • Der neue Wert, den Sie eingeben, muss größer sein als dieser ursprüngliche Wert. Wenn Sie z. B. die oben aufgeführte virtuelle Größe verdoppeln möchten, können Sie den Wert 512000 eingeben. Nachdem Sie die gewünschte Zahl für die neue Größe (in Megabyte) festgelegt haben, geben Sie den folgenden Befehl an der Windows-Eingabeaufforderung für diskpart ein:

      DISKPART> expand vdisk maximum=<sizeInMegaBytes>
      
    • Beenden Sie diskpart.

      DISKPART> exit
      
  5. Starten Sie Ihre WSL-Verteilung (z. B. Ubuntu).

  6. Machen Sie WSL darauf aufmerksam, dass die Größe des Dateisystems durch Ausführen dieser Befehle über die Befehlszeile der WSL-Verteilung erweitert werden kann.

       sudo mount -t devtmpfs none /dev
       mount | grep ext4
    
    • Möglicherweise sehen Sie diese Meldung als Antwort auf den ersten mount-Befehl: „/dev: none already mounted on /dev“. Diese Meldung kann ignoriert werden.
    • Kopieren Sie den Namen dieses Eintrags, der diese Form hat: /dev/sdX (wobei X für ein beliebiges anderes Zeichen steht). Im folgenden Beispiel ist der Wert von X b:
       sudo resize2fs /dev/sdb <sizeInMegabytes>M
    
    • Mithilfe des obigen Beispiels haben wir die VHD-Größe in 512000 geändert. Daher lautet der Befehl sudo resize2fs /dev/sbd 512000M.

    Hinweis

    Möglicherweise müssen Sie auch resize2fs installieren. Wenn ja, können Sie diesen Befehl zur Installation verwenden: sudo apt install resize2fs.

    Die Ausgabe ist mit folgender Zeichenfolge vergleichbar:

       resize2fs 1.44.1 (24-Mar-2021)
       Filesystem at /dev/sdb is mounted on /; on-line resizing required
       old_desc_blocks = 32, new_desc_blocks = 38
       The filesystem on /dev/sdb is now 78643200 (4k) blocks long.
    

Wichtig

Es wird empfohlen, die WSL-bezogenen Dateien, die sich in Ihrem AppData-Ordner befinden, nicht mithilfe von Windows-Tools oder-Editoren zu ändern, zu verschieben oder darauf zuzugreifen. Dies könnte zu einer Beschädigung Ihrer Linux-Verteilung führen. Wenn Sie von Windows aus auf Ihre Linux-Dateien zugreifen möchten, ist dies über den Pfad \\wsl$\<distroName>\ möglich. Öffnen Sie die WSL-Verteilung, und geben Sie explorer.exe . ein, um diesen Ordner anzuzeigen. Weitere Informationen finden Sie im Blogbeitrag Zugreifen auf Linux-Dateien von Windows aus.