Freigeben über


So verwalten Sie WSL-Speicherplatz

In diesem Handbuch wird beschrieben, wie Sie den von Linux-Distributionen verwendeten Speicherplatz mithilfe von WSL 2 verwalten, einschließlich:

Das Windows-Subsystem für Linux (WSL 2) verwendet eine Virtualisierungsplattform, um Linux-Distributionen neben dem Hostbetriebssystem von Windows zu installieren und eine virtuelle Festplatte (Virtual Hard Disk, VHD) zu erstellen, um Dateien für jede der linux-Distributionen zu speichern, die Sie installieren. Diese VHDs verwenden den ext4-Dateisystemtyp und werden auf Ihrer Windows-Festplatte als ext4.vhdx- Datei dargestellt.

WSL 2 ändert automatisch die Größe dieser VHD-Dateien entsprechend den Speicheranforderungen. Standardmäßig wird jeder von WSL 2 verwendeten VHD-Datei zunächst eine maximale Speicherplatzmenge von 1 TB zugewiesen (vor WSL-Release 0.58.0 war dieser Standardwert auf maximal 512 GB und davor auf maximal 256 GB festgelegt).

Wenn der für Ihre Linux-Dateien erforderliche Speicherplatz diese maximale Größe überschreitet, werden Fehler angezeigt, die darauf hinweisen, dass sie nicht mehr genügend Speicherplatz haben. Um diesen Fehler zu beheben, befolgen Sie die nachstehenden Anleitungen zu So erweitern Sie die Größe Ihrer virtuellen WSL 2-Festplatte.

Überprüfen des verfügbaren Speicherplatzes

Überprüfen Sie, wie viel Speicherplatz in der VHD für eine linux-Verteilung verfügbar ist, die mit WSL 2 installiert ist, indem Sie den Befehl "Linux Df" verwenden.

Um den verfügbaren Speicherplatz zu überprüfen, öffnen Sie eine PowerShell-Befehlszeile, und geben Sie diesen Befehl ein (ersetzen sie <distribution-name> durch den tatsächlichen Verteilungsnamen):

wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro

Wenn dieser Befehl nicht funktioniert, führen Sie ein Upgrade auf die Store-Version von WSL mit dem Befehl wsl --update aus, oder versuchen Sie es mit wsl df -h /.

Die Ausgabe enthält folgende Informationen:

  • Dateisystem: Bezeichner für das VHD-Dateisystem
  • Größe: Gesamtgröße des Datenträgers (der maximale Speicherplatz, der der VHD zugeordnet ist)
  • Belegt: Menge an Speicherplatz, die derzeit in der VHD belegt ist
  • Verfügbar: In der VHD noch vorhandener Speicherplatz (zugeordnete Größe abzüglich des belegten Speicherplatzes)
  • Verwenden von%: Prozentsatz des verbleibenden Speicherplatzes (Verwendet/Zugewiesene Größe)
  • aufeingehängt: Verzeichnispfad, in dem der Datenträger eingehängt ist

Wenn Sie feststellen, dass Sie den verfügbaren Speicherplatz erreichen, der Ihrer VHD zugeordnet ist, oder bereits einen Fehler erhalten haben, weil kein Speicherplatz vorhanden ist, lesen Sie den nächsten Abschnitt, um zu erfahren, wie Sie den maximalen Speicherplatz erweitern, der der VHD zugeordnet ist, die Ihrer Linux-Verteilung zugeordnet ist. Die Menge an Speicherplatz, der Ihrer VHD von WSL zugewiesen wird, zeigt immer den Standardhöchstbetrag an (1 TB in der neuesten Version von WSL), auch wenn die Menge an Speicherplatz auf Ihrem tatsächlichen Windows-Gerät kleiner ist als das. WSL stellt eine VHD bereit, die während der Verwendung vergrößert wird, sodass Ihre Linux-Verteilung sieht, dass sie auf die zugewiesene maximale Größe von 1 TB wachsen kann.

So erweitern Sie die Größe Ihrer virtuellen WSL 2-Festplatte

