Verwalten des WSL-Speicherplatzes

In diesem Leitfaden wird erläutert, wie Sie den von Linux-Distributionen, die mit dem Windows-Subsystem für Linux Version 2 (WSL 2) installiert sind, belegten Speicherplatz verwalten. Folgende Themen werden behandelt:

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

WSL 2 ändert die Größe dieser VHD-Dateien automatisch 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 mit dem Hinweis angezeigt, dass kein Speicherplatz mehr verfügbar ist. Um diesen Fehler zu beheben, befolgen Sie die Anweisungen im Abschnitt Erweitern der Größe Ihrer virtuellen WSL 2-Festplatte unten.

Überprüfen des verfügbaren Speicherplatzes

Überprüfen Sie den verfügbaren Speicherplatz in der VHD für eine mit WSL 2 installierte Linux-Distribution mithilfe des Linux-Befehls Df.

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 Namen der Distribution):

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

Wenn dieser Befehl bei Ihnen nicht funktioniert, aktualisieren Sie mithilfe des Befehls wsl --update auf die Store-Version von WSL, oder versuchen Sie es mit wsl df -h /.

Die Ausgabe enthält folgende Informationen:

  • Dateisystem: Bezeichner (ID) für das VHD-Dateisystem
  • Größe: Gesamtgröße des Datenträgers (maximale Menge an Speicherplatz, die der VHD zugeordnet ist)
  • Belegt: Menge an Speicherplatz, die derzeit in der VHD belegt ist
  • Verfüg.: In der VHD noch vorhandener Speicherplatz (zugeordnete Größe abzüglich des belegten Speicherplatzes)
  • Verwendet (%): Prozentsatz des verbleibenden Speicherplatzes (belegte/zugeordnete Größe)
  • Eingebunden auf: Verzeichnispfad, in dem der Datenträger eingebunden ist

Wenn Sie feststellen, dass Sie sich dem Limit für den verfügbaren Speicherplatz nähern, der Ihrer VHD zugeordnet ist, oder bereits eine Fehlermeldung erhalten haben, weil kein Speicherplatz mehr verfügbar ist, gehen Sie wie im nächsten Abschnitt beschrieben vor, um den maximalen Speicherplatz zu erweitern, der der VHD für Ihre Linux-Distribution zugeordnet ist. Für den Speicherplatz, der Ihrer VHD von WSL zugeordnet wird, wird immer die maximale Standardmenge (1 TB in der aktuellen WSL-Version) angezeigt, auch wenn der Speicherplatz auf Ihrem tatsächlichen Windows-Gerät geringer ist. WSL bindet eine VHD ein, die im Laufe der Verwendung erweitert wird, sodass Ihre Linux-Distribution erkennt, dass eine Erweiterung auf die zugeordnete maximale Größe von 1 TB möglich ist. 

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

Führen Sie die folgenden Schritte aus, um die VHD-Größe für eine Linux-Distribution über die maximale Standardgröße von 1 TB des zugeordneten Speicherplatzes hinaus zu erweitern. (Für frühere WSL-Releases, die noch nicht aktualisiert wurden, kann dieser maximale Standardwert auf 512 GB oder 256 GB festgelegt sein.)

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

  2. Kopieren Sie den Verzeichnispfad der Datei ext4.vhdx, die der auf Ihrem Computer installierten Linux-Distribution zugeordnet ist. Hilfe finden Sie unter Ermitteln des VHDX-Dateipfads und Datenträgerpfads für Ihre Linux-Distribution.

  3. Öffnen Sie die Windows-Eingabeaufforderung mit Administratorrechten und dann den Diskpart-Befehlsinterpreter, 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 der Datei ext4.vhdx, die der Linux-Distribution 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 umrechnen. Wenn zum Beispiel Virtuelle Größe: 512 GB ist, ist dies das gleiche wie 512000 MB. Der neue Wert, den Sie eingeben, muss größer sein als dieser ursprüngliche Wert. Um beispielsweise die virtuelle Größe von 512 GB auf 1024 GB zu verdoppeln, würden Sie in MB umrechnen und den Wert 1024000 angeben. Das Reduzieren der Größe eines virtuellen Datenträgers ist deutlich komplizierter. Achten Sie daher darauf, keinen höheren Wert einzugeben, als Sie eigentlich benötigen.

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

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

    exit
    
  9. Starten Sie diese Linux-Distribution. (Stellen Sie sicher, dass sie in WSL 2 ausgeführt wird. Sie können dies mit dem Befehl wsl.exe -l -v überprüfen. WSL 1 wird nicht unterstützt.)

  10. Weisen Sie WSL darauf hin, dass die Größe des Dateisystems für diese Distribution durch Ausführen dieser Befehle über die Befehlszeile Ihrer WSL-Distribution erweitert werden kann. Möglicherweise sehen Sie diese Meldung als Antwort auf den ersten mount-Befehl: „/dev: none already mounted on /dev“. Diese Meldung kann getrost ignoriert werden.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. 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 Xb:

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

