Если вы хотите получить доступ к формату диска Linux, который не поддерживается Windows, можно использовать WSL 2 для подключения диска и доступа к его содержимому. В этом руководстве рассматриваются действия по определению диска и раздела для подключения к WSL2, их подключению и доступу к ним.
Примечание
Для подключения диска к WSL 2 требуется доступ администратора. Команда WSL 2
mount
не поддерживает подключение диска (или секций, принадлежащих диску), используемых в настоящее время.wsl --mount
всегда присоединяет весь диск, даже если запрашивается только секция. Невозможно подключить диск установки Windows.
Предварительные требования
Для доступа к этой функции вам потребуется Windows 11 сборке 22000 или более поздней версии. Вы можете присоединиться к программе предварительной оценки Windows, чтобы получить последние предварительные сборки.
Подключение незасекционированного диска
В этом простейшем случае, если у вас есть диск без секций, его можно подключить непосредственно с помощью wsl --mount
команды. Сначала необходимо определить диск.
-
Определите диск. Чтобы получить список доступных дисков в Windows, выполните следующую команду:
PowerShell
-
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
Пути к дискам доступны в столбцах DeviceID. Обычно в
\\.\PHYSICALDRIVE*
формате. -
Подключите диск — с помощью PowerShell можно подключить диск с помощью пути к диску, обнаруженному выше, выполните следующую команду:
PowerShell
-
wsl --mount <DiskPath>
Подключение секционированного диска
Если у вас есть диск, в который вы не уверены, какой формат файла он находится или какие секции у него есть, выполните указанные ниже действия, чтобы подключить его.
-
Определите диск. Чтобы получить список доступных дисков в Windows, выполните следующую команду:
PowerShell
-
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
Пути к дискам перечислены после DeviceID, как правило, в
\\.\PHYSICALDRIVE*
формате. -
Выведите список и выберите секции для подключения в WSL 2 . После определения диска выполните следующую команду:
PowerShell
-
wsl --mount <DiskPath> --bare
Это сделает диск доступным в WSL 2. (В нашем примере
<DiskPath>
это .\\.\PHYSICALDRIVE*
-
После присоединения раздел можно перечислить, выполнив следующую команду в WSL 2:
Bash
-
lsblk
При этом будут отображаться доступные блочные устройства и их секции.
Внутри Linux блочное устройство определяется как /dev/<Device><Partition>
. Например, /dev/sdb3 — это номер раздела 3 диска sdb
.
Выходные данные примера:
Bash
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 1G 0 disk
├─sdb2 8:18 0 50M 0 part
├─sdb3 8:19 0 873M 0 part
└─sdb1 8:17 0 100M 0 part
sdc 8:32 0 256G 0 disk /
sda 8:0 0 256G 0 disk
Определение типа файловой системы
Если вы не знаете тип файловой системы диска или раздела, можно использовать следующую команду:
Bash
blkid <BlockDevice>
Будет выведен обнаруженный тип файловой системы (в TYPE="<Filesystem>"
формате).
Подключение выбранных секций
Определив разделы, которые требуется подключить, выполните следующую команду в каждой секции:
PowerShell
wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>
Примечание
Если вы хотите подключить весь диск как один том (т. е. если диск не секционирован), --partition
можно опустить.
Если этот параметр опущен, тип файловой системы по умолчанию — ext4.
Доступ к содержимому диска
После подключения диск можно получить по пути, на который указывает значение конфигурации: automount.root
. Значение по умолчанию — /mnt/wsl
.
С Windows доступ к диску можно получить из проводник, перейдя по следующим \\wsl$\\<Distro>\\<Mountpoint>
адресам (выберите любой дистрибутив Linux).
Отключение диска.
Если вы хотите отключить и отключить диск от WSL 2, выполните следующую команду:
PowerShell
wsl --unmount <DiskPath>
Подключение виртуального жесткого диска в WSL
Примечание
WSL из Microsoft Store представляет новый аргумент для прямого подключения виртуального жесткого диска:wsl --mount --vhd <pathToVHD>
Вы также можете подключить файлы виртуальных жестких дисков (VHD) к WSL с помощью wsl --mount
. Для этого сначала необходимо подключить виртуальный жесткий диск к Windows с помощью Mount-VHD
команды в Windows. Обязательно выполните эту команду с правами администратора. Ниже приведен пример, в котором мы используем эту команду, а также выводим путь к диску. Обязательно замените <pathToVHD>
фактический путь виртуального жесткого диска.
PowerShell
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path <pathToVHD> -PassThru | Get-Disk).Number)"
Вы можете использовать приведенные выше выходные данные, чтобы получить путь к диску для этого виртуального жесткого диска и подключить его к WSL, следуя инструкциям, приведенным в предыдущем разделе.
Этот метод также можно использовать для подключения и взаимодействия с виртуальными жесткими дисками других дистрибутивов WSL, так как каждый дистрибутив WSL 2 хранится через файл виртуального жесткого диска: ext4.vhdx
По умолчанию виртуальные жесткие диски для дистрибутивов WSL 2 хранятся по этому пути: C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName]
используйте осторожность при доступе к этим системным файлам, это рабочий процесс power user. Прежде чем взаимодействовать wsl --shutdown
с этим диском, убедитесь, что диск не используется.
Справочник по командной строке
Подключение определенной файловой системы
По умолчанию WSL 2 попытается подключить устройство как ext4. Чтобы указать другую файловую систему, выполните следующую команду:
PowerShell
wsl --mount <DiskPath> -t <FileSystem>
Например, чтобы подключить диск как жир, выполните следующую команду:
wsl --mount <Diskpath> -t vfat
Примечание
Чтобы получить список доступных файловых систем в WSL2, выполните следующую команду: cat /proc/filesystems
Если диск подключен через WSL2 (файловая система Linux), он больше недоступен для подключения через драйвер ext4 в файловой системе Windows.
Подключение определенной секции
По умолчанию WSL 2 пытается подключить весь диск. Чтобы подключить определенную секцию, выполните следующую команду:
wsl --mount <Diskpath> -p <PartitionIndex>
Это работает только в том случае, если диск — MBR (главная загрузочная запись) или GPT (таблица разделов GUID).
Указание параметров подключения
Чтобы указать параметры подключения, выполните следующую команду:
PowerShell
wsl --mount <DiskPath> -o <MountOptions>
Пример
PowerShell
wsl --mount <DiskPath> -o "data=ordered"
Примечание
В настоящее время поддерживаются только определенные параметры файловой системы. Универсальные параметры, такие как ro, rw, noatime, ...
не поддерживаются.
Подключение диска без подключения
Если схема диска не поддерживается любым из описанных выше вариантов, вы можете подключить диск к WSL 2, не подключив его, выполнив следующую команду:
PowerShell
wsl --mount <DiskPath> --bare
Это сделает блочное устройство доступным в WSL 2, чтобы его можно было подключить вручную. Используется lsblk
для перечисления доступных блочных устройств в WSL 2.
Указание имени подключения
Примечание
Этот параметр доступен только в WSL из Microsoft Store
По умолчанию имя точки подключения создается на основе физического диска или имени виртуального жесткого диска. Это может быть переопределено с помощью --name
. Пример
PowerShell
wsl --mount <DiskPath> --name myDisk
Отключение диска
Чтобы отключить диск от WSL 2, выполните следующую команду:
PowerShell
wsl --unmount [DiskPath]
Если Diskpath
этот параметр опущен, все подключенные диски отключены и отсоединяются.
Примечание
Если один диск не удается отключить, WSL 2 может быть вынужден выйти, запустив его wsl --shutdown
, что приведет к отключению диска.
Ограничения
-
В настоящее время к WSL 2 можно подключить только все диски, что означает, что подключить только секцию невозможно. Это означает, что невозможно использовать
wsl --mount
для чтения секции на загрузочном устройстве, так как это устройство не может быть отсоединен от Windows. -
Только файловые системы, которые изначально поддерживаются в ядре, могут быть подключены.
wsl --mount
Это означает, что невозможно использовать установленные драйверы файловой системы (например, ntfs-3g), вызывая .wsl --mount
-
Файловые системы, не поддерживаемые ядром, можно подключить через
--bare
подключение, а затем вызвать соответствующий драйвер FUSE.