Um die VHD-Größe für eine Linux-Verteilung über den standardmäßigen 1 TB maximalen Speicherplatz hinaus zu erweitern, können Sie den befehl wsl --manage verwenden oder die folgenden manuellen Schritte ausführen. (Bei früheren WSL-Versionen kann der Standardwert maximal auf 512 GB oder 256 GB festgelegt werden).

Erweitern der VHD-Größe mithilfe von wsl --manage

Der Befehl wsl --manage ist nur für WSL-Versionen 2.5 und höher verfügbar.

So ändern Sie die Größe des zugewiesenen Speicherplatzes auf Ihrem virtuellen Datenträger:

  1. Beenden aller WSL-Instanzen mithilfe des Befehls wsl.exe --shutdown

  2. Führen Sie wsl --manage <distribution name> --resize <memory string> aus. Unterstützte Speicherzeichenfolgen sind der Form <Memory Value>B/M/MB/G/GB/T/TB. Dezimalwerte werden derzeit nicht unterstützt (z. B. 2.5TB).

Die Ausgabe sollte ungefähr folgendermaßen aussehen:

e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
resize2fs 1.46.5 (30-Dec-2021)
The operation completed successfully.

Das virtuelle Laufwerk (ext4.vhdx) für diese Linux-Verteilung wurde nun erfolgreich auf die neue Größe erweitert.

Manuelle Erweiterung

