在 WSL 2 中装载 Linux 磁盘
如果要访问 Windows 不支持的 Linux 磁盘格式,可以使用 WSL 2 装载磁盘并访问其内容。 本教程将介绍标识要附加到 WSL2 的磁盘和分区的步骤、如何装载它们以及如何对其进行访问。
如果你正在连接外部驱动器且使用这些装载说明操作失败,则可能需要尝试连接 USB 设备的说明。 wsl --mount
命令目前不支持 USB/闪存驱动器/SD 读卡器(详细了解此问题)。
注意
将磁盘附加到 WSL 2 需要管理员访问权限。
WSL 2 mount
命令不支持装载当前正在使用的磁盘(或属于该磁盘的分区)。 即使只请求一个分区,wsl --mount
也始终会附加整个磁盘。 无法装载 Windows 安装磁盘。
先决条件
你需要使用 Windows 11 内部版本 22000 或更高版本,或者运行 WSL 的 Microsoft Store 版本。 若要检查 WSL 和 Windows 版本,请使用以下命令:wsl.exe --version
使用 Windows 格式设置与 Linux 格式设置装载外部驱动器之间的差异
为 Windows 设置格式的外部驱动器通常使用 NTFS 文件系统格式。 为 Linux 设置格式的外部驱动器通常使用 Ext4 文件系统格式。
如果在 Windows 文件系统上装载了 NTFS 格式的驱动器,则可以使用 WSL 从 Linux 分发版访问该驱动器,方法是创建装载的目录(sudo mkdir /mnt/d
,将“d”替换为要使用的驱动器号),然后使用 drvfs
文件系统互操作插件并使用以下命令:
sudo mount -t drvfs D: /mnt/d
如果你有 Ext4 格式的驱动器,则无法将其装载到 Windows 文件系统上。 若要使用 WSL 在 Linux 分发版中装载 Ext4 格式的驱动器,可以按照下面的说明使用 wsl --mount
命令。
装载未分区的磁盘
如果磁盘没有任何分区,则可以使用 wsl --mount
命令直接装载该磁盘。 首先需要标识磁盘。
标识磁盘 - 要列出 Windows 中的可用磁盘,请运行:
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
磁盘路径位于“DeviceID”列下。 通常采用
\\.\PHYSICALDRIVE*
格式。装载磁盘 - 使用 PowerShell,可以使用上面发现的磁盘路径装载磁盘,请运行:
wsl --mount <DiskPath>
装载分区磁盘
如果不确定磁盘的文件格式或其中的分区,可以按照以下步骤进行装载。
标识磁盘 - 要列出 Windows 中的可用磁盘,请运行:
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
磁盘路径列在“DeviceID”之后,通常采用
\\.\PHYSICALDRIVE*
格式。列出并选择要在 WSL 2 中装载的分区 - 确定磁盘后,运行:
wsl --mount <DiskPath> --bare
这将使磁盘在 WSL 2 中可用。 (在我们的示例中,
<DiskPath>
为\\.\PHYSICALDRIVE*
。附加后,可以通过在 WSL 2 中运行以下命令来列出分区:
lsblk
这会显示可用的块设备及其分区。
在 Linux 中,块设备被标识为 /dev/<Device><Partition>
。 例如,/dev/sdb3 是磁盘 sdb
的分区号 3。
示例输出:
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
标识文件系统类型
如果不知道磁盘或分区的文件系统类型,可以使用以下命令:
blkid <BlockDevice>
这将输出检测到的文件系统类型(采用 TYPE="<Filesystem>"
格式)。
装载所选分区
确定要装载的分区后,请在每个分区上运行以下命令:
wsl --mount <DiskPath> --partition <PartitionNumber> --type <Filesystem>
注意
如果希望将整个磁盘装载为单个卷(即如果磁盘未分区),则可以省略 --partition
。
如果省略,则默认文件系统类型为“ext4”。
访问磁盘内容
装载后,可以通过配置值指向的路径访问磁盘:automount.root
。 默认值为 /mnt/wsl
。
在 Windows 中,可以通过导航到以下位置从文件资源管理器访问磁盘:\\wsl$\<Distro>\<Mountpoint>
(选择任何 Linux 发行版)。
卸载磁盘
如果要从 WSL 2 卸载和分离磁盘,请运行:
wsl --unmount <DiskPath>
在 WSL 中装载 VHD
注意
Microsoft Store 中的 WSL 引入了直接装载 VHD 的新参数:wsl --mount --vhd <pathToVHD>
还可以使用 wsl --mount
将虚拟硬盘文件 (VHD) 装载到 WSL。 为此,首先需要使用 Windows 中的 Mount-VHD
命令将 VHD 装载到 Windows 中。 请确保以管理员权限运行此命令。 下面是一个示例,我们使用此命令并输出磁盘路径。 请务必将 <pathToVHD>
替换为实际 VHD 路径。
Write-Output "\\.\PhysicalDrive$((Mount-VHD -Path <pathToVHD> -PassThru | Get-Disk).Number)"
可以使用上面的输出获取此 VHD 的磁盘路径,然后按照上一部分中的说明将其装载到 WSL 中。
还可以使用此技术装载其他 WSL 发行版的虚拟硬盘并与之交互,因为每个 WSL 2 发行版都通过名为 ext4.vhdx
的虚拟硬盘文件进行存储。 默认情况下,WSL 2 发行版的 VHD 存储在以下路径中:C:\Users\[user]\AppData\Local\Packages\[distro]\LocalState\[distroPackageName]
,请谨慎访问这些系统文件,这是一个高级用户工作流。 确保在与该磁盘交互之前运行 wsl --shutdown
以确保该磁盘未被使用。
命令行参考
装载特定文件系统
默认情况下,WSL 2 将尝试将设备装载为 ext4。 若要指定其他文件系统,请运行:
wsl --mount <DiskPath> -t <FileSystem>
例如,若要以 fat 形式装载磁盘,请运行:
wsl --mount <Diskpath> -t vfat
注意
若要列出 WSL2 中的可用文件系统,请运行:cat /proc/filesystems
如果磁盘已通过 WSL2(Linux 文件系统)进行装载,则无法再通过 Windows 文件系统上的 ext4 驱动程序进行装载。
装载特定的分区
默认情况下,WSL 2 将尝试装载整个磁盘。 若要装载特定分区,请运行:
wsl --mount <Diskpath> -p <PartitionIndex>
仅当磁盘是 MBR(主启动记录)或 GPT(GUID 分区表)时,此操作才有效。 了解分区样式 - MBR 和 GPT。
指定装载选项
若要指定装载选项,请运行:
wsl --mount <DiskPath> -o <MountOptions>
示例:
wsl --mount <DiskPath> -o "data=ordered"
注意
目前仅支持特定于文件系统的选项。 不支持诸如 ro, rw, noatime, ...
之类的通用选项。
附加磁盘而不装载它
如果上述任何选项都不支持磁盘方案,则可以通过运行以下内容将磁盘附加到 WSL 2 而不对其进行装载:
wsl --mount <DiskPath> --bare
这将使块设备在 WSL 2 内可用,以便可以从那里手动装载。 使用 lsblk
列出 WSL 2 中可用的块设备。
指定装载名称
注意
此选项仅适用于 Microsoft Store 中的 WSL
默认情况下,装入点名称是根据物理磁盘或 VHD 名称生成的。 这可以用 --name
覆盖此项。 示例:
wsl --mount <DiskPath> --name myDisk
分离磁盘
若要从 WSL 2 分离磁盘,请运行:
wsl --unmount [DiskPath]
如果省略 Diskpath
,则将卸载和分离所有附加的磁盘。
注意
如果无法卸载某个磁盘,可以通过运行 wsl --shutdown
强制退出 WSL 2,这将分离磁盘。
限制
目前,只能将整个磁盘附加到 WSL 2,这意味着不可能只附加一个分区。 具体而言,这意味着无法使用
wsl --mount
读取启动设备上的分区,因为该设备无法与 Windows 分离。wsl --mount
只能装载内核中原生支持的文件系统。 这意味着无法通过调用wsl --mount
来使用已安装的文件系统驱动程序(例如 ntfs-3g)。内核不直接支持的文件系统可以通过
--bare
附加然后调用相关的 FUSE 驱动程序来装载。