Udostępnij przez


Jak zarządzać miejscem na dysku WSL

W tym przewodniku opisano sposób zarządzania miejscem na dysku używanym przez dystrybucje systemu Linux zainstalowane przy użyciu programu WSL 2, w tym:

Podsystem Windows dla systemu Linux (WSL 2) używa platformy wirtualizacji do instalowania dystrybucji systemu Linux wraz z hostem systemu operacyjnego Windows, tworząc wirtualny dysk twardy (VHD) do przechowywania plików dla każdej instalowanej dystrybucji systemu Linux. Te dyski VHD używają typu systemu plików ext4 i są reprezentowane na dysku twardym systemu Windows jako plik ext4.vhdx.

Program WSL 2 automatycznie zmienia rozmiar tych plików VHD zgodnie z potrzebami przechowywania. Domyślnie każdy plik VHD używany przez WSL 2 jest początkowo przydzielany maksymalną ilość miejsca na dysku o pojemności 1 TB (przed wersji WSL 0.58.0 ta wartość domyślna została ustawiona na maksymalną 512 GB i maksymalną 256 GB przed tym).

Jeśli miejsce do magazynowania wymagane przez pliki systemu Linux przekracza ten maksymalny rozmiar, zostaną wyświetlone błędy informujące, że zabrakło miejsca na dysku. Aby rozwiązać ten błąd, postępuj zgodnie z poniższymi wskazówkami dotyczącymi Jak rozszerzyć rozmiar wirtualnego dysku twardego WSL 2.

Jak sprawdzić dostępne miejsce na dysku

Sprawdź ilość miejsca na dysku dostępnego w dysku VHD dla dystrybucji systemu Linux zainstalowanej z programem WSL 2 przy użyciu polecenia Df systemu Linux.

Aby sprawdzić dostępne miejsce na dysku, otwórz wiersz polecenia programu PowerShell i wprowadź to polecenie (zastępując <distribution-name> rzeczywistą nazwą dystrybucji):

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

Jeśli to polecenie nie działa, przeprowadź uaktualnienie do wersji Store programu WSL przy użyciu polecenia wsl --update lub spróbuj wykonać wsl df -h /.

Dane wyjściowe będą obejmować:

  • system plików: identyfikator systemu plików VHD
  • rozmiar: całkowity rozmiar dysku (maksymalna ilość miejsca przydzielonego do dysku VHD)
  • Używane: ilość miejsca aktualnie używanego w wirtualnym dysku VHD
  • Dostępność: ilość wolnego miejsca na dysku VHD (przydzielony rozmiar minus wykorzystana ilość)
  • Użyj%: procent pozostałego miejsca na dysku (używany/ przydzielony rozmiar)
  • zamontowane na: ścieżka katalogu, w której jest zamontowany dysk

Jeśli widzisz, że zbliżasz się do dostępnej ilości miejsca na dysku przydzielonego do dysku VHD lub wystąpił błąd z powodu braku miejsca na dysku, zobacz następną sekcję, aby uzyskać instrukcje dotyczące rozszerzania maksymalnej ilości miejsca na dysku przydzielonego do dysku VHD skojarzonego z dystrybucją systemu Linux. Ilość miejsca na dysku przydzielonego do dysku VHD przez WSL zawsze będzie pokazywać domyślną maksymalną ilość (1 TB w najnowszej wersji WSL), nawet jeśli ilość miejsca na dysku na rzeczywistym urządzeniu z systemem Windows jest mniejsza. WSL instaluje dysk VHD, który będzie rozszerzać rozmiar podczas jego używania, więc dystrybucja systemu Linux widzi, że może rosnąć do przydzielonego maksymalnego rozmiaru 1 TB.

Jak rozszerzyć rozmiar wirtualnego dysku twardego WSL 2

Aby rozszerzyć rozmiar dysku VHD dla dystrybucji systemu Linux poza domyślną maksymalną 1 TB przydzielonej ilości miejsca na dysku, możesz użyć polecenia wsl --manage lub wykonać poniższe kroki ręczne. (Maksymalna wartość domyślna wcześniejszych wersji WSL może być ustawiona na 512 GB lub 256 GB).

Rozszerzanie rozmiaru dysku VHD przy użyciu wsl --manage

Polecenie wsl --manage jest dostępne tylko dla wersji WSL 2.5 i nowszych.

Aby zmienić rozmiar przydzielonego miejsca na dysku wirtualnym:

  1. Zakończ wszystkie instancje WSL przy użyciu polecenia wsl.exe --shutdown

  2. Uruchom wsl --manage <distribution name> --resize <memory string>. Obsługiwane ciągi pamięci mają postać <Memory Value>B/M/MB/G/GB/T/TB. Wartości dziesiętne są obecnie nieobsługiwane (np. 2.5TB).

Dane wyjściowe powinny wyglądać podobnie do następujących:

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.

Dysk wirtualny (ext4.vhdx) dla tej dystrybucji systemu Linux został pomyślnie rozszerzony do nowego rozmiaru.

Rozszerzanie ręczne