So erweitern Sie die VHD-Größe für eine Linux-Verteilung mithilfe manueller Schritte:

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

  2. Kopieren Sie den Verzeichnispfad in die datei ext4.vhdx, die der auf Ihrem Computer installierten Linux-Verteilung zugeordnet ist. Hilfe finden Sie unter So finden Sie die vhdx-Datei und den Datenträgerpfad für Ihre Linux-Verteilung.

  3. Öffnen Sie die Windows-Eingabeaufforderung mit Administratorrechten, und öffnen Sie dann den diskpart Befehlsdolmetscher, indem Sie Folgendes eingeben:

    diskpart
    
  4. Nun wird eine DISKPART>-Eingabeaufforderung angezeigt. Geben Sie den folgenden Befehl ein, und ersetzen Sie <pathToVHD> durch den Verzeichnispfad zur ext4.vhdx Datei, die der Linux-Verteilung zugeordnet ist (in Schritt 2 kopiert).

    Select vdisk file="<pathToVHD>"
    
  5. Zeigen Sie die Details dieses virtuellen Datenträgers an, einschließlich der virtuellen Größe, die die aktuelle maximale Größe darstellt, die der VHD zugeordnet ist:

    detail vdisk
    
  6. Sie müssen die virtuelle Größe in Megabyte konvertieren. Wenn zum Beispiel Virtuelle Größe: 512 GB ist, ist dies das Gleiche wie 512000 MB. Der von Ihnen eingegebene neue Wert muss größer als dieser ursprüngliche Wert sein. Um die virtuelle Größe von 512 GB auf 1024 GB zu verdoppeln, geben Sie den Wert in MB wie: 1024000ein. Achten Sie darauf, keinen Höheren Wert einzugeben, als sie tatsächlich benötigen, da der Prozess zum Verringern einer virtuellen Datenträgergröße viel komplizierter ist.

  7. Geben Sie den Wert für die neue maximale Größe ein, die Sie dieser Linux-Distribution zuordnen möchten, mithilfe der Windows-Eingabeaufforderung DISKPART>:

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Beenden Sie die Eingabeaufforderung DISKPART>:

    exit
    
  9. Starten Sie diese Linux-Verteilung. (Stellen Sie sicher, dass sie in WSL 2 ausgeführt wird. Sie können dies mithilfe des Befehls bestätigen: wsl.exe -l -v. WSL 1 wird nicht unterstützt.

  10. Machen Sie WSL bewusst, dass sie die Dateisystemgröße für diese Verteilung erweitern kann, indem Sie diese Befehle über die Befehlszeile der WSL-Verteilung ausführen. Möglicherweise sehen Sie diese Meldung als Antwort auf den ersten mount-Befehl: „/dev: none already mounted on /dev“. Diese Meldung kann ignoriert werden.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Kopieren Sie den Namen dieses Eintrags, der wie folgt aussieht: /dev/sdX (wobei das X ein anderes Zeichen darstellt). Im folgenden Beispiel ist der Wert von Xb:

    sudo resize2fs /dev/sdb <sizeInMegabytes>M
    

    Mit dem obigen Beispiel haben wir die vhd-Größe in 20480000geändert, sodass der Befehl wie folgt lautet: sudo resize2fs /dev/sdb 2048000M.

    Anmerkung

    Möglicherweise müssen Sie resize2fsinstallieren. In diesem Fall können Sie diesen Befehl verwenden, um ihn zu installieren: sudo apt install resize2fs.

    Die Ausgabe sieht in etwa wie folgt aus:

    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.
    

Das virtuelle Laufwerk (ext4.vhdx) für diese Linux-Verteilung wurde nun erfolgreich auf die neue Größe erweitert.

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 dazu führen, dass Ihre Linux-Verteilung beschädigt wird. Wenn Sie von Windows aus auf Ihre Linux-Dateien zugreifen möchten, ist dies über den Pfad \\wsl$\<distribution-name>\ 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 aus Windows.

Reparieren eines VHD-Montagefehlers

Ein Fehler im Zusammenhang mit dem „Einbinden des Distributionsdatenträgers“ kann auf ein plötzliches Herunterfahren oder einen Stromausfall zurückzuführen sein und dazu führen, dass die VHD für die Linux-Distribution auf schreibgeschützt umgestellt wird, um Datenverluste zu vermeiden. Sie können die Verteilung mithilfe des Befehls e2fsck Linux reparieren und wiederherstellen, indem Sie die folgenden Schritte ausführen.

Verwenden sie den Befehl "lsblk", um den Namen des Blockgeräts zu identifizieren.

Wenn WSL 2 eine Linux-Verteilung installiert, wird die Verteilung als virtuelle Festplatte (Virtual Hard Disk, VHD) mit dem eigenen Dateisystem bereitgestellt. Linux bezeichnet diese Speichergeräte als "Blockgeräte", und Informationen zu diesen können Sie mithilfe des Befehls lsblk abrufen.

Um die Namen der derzeit von WSL 2 verwendeten Blockgeräte zu finden, öffnen Sie Ihre Distribution und geben Sie den Befehl ein: lsblk. (Oder öffnen Sie PowerShell, und geben Sie den Befehl ein: wsl.exe lsblk.) Die Ausgabe sieht ungefähr wie folgt aus:

NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.1M  1 disk
sdb    8:16   0     8G  0 disk [SWAP]
sdc    8:32   0   1.5T  0 disk
sdd    8:48   0     1T  0 disk /mnt/wslg/distro

Folgende Informationen zum Blockgerät werden angezeigt:

  • NAME: Der dem Gerät zugewiesene Name ist sd[a-z], wobei auf den SCSI-Datenträger mit einer Buchstabenbezeichnung für jeden verwendeten Datenträger verwiesen wird. sda ist immer die Systemverteilung.
  • MAJ:MIN: Stellt Zahlen dar, die vom Linux-Kernel verwendet werden, um die Geräte intern mit der ersten Nummer zu identifizieren, die den Gerätetyp darstellt (8 wird für Small Computer System Interface/SCSI-Datenträger verwendet).
  • RM: Lassen Sie uns wissen, ob das Gerät wechselbar ist (1) oder nicht (0).
  • SIZE: Gesamtgröße des Volumes.
  • RO: Gibt an, ob es sich um einen schreibgeschützten Datenträger handelt (1) oder nicht (0).
  • TYPE: Bezieht sich auf den Gerätetyp (datenträger in diesem Fall).
  • MOUNTPOINTS: Bezieht sich auf das aktuelle Verzeichnis im Dateisystem, in dem sich das Blockgerät befindet (SWAP ist für vorkonfigurierten inaktiven Speicher, sodass kein Mountpunkt vorhanden ist).

Fehler: Schreibgeschützt als Fallbacklösung

Wenn in WSL beim Öffnen einer Linux-Distribution ein „Einbindungsfehler“ auftritt, kann die Distribution als Fallbacklösung auf „schreibgeschützt“ festgelegt werden. In diesem Fall zeigt die Verteilung möglicherweise den folgenden Fehler beim Start an:

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

Wenn eine Distribution als „schreibgeschützt“ gestartet wird, tritt bei allen Versuchen, in das Dateisystem zu schreiben, ein Fehler der folgenden Art auf:

$ touch file
touch: cannot touch 'file': Read-only file system

Um einen Datenträger-Einbindungsfehler in WSL zu beheben und ihn wieder in einen nutzbaren und beschreibbaren Zustand zu versetzen, können Sie den Befehl wsl.exe --mount mit den folgenden Schritten verwenden, um den Datenträger erneut bereitzustellen:

  1. Das Herunterfahren aller WSL-Verteilungen durch Öffnen von PowerShell als administrierende Person (in einer Eingabeaufforderung mit erhöhten Rechten) und Eingeben des Befehls:

    wsl.exe --shutdown
    
  2. Geben Sie den Befehl "mount" ein und ersetzen Sie <path-to-ext4.vhdx> durch den Pfad zur .vhdx-Datei der Distribution. Hilfe zum Auffinden dieser Datei finden Sie unter So finden Sie die VHD-Datei und den Datenträgerpfad für Ihre Linux-Verteilung.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Verwenden Sie den Befehl wsl.exe lsblk von PowerShell, um den Namen des Blockgeräts für die Verteilung (sd[a-z]) zu identifizieren, und geben Sie dann den folgenden Befehl ein, um den Datenträger zu reparieren (ersetzen <device> durch den richtigen Blockgerätenamen, z. B. "sdc"). Der e2fsck Befehl überprüft ext4-Dateisysteme (den Typ, der von Verteilungen verwendet wird, die mit WSL installiert sind) auf Fehler und repariert sie entsprechend.

    wsl.exe sudo e2fsck -f /dev/<device>
    

    Anmerkung

    Wenn nur eine Linux-Distribution installiert ist, erhalten Sie möglicherweise die Fehlermeldung „ext file in use“ (externe Datei wird verwendet) und müssen eine zusätzliche Distribution installieren, um wsl.exe lsblk ausführen zu können. Sie können die Distribution deinstallieren, sobald die Reparatur abgeschlossen ist. Darüber hinaus müssen Sie Docker Desktop unter Windows möglicherweise schließen, um den Fehler Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION beim Ausführen des Befehls wsl.exe sudo e2fsck -f /dev/sdczu vermeiden.

  4. Sobald die Reparatur abgeschlossen ist, hängen Sie den Datenträger in PowerShell aus, indem Sie Folgendes eingeben:

    wsl.exe --unmount
    

Warnung

Sie können den Befehl verwenden: sudo mount -o remount,rw /, um eine schreibgeschützte Verteilung in einen verwendbaren/schreibbaren Zustand zurückzugeben, aber alle Änderungen befinden sich im Arbeitsspeicher und gehen daher verloren, wenn die Verteilung neu gestartet wird. Es wird empfohlen, stattdessen die oben aufgeführten Schritte zum Bereitstellen und Reparieren des Datenträgers zu verwenden.

So finden Sie die VHDX-Datei und den Festplattenpfad Ihrer Linux-Distribution.

Um die .vhdx Datei und Verzeichnispfad für eine Linux-Verteilung zu suchen, öffnen Sie PowerShell, und verwenden Sie das folgende Skript, und ersetzen Sie <distribution-name> durch den tatsächlichen Verteilungsnamen:

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

Das Ergebnis zeigt einen Pfad an, der etwa wie %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdxaussieht. Zum Beispiel:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

Dies ist der Pfad zur ext4.vhdx Datei, die der von Ihnen aufgeführten Linux-Verteilung zugeordnet ist.