前情
在 Windows 10 里,要在 WSL 内 mount 另一个 ext 分区,是有一些限制的。首先是对 WSL 本身,要求必须是从 Microsoft Store 下载的版本,而非系统自带版本。否则的话,--mount
命令就不被支持。其次,由于 wsl.exe --mount
会是挂载整个磁盘,因此要求此时 Windows 不能对该盘正在占用。当 wsl.exe --mount
挂载磁盘成功后,就可以转到 Linux 子系统中使用 mount
命令挂载指定的分区了。
ChatGPT
从某个版本开始,Windows 的资源管理器中会将 WSL 中的所有 Linux 子系统列出,并可以将其中的目录树展开访问。因此我误以为在 Linux 子系统里 mount 上的 ext4 分区中的内容也可以借由此途径暴露出来。事实是当试图访问时,分区内为空白。就此事请教了 ChatGPT,发现其对此处的情况相当了解。把未作改动的交互转录于下(ME 是我,CG 是 ChatGPT)。
CG:在 WSL 中 mount 的 ext4 分区,默认情况下是无法在 Windows 10 资源管理器的 Linux 文件夹下看到的。这是因为 WSL 文件系统和 Windows 文件系统是相互独立的,它们有各自的目录树和文件命名约定。虽然你可以通过在 WSL 中使用 explorer.exe . 命令来打开资源管理器并浏览 WSL 文件系统,但这并不是一个直接在资源管理器中访问 WSL 文件系统的解决方案。
如果你希望在 Windows 10 资源管理器的 Linux 文件夹下看到 WSL 中 mount 的 ext4 分区中的文件,可以使用以下方法:
- 使用某些第三方软件或扩展来实现:例如,你可以安装“DiskInternals Linux Reader”或“Ext2Fsd”等第三方软件,或使用“WinFsp”扩展来挂载 ext4 分区并在资源管理器中访问它们。
- 在 WSL 中创建软链接或符号链接:你可以在 WSL 中使用 ln -s 命令创建一个软链接或符号链接,将 ext4 分区中的目录链接到 Windows 文件系统中的某个目录。这样,在资源管理器中访问该目录时,实际上是访问了 ext4 分区中的目录。
需要注意的是,在使用第一种方法时,你需要在 Windows 上安装额外的软件,并且存在一定的安全风险。在使用第二种方法时,需要手动创建软链接或符号链接,并且需要注意链接的目录和文件权限。
CG:对于 WSL 中手动 mount 的 ext4 分区,如果你想要在 Windows 10 资源管理器的 Linux 文件夹下访问其中的文件,需要使用第一种方法或第二种方法中的一种。而对于 WSL 中自动挂载的 ext4 分区,它们实际上是挂载在 WSL 文件系统的某个子目录下,这些子目录是可以直接在 Windows 10 资源管理器的 Linux 文件夹下访问的。
默认情况下,WSL子系统使用的文件系统是ext4,但是与WSL文件系统(通过lxfs格式)不同,挂载的ext4文件系统使用的是特殊的drvfs格式。该drvfs格式是WSL自动挂载文件系统时使用的一种文件系统格式,允许将Windows文件系统的路径映射到WSL文件系统中的路径。
因此,对于 WSL 中自动挂载的 ext4 分区和手动挂载的 ext4 分区,它们之间存在区别。对于自动挂载的 ext4 分区,它们挂载在 WSL 文件系统的子目录下,可以直接在 Windows 10 资源管理器的 Linux 文件夹下访问,而手动挂载的 ext4 分区则需要使用第一种方法或第二种方法中的一种才能在 Windows 10 资源管理器的 Linux 文件夹下访问。