Aby rozszerzyć rozmiar dysku VHD dla dystrybucji systemu Linux, wykonaj ręczne kroki:

  1. Zakończ wszystkie wystąpienia programu WSL przy użyciu polecenia: wsl.exe --shutdown

  2. Skopiuj ścieżkę katalogu do pliku ext4.vhdx skojarzonego z dystrybucją systemu Linux zainstalowaną na maszynie. Aby uzyskać pomoc, zobacz Jak zlokalizować plik vhdx i ścieżkę dysku dla dystrybucji systemu Linux.

  3. Otwórz wiersz polecenia systemu Windows z uprawnieniami administratora, a następnie otwórz interpreter poleceń diskpart, wprowadzając następujące polecenie:

    diskpart
    
  4. Teraz zobaczysz monit DISKPART>. Wprowadź następujące polecenie, zastępując <pathToVHD> ścieżką katalogu do pliku ext4.vhdx skojarzonego z dystrybucją systemu Linux (skopiowaną w kroku 2).

    Select vdisk file="<pathToVHD>"
    
  5. Wyświetl szczegóły związane z tym dyskiem wirtualnym, w tym Rozmiar wirtualny, który oznacza obecny maksymalny rozmiar przydzielony dla dysku VHD.

    detail vdisk
    
  6. Należy przekonwertować Rozmiar wirtualny na megabajty. Na przykład jeśli Rozmiar wirtualny: 512 GB, jest to równe 512000 MB. Wprowadzona nowa wartość musi być większa niż ta oryginalna wartość. Aby podwoić rozmiar wirtualny 512 GB do 1024 GB, należy wprowadzić wartość w MB jako: 1024000. Należy zachować ostrożność, aby nie wprowadzać wartości wyższej niż w rzeczywistości, ponieważ proces zmniejszenia rozmiaru dysku wirtualnego jest znacznie bardziej skomplikowany.

  7. Wprowadź wartość nowego maksymalnego rozmiaru, który chcesz przydzielić do tej dystrybucji systemu Linux, używając wiersza polecenia systemu Windows DISKPART>:

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Zamknij monit DISKPART>:

    exit
    
  9. Uruchom tę dystrybucję systemu Linux. (Upewnij się, że jest uruchomiona w programie WSL 2. Możesz to potwierdzić za pomocą polecenia : wsl.exe -l -v. Program WSL 1 nie jest obsługiwany).

  10. Upewnij się, że program WSL może rozszerzyć rozmiar systemu plików dla tej dystrybucji, uruchamiając te polecenia z poziomu wiersza polecenia dystrybucji WSL. Ten komunikat może zostać wyświetlony w odpowiedzi na pierwsze polecenie montowania: "/dev: żaden już zamontowany na /dev". Ten komunikat można bezpiecznie zignorować.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Skopiuj nazwę tego wpisu, który będzie wyglądać następująco: /dev/sdX (z znakiem X reprezentującym dowolny inny znak). W poniższym przykładzie wartość X jest b:

    sudo resize2fs /dev/sdb <sizeInMegabytes>M
    

    Korzystając z przykładu z powyższego, zmieniliśmy rozmiar wirtualnego dysku twardego na 2048000, więc polecenie to: sudo resize2fs /dev/sdb 2048000M.

    Notatka

    Może być konieczne zainstalowanie resize2fs. Jeśli tak, możesz użyć tego polecenia, aby go zainstalować: sudo apt install resize2fs.

    Dane wyjściowe będą wyglądać podobnie do następujących:

    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.
    

Dysk wirtualny (ext4.vhdx) dla tej dystrybucji systemu Linux został pomyślnie rozszerzony do nowego rozmiaru.

Ważny

Zalecamy, aby nie modyfikować, przenosić ani uzyskiwać dostępu do plików pokrewnych WSL znajdujących się w folderze AppData przy użyciu narzędzi lub edytorów systemu Windows. Może to spowodować uszkodzenie dystrybucji systemu Linux. Jeśli chcesz uzyskać dostęp do plików systemu Linux z systemu Windows, jest to możliwe za pośrednictwem ścieżki \\wsl$\<distribution-name>\. Otwórz dystrybucję WSL i wprowadź explorer.exe ., aby wyświetlić ten folder. Aby dowiedzieć się więcej, zobacz wpis w blogu: Uzyskiwanie dostępu do plików systemu Linux z systemu Windows.

Jak naprawić błąd montowania wirtualnego dysku twardego

Jeśli wystąpi błąd związany z "montowaniem dysku dystrybucji", może to być spowodowane nagłym zamknięciem systemu lub awarią zasilania i może skutkować przełączeniem wirtualnego dysku twardego dystrybucji systemu Linux na tryb tylko do odczytu, aby uniknąć utraty danych. Dystrybucję można naprawić i przywrócić przy użyciu polecenia e2fsck Linux, wykonując poniższe kroki.

Użyj polecenia lsblk, aby zidentyfikować nazwę urządzenia blokowego

Gdy program WSL 2 instaluje dystrybucję systemu Linux, instaluje dystrybucję jako wirtualny dysk twardy (VHD) przy użyciu własnego systemu plików. System Linux odnosi się do tych dysków twardych jako "zablokowanych urządzeń" i można wyświetlić informacje o nich za pomocą polecenia lsblk.

