网站搜索

Windows 只是装作不能读取 Linux 分区——实际上有内置的方法可以访问它们


如果你双系统启动 Windows 和 Linux,你可能以前遇到过这个问题。你启动到 Windows 来完成一些工作,打开文件资源管理器从你的 Linux 驱动器获取一个文件,但驱动器根本不见了。它已经插好,状态良好,Windows 在磁盘管理中也能识别它——但是实际的文件却找不到。

同时,当你在 Linux 系统时,你的 Windows 分区通常会毫无困难地显示出来,你可以整天来回复制文件。这种单方面的安排让人感觉好像 Windows 刻意把你与自己的文件隔开。那么这里实际上发生了什么——以及在 Windows 中如何访问你的 Linux 文件呢?

为什么 Linux 分区在 Windows 中不可见

Windows 没有坏——它只是不会说 Linux

问题基本上归结为不受支持的文件系统。Windows 本身只原生支持少数几种文件系统——主要是 NTFS、exFAT、FAT32 以及较新的 ReFS。与此同时,Linux 发行版使用的是完全不同的文件系统,即 ext4、Btrfs、XFS 或 ZFS。

现在,Windows 缺少读取这些 Linux 文件系统所需的驱动程序。因此,当 Windows 扫描该分区时,它可能会出现在磁盘管理中,但文件资源管理器仍无法访问其内容。

然而,大多数现代 Linux 发行版开箱即用就支持 NTFS,这就是为什么当你启动进入 Linux 时,你的 Windows 分区通常会自动挂载的原因。你通常可以在 Linux 中浏览、复制和修改所有 Windows 文件,而无需任何额外设置。

多年来,通常的解决方法是安装第三方软件。人们会使用免费的工具,如 DiskInternals Linux Reader 和 Ext2Read,同时也会使用付费选项,如 Linux File Systems for Windows,价格大约为 20 美元。

但是情况是——你不再需要第三方软件就能从 Windows 访问 Linux 文件了。Windows 11 包含了一个内置的解决方法来应对这个长期存在的问题。它可能感觉有点临时拼凑,但效果出奇地好。

使用 WSL2 让看不见的变得可见

解决方案一直隐藏在 Windows 中



WSL2,全称为 Windows Subsystem for Linux 2,是微软基于虚拟化的 Windows Linux 兼容层。它允许你在 Windows 内部直接运行真实的 Linux 环境,包含实际的 Linux 内核。

您可以使用它来安装流行的 Linux 发行版,如 Ubuntu、Debian 或 Arch,并通过 Windows 终端或 PowerShell 访问它们。由于 WSL2 运行的是真正的 Linux 内核,它可以原生地与 Linux 文件系统(如 ext4 等)一起工作。

你需要做的就是将包含你 Linux 分区的物理磁盘直接连接到 WSL2。一旦在 Linux 环境中挂载,这些文件就可以通过 WSL 内置的文件系统集成层被 Windows 访问。

现在,如果你愿意,可以从 WSL 终端浏览你的 Linux 文件,但真正的优势是它们也可以通过 Windows 文件资源管理器访问。这意味着你可以使用普通的 Windows 界面在 Windows 和 Linux 分区之间拖放文件——无需重启、终端操作或第三方应用程序。

您需要安装 WSL2 才能使其工作。您可以按照本指南来启用它。

如何将你的 Linux 分区挂载到你的 Windows 电脑

这几乎只需要你10分钟

这是一个逐步指南,教你如何在 Windows 中挂载你的 Linux 分区,以便你可以直接从 Windows 文件资源管理器浏览和操作你的 Linux 文件。

第1步:找到你的驱动器



按 Win+X 打开高级用户菜单,然后选择终端(管理员)。然后运行以下命令:

Get-CimInstance -ClassName Win32_DiskDrive | Select-Object DeviceID, Model, Size

此列表列出了系统中的每个物理磁盘,包括其型号、容量以及类似 \\.\PHYSICALDRIVE0 的设备ID。请在列表中找到您的 Linux 磁盘(型号和容量可以让其容易辨认),并记录其设备ID。

步骤 2:将驱动器连接到 WSL

仍在管理员 PowerShell 窗口中,运行:

wsl --mount \\.\PHYSICALDRIVE0 --bare #replace PHYSICALDRIVE0 with whichever disk houses your Linux partition

将“PHYSICALDRIVE0”替换为上一步中的正确磁盘编号。此命令将物理磁盘直接附加到 WSL2,而不会自动挂载其分区。

