Увеличение размера виртуального жесткого диска WSL 2

Для хранения файлов Linux в WSL 2 используется виртуальный жесткий диск (VHD). В WSL 2 виртуальный жесткий диск существует в виде VHDX-файла на жестком диске Windows.

Виртуальный жесткий диск WSL 2 использует файловую систему ext4. Этот виртуальный жесткий диск имеет начальный максимальный размер 256 ГБ, и он автоматически изменяется по мере необходимости. Если объем хранилища, необходимый для файлов Linux, превышает этот размер, вам следует увеличить его. Если размер дистрибутива превысил 256 ГБ, вы увидите сообщение о том, что закончилось место на диске. Эту ошибку можно устранить, увеличив размер виртуального жесткого диска.

Чтобы увеличить максимальный размер виртуального жесткого диска свыше 256 ГБ:

  1. Завершите работы всех экземпляров WSL с помощью команды wsl --shutdown.

  2. Вот как можно найти имя пакета установки дистрибутива (PackageFamilyName):

    • С помощью PowerShell (где "distro" — имя дистрибутива) введите команду:
    • Get-AppxPackage -Name "*<distro>*" | Select PackageFamilyName
    • Например: Get-AppxPackage -Name "*Ubuntu*" | Select PackageFamilyName

    Get-AppxPackage command line screenshot

  3. Используя итоговое значение PackageFamilyName, выберите VHD-файл fullpath, используемый в WSL 2. Это будет pathToVHD. Вот как можно найти полный путь:

    • В меню "Пуск" введите %LOCALAPPDATA% и откройте папку %LOCALAPPDATA%.
    • Затем откройте папку Packages и выполните поиск по значению PackageFamilyName своего дистрибутива. Откройте эту папку (например, CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxxx).
    • В папке PackageFamilyName откройте папку LocalState и найдите файл <disk>.vhdx.
    • Скопируйте путь к этому файлу. Он должен выглядеть примерно так: %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx.
    • Например, значение <pathToVHD> для Ubuntu 20.04 должно выглядеть примерно так: %LOCALAPPDATA%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79xxxx\LocalState\ext4.vhdx.
  4. Измените размер VHD WSL 2, выполнив следующие команды.

    • Откройте командную строку Windows с правами администратора и введите:

      diskpart
      
      DISKPART> Select vdisk file="<pathToVHD>"
      
      DISKPART> detail vdisk
      
    • Изучите выходные данные команды detail. Эти выходные данные будут содержать значение Virtual size (Объем виртуальной памяти). Это текущее максимальное значение. Переведите это значение в мегабайты. Например, если в выходных данных detail показано Virtual size: 256 GB (Объем виртуальной памяти: 256 ГБ), измените это значение на 256000.

    • Новое вводимое значение должно быть больше этого исходного значения. Например, чтобы удвоить указанный выше виртуальный размер, можно ввести это значение: 512000. Определив число, которое вы хотите задать в качестве нового размера (в мегабайтах), введите следующую команду в командной строке Windows (diskpart):

      DISKPART> expand vdisk maximum=<sizeInMegaBytes>
      
    • Выход из diskpart

      DISKPART> exit
      
  5. Запустите дистрибутив WSL (например, Ubuntu).

  6. Сообщите WSL, что можно увеличить размер файловой системы, выполнив следующие команды в командной строке дистрибутива WSL:

       sudo mount -t devtmpfs none /dev
       mount | grep ext4
    
    • В ответ на первую команду mount может появиться такое сообщение: /dev: none already mounted on /dev. Это сообщение можно спокойно игнорировать.
    • Скопируйте имя этой записи, которая будет выглядеть следующим образом: /dev/sdX (где X обозначает любой символ). В следующем примере значение X равно b:
       sudo resize2fs /dev/sdb <sizeInMegabytes>M
    
    • Используя приведенный выше пример, мы изменили размер виртуального жесткого диска, указав 512000, поэтому команда будет выглядеть так: .

    Примечание

    Возможно, придется установить приложение resize2fs. Для этого можно использовать такую команду: sudo apt install resize2fs.

    Вывод имеет следующий вид:

       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.
    

Важно!

Мы рекомендуем не изменять и не перемещать связанные с WSL файлы, расположенные в папке AppData, а также не обращаться к ним, используя средства или редакторы Windows. Это может привести к повреждению дистрибутива Linux. Если вы хотите обращаться к файлам Linux из Windows, это можно сделать, используя путь \\wsl$\<distroName>\. Откройте дистрибутив WSL и введите explorer.exe ., чтобы просмотреть эту папку. Дополнительные сведения см. в записи блога, посвященной получению доступа к файлам Linux из Windows.