Управление дисковой областью WSL
В этом руководстве описывается, как управлять дисковое пространство, используемое дистрибутивами Linux, установленными с помощью WSL 2, в том числе:
- Как проверка объем места на диске, доступного на виртуальном жестком диске
- Расширение размера виртуального жесткого диска
- Восстановление виртуального жесткого диска при возникновении ошибки
- Как найти VHDX-файл и путь к диску для всех установленных дистрибутивов Linux
подсистема Windows для Linux (WSL 2) использует платформу виртуализации для установки дистрибутивов Linux вместе с операционной системой Windows, создавая виртуальный жесткий диск (VHD) для хранения файлов для каждого устанавливаемого дистрибутива Linux. Эти виртуальные жесткие диски используют тип файловой системы ext4 и представлены на жестком диске Windows в виде файла ext4.vhdx .
WSL 2 автоматически изменяет размер этих VHD-файлов в соответствии с потребностями хранилища. По умолчанию каждый VHD-файл, используемый WSL 2, изначально выделяется 1 ТБ максимальный объем дискового пространства (до выпуска WSL 0.58.0 этот параметр по умолчанию был установлен на 512 ГБ и максимальное значение 256 ГБ до этого).
Если дисковое пространство, необходимое для файлов Linux, превышает этот максимальный размер, вы увидите ошибки с сообщением о том, что у вас не было места на диске. Чтобы устранить эту ошибку, следуйте приведенным ниже инструкциям по расширению размера виртуального жесткого диска WSL 2.
Проверьте объем дискового пространства, доступного в VHD для дистрибутива Linux, установленного с WSL 2, с помощью команды Linux Df
.
Чтобы проверка доступное место на диске, откройте командную строку PowerShell и введите следующую команду (заменив <distribution-name>
фактическое имя дистрибутива):
wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro
Если эта команда не работает, обновите версию WSL магазина с помощью wsl --update
команды или попробуйте wsl df -h /
.
Выходные данные будут включать:
- Файловая система: идентификатор файловой системы VHD
- Размер: общий размер диска (максимальное количество места, выделенного виртуальному жесткому диску)
- Используется: объем пространства, используемого в настоящее время в виртуальном жестком диске
- Доступность: объем свободного места на виртуальном жестком диске (использованный объем выделенного размера минус)
- Использование%: процент оставшегося места на диске (используемый или выделенный размер)
- Подключено: путь к каталогу, в котором подключен диск
Если вы видите, что вы приближаетесь к достижению доступного объема дискового пространства, выделенного виртуальному жесткому диску, или уже получили ошибку из-за отсутствия свободного места на диске, см. в следующем разделе, посвященном развертыванию максимального объема дискового пространства, выделенного виртуальному жесткому диску, связанному с дистрибутивом Linux. Объем места на диске, выделенного для виртуального жесткого диска WSL, всегда будет отображать максимальное значение по умолчанию (1 ТБ в последней версии WSL), даже если объем дискового пространства на фактическом устройстве Windows меньше этого. WSL подключает виртуальный жесткий диск, который будет расширяться по мере его использования, поэтому дистрибутив Linux видит, что он может увеличиваться до выделенного максимального размера 1 ТБ.
Чтобы развернуть размер виртуального жесткого диска для дистрибутива Linux за пределами по умолчанию 1 ТБ максимальный объем выделенного места на диске, выполните указанные ниже действия. (Для более ранних выпусков WSL, которые еще не обновлены, это максимальное значение по умолчанию может иметь значение 512 ГБ или 256 ГБ).
Завершите работы всех экземпляров WSL с помощью команды
wsl.exe --shutdown
.Скопируйте путь к каталогу в файл ext4.vhdx , связанный с дистрибутивом Linux, установленным на компьютере. Сведения о том, как найти VHDX-файл и путь к диску для дистрибутива Linux.
Откройте командную строку Windows с правами администратора, а затем откройте интерпретатор команды diskpart, введя следующее:
diskpart
Теперь появится
DISKPART>
запрос. Введите следующую команду, заменив<pathToVHD>
путь каталога кext4.vhdx
файлу, связанному с дистрибутивом Linux (скопированным на шаге 2).Select vdisk file="<pathToVHD>"
Отображение сведений, связанных с этим виртуальным диском , включая размер виртуального диска, представляющего текущий максимальный размер виртуального жесткого диска:
detail vdisk
Необходимо преобразовать размер виртуальной машины в мегабайты. Например, если размер виртуальной машины: 512 ГБ, это равно 512000 МБ. Новое вводимое значение должно быть больше этого исходного значения. Чтобы увеличить размер виртуальной машины размером 512 ГБ до 1024 ГБ, введите значение в МБ как: 1024000. Будьте осторожны, чтобы не вводить значение выше, чем вы на самом деле хотите, так как процесс уменьшения размера виртуального диска гораздо сложнее.
Введите значение нового максимального размера, которое вы хотите выделить для этого дистрибутива Linux с помощью командной строки
DISKPART>
Windows:expand vdisk maximum=<sizeInMegaBytes>
Выйти из
DISKPART>
запроса:exit
Запустите этот дистрибутив Linux. (Убедитесь, что он работает в WSL 2. Это можно подтвердить с помощью команды:
wsl.exe -l -v
WSL 1 не поддерживается).Убедитесь, что WSL может расширить размер файловой системы для этого распределения, выполнив эти команды из командной строки дистрибутива WSL. В ответ на первую команду mount может появиться такое сообщение: /dev: none already mounted on /dev. Это сообщение можно спокойно игнорировать.
sudo mount -t devtmpfs none /dev mount | grep ext4
Скопируйте имя этой записи, которая будет выглядеть следующим образом:
/dev/sdX
(где X обозначает любой символ). В следующем примере значение X равно b:
sudo resize2fs /dev/sdb <sizeInMegabytes>M
Используя приведенный выше пример, мы изменили размер виртуального жесткого диска на 2048000, поэтому команда будет: sudo resize2fs /dev/sdb 2048000M
Примечание
Возможно, придется установить приложение 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.
Виртуальный диск (ext4.vhdx) для этого дистрибутива Linux теперь успешно развернут до нового размера.
Важно!
Рекомендуется не изменять, перемещать или получать доступ к связанным файлам WSL, расположенным в AppData
папке с помощью средств Или редакторов Windows. Это может привести к повреждению дистрибутива Linux. Если вы хотите обращаться к файлам Linux из Windows, это можно сделать, используя путь \\wsl$\<distribution-name>\
. Откройте дистрибутив WSL и введите explorer.exe .
, чтобы просмотреть эту папку. Дополнительные сведения см. в записи блога, посвященной получению доступа к файлам Linux из Windows.
При возникновении ошибки, связанной с "подключением диска распространения", это может произойти из-за внезапного завершения работы или сбоя питания и может привести к переключении виртуального жесткого диска дистрибутива Linux на доступ только для чтения, чтобы избежать потери данных. Вы можете восстановить и восстановить дистрибутив с помощью e2fsck
команды Linux, выполнив приведенные ниже действия.
Когда WSL 2 устанавливает дистрибутив Linux, он устанавливает дистрибутив как виртуальный жесткий диск (VHD) с собственной файловой системой. Linux ссылается на эти жесткие диски как "блоковые устройства", и вы можете просматривать сведения о них с помощью lsblk
команды.
Чтобы найти имена блочных устройств, используемых WSL 2, откройте дистрибутив и введите команду: lsblk
(Или откройте PowerShell и введите команду: wsl.exe lsblk
.) Выходные данные будут выглядеть примерно так:
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
Сведения о блокируемом устройстве включают:
- NAME: Имя, назначенное устройству, будет sd[a-z], ссылаясь на диск SCSI с обозначением буквы для каждого используемого диска.
sda
всегда является системным распределением. - MAJ:MIN: представляет числа, используемые ядром Linux для внутренней идентификации устройств с первым номером, представляющим тип устройства (8 используется для дисков небольшой компьютерной системы и SCSI).
- RM: Давайте узнаем, является ли устройство съемным (1) или нет (0).
- РАЗМЕР: общий размер тома.
- RO: Давайте узнаем, доступно ли устройство только для чтения (1) или нет (0).
- ТИП: относится к типу устройства (диск в данном случае).
- MOUNTPOINTS: ссылается на текущий каталог в файловой системе, где находится блочное устройство (SWAP предназначен для предварительно настроенной неактивной памяти, поэтому точка подключения отсутствует).
Если WSL обнаруживает "ошибку подключения" при открытии дистрибутива Linux, дистрибутив может быть установлен как доступный только для чтения как резервный вариант. В этом случае распределение может отобразить следующую ошибку во время запуска:
An error occurred mounting the distribution disk, it was mounted read-only as a fallback.
При запуске дистрибутива только для чтения любые попытки записи в файловую систему завершаются ошибкой, как показано ниже:
$ touch file
touch: cannot touch 'file': Read-only file system
Чтобы восстановить ошибку подключения диска в WSL и восстановить его обратно в состояние, которое можно использовать или снова записать, можно использовать команду для повторного подключения диска с помощью wsl.exe --mount
следующих действий.
Завершите работу всех дистрибутивов WSL, открыв PowerShell и введя команду:
wsl.exe --shutdown
Откройте PowerShell от имени администратора (в командной строке с повышенными привилегиями) и введите команду подключения, заменив
<path-to-ext4.vhdx>
путь к VHDX-файлу дистрибутива. Сведения о поиске этого файла см. в статье "Как найти VHD-файл и путь к диску для дистрибутива Linux".wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
wsl.exe lsblk
Используйте команду Из PowerShell, чтобы определить имя блочного устройства для дистрибутива (sd[a-z]), а затем введите следующую команду, чтобы восстановить диск (заменив<device>
правильное имя устройства блока, например sdc). Командаe2fsck
проверка файловых систем ext4 (тип, используемый дистрибутивами, установленными с WSL) для ошибок и исправит их соответствующим образом.wsl.exe sudo e2fsck -f /dev/<device>
Примечание
Если у вас установлен только один дистрибутив Linux, может возникнуть ошибка "ext file in use" и потребуется установить дополнительное распределение для запуска wsl.exe lsblk
. После завершения восстановления можно удалить дистрибутив.
После завершения восстановления отключите диск в PowerShell, введя следующее:
wsl.exe --unmount
Предупреждение
Вы можете использовать команду: sudo mount -o remount,rw /
чтобы вернуть доступное только для чтения распределение в доступное или доступное для записи состояние, но все изменения будут в памяти и поэтому будут потеряны при перезапуске дистрибутива. Рекомендуется использовать описанные выше шаги для подключения и восстановления диска.
Чтобы найти VHDX-файл и путь к каталогу для дистрибутива Linux, откройте PowerShell и используйте следующий скрипт, заменив <distribution-name>
фактическое имя дистрибутива:
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"
В результате будет отображаться путь, который выглядит примерно так %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
. Например:
C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx
Это путь к ext4.vhdx
файлу, связанному с перечисленным дистрибутивом Linux.
Отзыв о Windows Subsystem for Linux
Windows Subsystem for Linux — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: