Sdílet prostřednictvím


Správa místa na disku WSL

Tato příručka popisuje, jak spravovat místo na disku, které používají distribuce Linuxu nainstalované pomocí WSL 2, včetně:

Subsystém Windows pro Linux (WSL 2) používá virtualizační platformu k instalaci distribucí Linuxu spolu s hostitelským operačním systémem Windows a vytvořením virtuálního pevného disku (VHD) pro ukládání souborů pro každou z nainstalovaných distribucí Linuxu. Tyto virtuální pevné disky používají typ systému souborů ext4 a jsou reprezentovány na pevném disku Windows jako soubor ext4.vhdx.

WSL 2 automaticky změní velikost těchto souborů VHD tak, aby vyhovovaly potřebám úložiště. Ve výchozím nastavení je každému souboru VHD používanému WSL 2 původně přidělena maximální velikost diskového prostoru 1 TB (před vydáním WSL verze 0.58.0 bylo toto výchozí nastavení stanoveno na maximálně 512 GB, a předtím na 256 GB).

Pokud prostor úložiště vyžadovaný soubory s Linuxem překročí tuto maximální velikost, zobrazí se chyby s oznámením, že vám dochází místo na disku. Pokud chcete tuto chybu opravit, postupujte podle pokynů níže v Jak rozšířit velikost virtuálního pevného disku WSL 2.

Postup kontroly dostupného místa na disku

Pomocí příkazu Linux Df zkontrolujte množství místa na disku, které je k dispozici ve virtuálním pevném disku pro linuxovou distribuci nainstalované s WSL 2.

Pokud chcete zkontrolovat dostupné místo na disku, otevřete příkazový řádek PowerShellu a zadejte tento příkaz (nahraďte <distribution-name> skutečným názvem distribuce):

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

Pokud tento příkaz nefunguje, upgradujte prosím na verzi WSL ze Storu pomocí příkazu wsl --update nebo zkuste wsl df -h /.

Výstup bude zahrnovat:

  • Systém souborů: Identifikátor pro systém souborů VHD
  • Velikost: Celková velikost disku (maximální velikost místa přiděleného virtuálnímu pevnému disku)
  • Použitá: Množství místa, které se aktuálně používá ve virtuálním pevném disku
  • Dostupnost: Množství volného místa na virtuálním pevném disku (přidělená velikost minus využitá velikost)
  • Použít%: Procento zbývajícího místa na disku (Využito / Přidělená velikost)
  • Připojeno k: Cesta k adresáři, kde je disk připojen

Pokud zjistíte, že se blížíte dosažení dostupného místa na disku přiděleného vašemu virtuálnímu pevnému disku nebo se vám už zobrazila chyba kvůli tomu, že nezůstalo žádné místo na disku, přečtěte si další část s postupem, jak rozšířit maximální množství místa na disku přidělenému virtuálnímu pevnému disku přidruženému k vaší distribuci Linuxu. Velikost místa na disku přiděleného virtuálnímu pevnému disku službou WSL bude vždy zobrazovat výchozí maximální velikost (1 TB v nejnovější verzi WSL), i když je velikost místa na disku na vašem skutečném zařízení s Windows menší. WSL připojí virtuální pevný disk, který se při jeho použití rozšíří, takže distribuce Linuxu zjistí, že se může zvětšit na přidělenou maximální velikost 1 TB.

Jak rozšířit velikost virtuálního pevného disku WSL 2

Pokud chcete rozšířit velikost virtuálního pevného disku pro linuxovou distribuci nad výchozí maximální velikost přiděleného místa na disku o velikosti 1 TB, můžete použít příkaz wsl --manage nebo postupovat podle následujícího ručního postupu. (Starší verze WSL mohou být nastaveny na maximální výchozí hodnotu 512 GB nebo 256 GB).

Rozšíření velikosti virtuálního pevného disku pomocí wsl --manage

Příkaz wsl --manage je k dispozici pouze pro verze WSL verze 2.5 a vyšší.

Změna velikosti přiděleného místa na virtuálním disku:

  1. Ukončete všechny instance WSL pomocí příkazu wsl.exe --shutdown

  2. Spusťte wsl --manage <distribution name> --resize <memory string>. Podporované řetězce paměti jsou ve formátu <Memory Value>B/M/MB/G/GB/T/TB. Desetinné hodnoty jsou momentálně nepodporované (např. 2.5TB).

Výstup by měl vypadat nějak takto:

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.