你不能使用 wsl --mount 来挂载包含 Windows 分区的磁盘。这意味着如果你的 Linux 分区与 Windows 在同一个 SSD(或 HDD)上,那么这是行不通的。话虽如此,如果你是双系统启动,最佳实践是将 Linux 和 Windows 安装在不同的硬盘上——否则这可能会带来比单纯不能挂载分区更多的麻烦。

步骤 3:查看驱动器上的内容

打开常规的 Windows 终端(非管理员),输入 wsl 进入你的 Linux 环境,然后运行:

lsblk -f

这将列出所有 WSL 可见的块设备,包括你刚刚连接的磁盘,以及每个分区的文件系统类型和标签。你需要查找类似 sda, sdb 的条目,以及它们的分区(sda1, sda2 等)。确定包含你想访问的 Linux 文件的分区。从这里,你可以选择挂载所有分区,也可以只挂载包含你希望访问的 Linux 文件的分区。

步骤4:挂载你想要的分区





挂载您的 Linux 分区的确切命令将取决于您的 Linux 发行版上的文件系统。对于 ext4 分区——在 Ubuntu、Debian、Mint 以及其他许多发行版中很常见——请依次运行以下命令:

sudo mkdir -p /mnt/wsl/mylinux #creates the folder you're mounting to
sudo mount -t ext4 /dev/sda1 /mnt/wsl/mylinux #mounts the partition to the newly created folder

第一个命令创建一个挂载目录,而第二个命令将分区挂载到该目录。

或者,如果你的发行版使用 Btrfs——这是 Garuda、Fedora、openSUSE 等系统的默认文件系统——几乎相同,只是 Btrfs 使用子卷,因此你可能需要指定要挂载哪个子卷。

sudo mkdir -p /mnt/wsl/mylinux #creates the folder you're mounting to
sudo mount -t btrfs -o subvol=@ /dev/sda1 /mnt/wsl/mylinux #mounts the partition to the newly created folder

根子卷通常是 @,而 home 子卷是 @home。也就是说,根据你的发行版布局,子卷名称可能不同。

如果这些命令让你感到困惑,你可以向 ChatGPT 或 Claude 寻求帮助。我发现他们对 Linux 终端的知识相当全面且有用。

步骤 5:通过文件资源管理器访问你的 Linux 文件






现在到了收获的时候。打开文件资源管理器,并在地址栏中输入以下内容:

\\wsl$

这会打开一个特殊的 Windows 网络样式命名空间,将 WSL2 Linux 文件系统暴露给 Windows。在这里你会看到所有通过 WSL 安装的 Linux 发行版。例如,我看到的是 Ubuntu。

打开包含你用于挂载 Linux 分区的 WSL 发行版的文件夹,你将看到该发行版的整个文件系统。现在你所需要做的就是找到 mnt 目录,打开它,你会在里面找到你刚挂载的 Linux 分区。从这里,你可以浏览文件、打开文件、将它们复制到你的 Windows 驱动器,或者将文件拖到相反方向。

值得了解的一个问题是,这些挂载在系统重启后不会保留。如果你重启 Windows,你需要重复附加和挂载的过程。如果你经常这样做,会很麻烦,这正是下一节的内容所针对的。

自动化挂载,以免重复自己

一个预定任务,你再也不做这个了

如果你希望每次登录 Windows 时都挂载 Linux 分区,你可以创建一个计划任务,自动运行 wsl --mount 命令。只需像之前一样以管理员身份打开终端,然后运行以下命令:

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument '-WindowStyle Hidden -Command "wsl --mount \\.\PHYSICALDRIVE0 --bare; wsl -- bash -c \"sudo mkdir -p /mnt/wsl/mylinux && sudo mount -t btrfs -o subvol=@ /dev/sdc5 /mnt/wsl/mylinux\""'

将 驱动器编号、文件系统类型、分区路径 和 挂载位置 替换为你在本指南中之前使用的值。不要盲目复制粘贴上面的示例命令,否则你要么会挂载错误的分区,要么会触发错误。

完成后,依次输入以下命令:

$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "MountLinuxDrives" -Action $action -Trigger $trigger -RunLevel Highest -Force

就是这样——你已经成功创建了一个计划任务,它将在登录时自动运行挂载脚本,因此在 Windows 中工作时,你总是可以访问你的 Linux 分区。

如果你想要删除计划任务,只需运行此命令:

Unregister-ScheduledTask -TaskName "MountLinuxDrives" -Confirm:$false

双启动设置变得更加无缝

就是这样:一种干净且完全本地的方式,让你可以从 Windows 系统与 Linux 分区进行交互。你的 Linux 驱动器会显示在文件资源管理器中,表现得像其他任何驱动器一样,并允许你在两个系统间无缝地移动文件。

相关文章