Im obigen Beispiel haben wir die VHD-Größe in 2048000 geändert. Daher lautet der Befehl sudo resize2fs /dev/sdb 2048000M.

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.

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

Wichtig

Es wird empfohlen, die WSL-bezogenen Dateien, die sich in Ihrem Ordner AppData 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$\<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 von Windows aus.

Beheben eines Fehlers bei der VHD-Einbindung

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 Distribution mithilfe des Linux-Befehls e2fsck reparieren und wiederherstellen, indem Sie die folgenden Schritte ausführen.

Verwenden des Befehls „lsblk“, um den Namen des Blockgeräts zu ermitteln

Wenn WSL 2 eine Linux-Distribution installiert, wird die Distribution als virtuelle Festplatte (VHD) mit ihrem eigenen Dateisystem eingebunden. Linux bezeichnet diese Festplatten als „Blockgeräte“, und Sie können Informationen zu diesen Festplatten mit dem Befehl lsblk anzeigen.

Um die Namen der Blockgeräte zu ermitteln, die derzeit von WSL 2 verwendet werden, öffnen Sie Ihre Distribution, und geben Sie den folgenden Befehl ein: lsblk. (Öffnen Sie alternativ PowerShell, und geben Sie den Befehl wsl.exe lsblk ein.) Die Ausgabe sieht etwa 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 lautet „sd[a-z]“ und bezieht sich auf den SCSI-Datenträger mit einer Buchstabenangabe für jeden verwendeten Datenträger. sda ist immer die Systemdistribution.
  • MAJ:MIN: Stellt Zahlen dar, die vom Linux-Kernel verwendet werden, um die Geräte intern zu identifizieren, wobei die erste Zahl den Gerätetyp darstellt (8 wird für Small Computer System Interface/SCSI-Datenträger verwendet).
  • RM: Gibt an, ob es sich um einen Wechseldatenträger handelt (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 (in diesem Fall „Datenträger“).
  • MOUNTPOINTS: Verweist auf das aktuelle Verzeichnis in dem Dateisystem, in dem sich das Blockgerät befindet (SWAP dient für vorkonfigurierten inaktiven Arbeitsspeicher, d. h. kein Bereitstellungspunkt).

Fehler: Schreibschutz 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 Distribution beim Starten möglicherweise den folgenden Fehler 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 Fehler beim Einbinden eines Datenträgers in WSL zu beheben und wieder einen verwendbaren/beschreibbaren Zustand des Datenträgers herzustellen, können Sie den Befehl wsl.exe --mount verwenden, um den Datenträger mit den folgenden Schritten erneut einzubinden:

  1. Fahren Sie alle WSL-Distributionen herunter, indem Sie PowerShell öffnen und den folgenden Befehl eingeben:

    wsl.exe --shutdown
    
  2. Öffnen Sie PowerShell als Administrator*in (in einer Eingabeaufforderung mit erhöhten Rechten), geben Sie den mount-Befehl ein, und ersetzen Sie <path-to-ext4.vhdx> durch den Pfad zur VHDX-Datei der Distribution. Hilfe zum Ermitteln dieser Datei finden Sie unter Ermitteln des VHD-Dateipfads und Datenträgerpfads für Ihre Linux-Distribution.

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

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

Hinweis

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.

  1. Wenn die Reparatur abgeschlossen ist, heben Sie die Bereitstellung des Datenträgers in PowerShell auf, indem Sie Folgendes eingeben:

    wsl.exe --unmount
    

Warnung

Sie können den Befehl sudo mount -o remount,rw / verwenden, um eine schreibgeschützte Distribution auf einen verwendbaren/beschreibbaren Zustand zurückzusetzen. Da sich aber alle Änderungen im Arbeitsspeicher befinden, gehen diese verloren, wenn die Distribution gestartet wird. Es wird empfohlen, stattdessen die oben aufgeführten Schritte auszuführen, um den Datenträger einzubinden und zu reparieren.

Ermitteln des VHDX-Dateipfads und Datenträgerpfads für Ihre Linux-Distribution

Um die VHDX-Datei und den Verzeichnispfad für eine Linux-Distribution zu ermitteln, öffnen Sie PowerShell, und verwenden Sie das folgende Skript, wobei Sie <distribution-name> durch den tatsächlichen Namen der Distribution ersetzen:

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

Im Ergebnis wird ein Pfad angezeigt, der in etwa wie folgt aussieht: %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Beispiel:

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

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