Virtuální jednotka (ext4.vhdx) pro tuto linuxovou distribuci byla nyní úspěšně rozšířena na novou velikost.

Ruční rozšíření

Pokud chcete rozšířit velikost virtuálního pevného disku pro distribuci Linuxu pomocí ručních kroků:

  1. Ukončete všechny instance WSL pomocí příkazu: wsl.exe --shutdown

  2. Zkopírujte cestu k adresáři do souboru ext4.vhdx přidruženého k distribuci Linuxu nainstalované na vašem počítači. Nápovědu najdete v tématu Jak najít soubor vhdx a cestu k disku pro vaši linuxové distribuci.

  3. Otevřete příkazový řádek Windows s oprávněními správce a potom otevřete interpret příkazu diskpart zadáním:

    diskpart
    
  4. Teď budete mít DISKPART> výzvu. Zadejte následující příkaz a nahraďte <pathToVHD> cestou k adresáři k souboru ext4.vhdx přidruženému k distribuci Linuxu (zkopírováno v kroku 2).

    Select vdisk file="<pathToVHD>"
    
  5. Zobrazit podrobnosti přidružené k tomuto virtuálnímu disku, včetně virtuální velikosti, která představuje aktuální maximální velikost, na kterou je VHD přidělen.

    detail vdisk
    
  6. Budete muset převést virtuální velikost na megabajty. Například pokud je Virtuální velikost: 512 GB, pak se rovná 512000 MB. Zadaná nová hodnota musí být větší než tato původní hodnota. Pokud chcete zdvojnásobit virtuální velikost 512 GB na 1024 GB, zadejte hodnotu v MB jako: 1024000. Dávejte pozor, abyste nezadáli hodnotu vyšší, než chcete, protože proces zmenšení velikosti virtuálního disku je mnohem složitější.

  7. Zadejte hodnotu nové maximální velikosti, kterou chcete přidělit této linuxové distribuci, pomocí příkazového řádku Windows DISKPART>:

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Ukončete příkazový řádek DISKPART>:

    exit
    
  9. Spusťte tuto linuxové distribuci. (ujistěte se, že je spuštěný ve WSL 2. To můžete potvrdit pomocí příkazu: wsl.exe -l -v. WSL 1 není podporováno).

  10. Mějte na paměti, že WSL může rozšířit velikost systému souborů pro tuto distribuci spuštěním těchto příkazů z příkazového řádku distribuce WSL. Tato zpráva se může zobrazit v reakci na první příkaz mount: „/dev: none již připojeno na /dev.“ Tuto zprávu můžete bezpečně ignorovat.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Zkopírujte název této položky, která bude vypadat takto: /dev/sdX (se znakem X představujícím jakýkoli jiný znak). V následujícím příkladu je hodnota Xb:

    sudo resize2fs /dev/sdb <sizeInMegabytes>M
    

    Pomocí výše uvedeného příkladu jsme změnili velikost virtuálního pevného disku na 2048000, takže příkaz by byl: sudo resize2fs /dev/sdb 2048000M.

    Poznámka

    Možná budete muset nainstalovat resize2fs. Pokud ano, můžete ho nainstalovat pomocí tohoto příkazu: sudo apt install resize2fs.

    Výstup bude vypadat nějak takto:

    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.
    

Virtuální jednotka (ext4.vhdx) pro tuto linuxovou distribuci byla nyní úspěšně rozšířena na novou velikost.

Důležitý

Doporučujeme neupravovat, přesouvat ani přistupovat k souborům souvisejícím s WSL umístěným ve složce AppData pomocí nástrojů nebo editorů Windows. To by mohlo způsobit poškození distribuce Linuxu. Pokud chcete získat přístup k souborům Linuxu z Windows, je to možné prostřednictvím cesty \\wsl$\<distribution-name>\. Otevřete distribuci WSL a zadejte explorer.exe . pro zobrazení této složky. Další informace najdete v blogovém příspěvku: Přístup k souborům Linuxu z Windows.

Oprava chyby připojení virtuálního pevného disku

Pokud dojde k chybě související s připojením distribučního disku, může to být způsobené náhlým vypnutím nebo výpadkem napájení a může dojít k přepnutí virtuálního pevného disku VHD s Linuxem na jen pro čtení, aby nedošlo ke ztrátě dat. Distribuci můžete opravit a obnovit pomocí příkazu e2fsck Linux pomocí následujícího postupu.

Pomocí příkazu lsblk identifikujte název blokového zařízení.