Aby znaleźć nazwy urządzeń blokowych aktualnie używanych przez program WSL 2, otwórz dystrybucję i wprowadź polecenie: lsblk. (Lub otwórz program PowerShell i wprowadź polecenie: wsl.exe lsblk.) Dane wyjściowe będą wyglądać mniej więcej tak:

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

Informacje o urządzeniu blokowym obejmują:

  • NAME: nazwa przypisana do urządzenia będzie sd[a-z], odwołując się do dysku SCSI z oznaczeniem litery dla każdego używanego dysku. sda jest zawsze dystrybucją systemu.
  • MAJ:MIN: reprezentuje liczby używane przez jądro systemu Linux do wewnętrznego identyfikowania urządzeń z pierwszą liczbą reprezentującą typ urządzenia (8 jest używany dla małych dysków interfejsu systemu komputerowego/dysków SCSI).
  • RM: Daj nam znać, czy urządzenie jest wymienne (1) czy nie (0).
  • ROZMIAR: całkowity rozmiar woluminu.
  • RO: Daj nam znać, czy urządzenie jest tylko do odczytu (1), czy nie (0).
  • TYPE: odnosi się do typu urządzenia (w tym przypadku dysku).
  • PUNKTY MONTAŻU: Odwołuje się do bieżącego katalogu w systemie plików, w którym znajduje się urządzenie blokowe (SWAP dotyczy wstępnie skonfigurowanej nieaktywnej pamięci, więc nie ma punktu montażu).

Błąd przełączenia na tryb tylko do odczytu

Jeśli podczas otwierania dystrybucji systemu Linux wystąpi błąd "montowania", dystrybucja może być ustawiona jako tylko do odczytu jako rozwiązanie zapasowe. W takim przypadku dystrybucja może wyświetlać następujący błąd podczas uruchamiania:

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

Gdy dystrybucja jest uruchamiana jako tylko do odczytu, wszelkie próby zapisu w systemie plików kończą się niepowodzeniem z powodu błędu w następujący sposób:

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

Aby naprawić błąd instalacji dysku w programie WSL i przywrócić go z powrotem do stanu do użytku/zapisu, możesz użyć polecenia wsl.exe --mount, aby ponownie zainstalować dysk, wykonując następujące kroki:

  1. Zamknij wszystkie dystrybucje WSL, otwierając program PowerShell jako administrator (w wierszu polecenia z podwyższonym poziomem uprawnień) i wprowadzając polecenie:

    wsl.exe --shutdown
    
  2. Wprowadź polecenie mount i zastąp <path-to-ext4.vhdx> ścieżką do pliku .vhdx dystrybucji. Aby uzyskać pomoc dotyczącą lokalizowania tego pliku, zobacz Jak zlokalizować plik VHD i ścieżkę dysku dla swojej dystrybucji Linuksa.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Użyj polecenia wsl.exe lsblk z programu PowerShell, aby zidentyfikować nazwę urządzenia blokowego dla dystrybucji (sd[a-z]), a następnie wprowadź następujące polecenie, aby naprawić dysk (zastępując <device> poprawną nazwą urządzenia blokowego, na przykład "sdc"). Polecenie e2fsck sprawdza systemy plików ext4 (typ używany przez dystrybucje zainstalowane z usługą WSL) pod kątem błędów i odpowiednio je naprawia.

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

    Notatka

    Jeśli masz zainstalowaną tylko jedną dystrybucję systemu Linux, może wystąpić błąd "ext file in use" (Plik ext in use) i będzie musiał zainstalować dodatkową dystrybucję, aby uruchomić wsl.exe lsblk. Po zakończeniu naprawy można odinstalować dystrybucję. Ponadto może być konieczne zamknięcie programu Docker Desktop w systemie Windows, aby uniknąć błędu Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION podczas uruchamiania polecenia wsl.exe sudo e2fsck -f /dev/sdc.

  4. Po zakończeniu naprawy odinstaluj dysk w programie PowerShell, wprowadzając następujące polecenie:

    wsl.exe --unmount
    

Ostrzeżenie

Możesz użyć polecenia: sudo mount -o remount,rw /, aby zwrócić dystrybucję tylko do odczytu do stanu użytecznego/zapisywalnego, ale wszystkie zmiany zostaną utracone po ponownym uruchomieniu dystrybucji. Zalecamy użycie opisanych powyżej kroków w celu zainstalowania i naprawy dysku.

Jak zlokalizować plik vhdx i ścieżkę dysku dla dystrybucji systemu Linux

Aby zlokalizować plik .vhdx i ścieżkę katalogu dla dystrybucji systemu Linux, otwórz PowerShell i użyj następującego skryptu, zastępując <distribution-name> rzeczywistą nazwą dystrybucji:

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

Wynik wyświetli ścieżkę podobną do %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Na przykład:

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

Jest to ścieżka do pliku ext4.vhdx skojarzonego z wymienioną dystrybucją systemu Linux.