Když WSL 2 nainstaluje linuxovou distribuci, připojí distribuci jako virtuální pevný disk (VHD) s vlastním systémem souborů. Linux tyto pevné disky označuje jako bloková zařízení a informace o nich můžete zobrazit pomocí příkazu lsblk.

Pokud chcete najít názvy blokových zařízení, která aktuálně používá WSL 2, otevřete distribuci a zadejte příkaz: lsblk. (Nebo otevřete PowerShell a zadejte příkaz: wsl.exe lsblk.) Výstup bude vypadat přibližně takto:

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

Informace o blokovém zařízení zahrnují:

  • NÁZEV: Název přiřazený zařízení bude sd[a-z], odkazující na disk SCSI s označením písmena pro každý použitý disk. sda je vždy distribuce systému.
  • MAJ:MIN: Představuje čísla používaná jádrem Linuxu k interní identifikaci zařízení, přičemž první číslo představuje typ zařízení (8 se používá pro disky SCSI, tj. Malého počítačového systému).
  • RM: Dejte nám vědět, jestli je zařízení vyměnitelné (1) nebo ne (0).
  • VELIKOST: Celková velikost objemu.
  • RO: Dejte nám vědět, jestli je zařízení jen pro čtení (1) nebo ne (0).
  • TYP: Odkazuje na typ zařízení (v tomto případě disk).
  • MOUNTPOINTS: Odkazuje na aktuální adresář v systému souborů, kde se nachází blokové zařízení (SWAP je určen pro předkonfigurovanou neaktivní paměť, takže žádný přípojný bod).

Chyba při záložním řežimu pouze pro čtení

Pokud WSL při otevírání linuxové distribuce narazí na "chybu při připojování", distribuce může být nastavena jako pouze pro čtení jako záložní řešení. V takovém případě se při spuštění může v distribuci zobrazit následující chyba:

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

Když se distribuce spustí jako jen pro čtení, všechny pokusy o zápis do systému souborů selžou s chybou, jako je tato:

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

Pokud chcete opravit chybu připojení disku ve WSL a znovu ho obnovit do použitelného nebo zapisovatelného stavu, můžete disk znovu připojit pomocí příkazu wsl.exe --mount pomocí následujícího postupu:

  1. Vypněte všechny distribuce WSL tak, že otevřete PowerShell jako správce (na příkazovém řádku se zvýšenými oprávněními) a zadáte příkaz:

    wsl.exe --shutdown
    
  2. Zadejte příkaz mount a nahraďte <path-to-ext4.vhdx> cestou k souboru .vhdx distribuce. Nápovědu k vyhledání tohoto souboru naleznete v tématu Jak najít soubor VHD a cestu k disku pro vaši linuxové distribuci.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Pomocí příkazu wsl.exe lsblk z PowerShellu identifikujte název blokového zařízení pro distribuci (sd[a-z]) a zadáním následujícího příkazu opravte disk (nahraďte <device> správným názvem blokového zařízení, například "sdc"). Příkaz e2fsck zkontroluje chyby v systémech souborů ext4 (typ používaný distribucemi nainstalovanými ve WSL) a opraví je odpovídajícím způsobem.

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

    Poznámka

    Pokud máte nainstalovanou jenom jednu linuxovou distribuci, může dojít k chybě ext file in use a budete muset nainstalovat další distribuci, aby bylo možné spustit wsl.exe lsblk. Po dokončení opravy můžete odinstalovat distribuci. Kromě toho může být nutné zavřít Docker Desktop ve Windows, abyste se vyhnuli chybě Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION při spuštění příkazu wsl.exe sudo e2fsck -f /dev/sdc.

  4. Po dokončení opravy odpojte disk v PowerShellu zadáním následujícího příkazu:

    wsl.exe --unmount
    

Varování

Můžete použít příkaz: sudo mount -o remount,rw / k vrácení distribuce jen pro čtení do použitelného nebo zapisovatelného stavu, ale všechny změny budou v paměti a při restartování distribuce budou ztraceny. Doporučujeme místo toho disk připojit a opravit pomocí výše uvedených kroků.

Jak najít soubor .vhdx a cestu k disku pro vaši distribuci Linuxu

Pokud chcete vyhledat cestu k souboru a adresáři .vhd x pro distribuci Linuxu, otevřete PowerShell a použijte následující skript a nahraďte <distribution-name> skutečným názvem distribuce:

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

Výsledek zobrazí cestu, která vypadá přibližně jako %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Například:

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

Toto je cesta k souboru ext4.vhdx přidruženému k distribuci Linuxu, kterou jste uvedli.