有人知道为什么微软选择将 WSL 目录挂载在/mnt/c
而不是上吗/c
?
我已经在网上看到了关于如何将其更改为的教程/c
,但我担心这种改变可能会破坏某些东西。
答案1
各种挂载点的位置属于跳频。有几种方法可用于安装永久卷,例如 Windows C 盘。让我们仔细研究一下,以了解 Microsoft 做出这一决定的理由。
在/media/c
这本来是我的第一个想法,因为/media/*
我个人习惯在我的 Linux 机器上安装永久安装的驱动器,例如内置硬盘和 SSD。
FHS 表示:
此目录包含用作可移动介质(例如软盘、CD-ROM 和 zip 磁盘)的挂载点的子目录。
因此,根据规范,它不是相当我们想要的。虽然我不确定从技术上来说是否可以c
从 WSL 卸载,但从传统意义上来说它肯定不是可移除的。
许多 GUI 文件浏览器还会在侧边栏中显示已安装的卷。这通常不是 WSL 的一大问题,但无论如何还是值得考虑的。
优点:
- 一个非常直观的选择
- 受到许多文件管理器的支持
缺点:
- 不完全符合规格
- 将可移动媒体和永久媒体结合在一起
在/mnt/c
这显然是微软选择的选项。但为什么呢?再看看规范,我们看到:
提供此目录以便系统管理员可以根据需要临时挂载文件系统。
尽管最近使用 /mnt 中的子目录作为挂载点已经很常见,但它与直接使用 /mnt 作为临时挂载点的更古老的传统相冲突。
嗯。这也不太适合我们的用例。通常,使用 时/mnt
,/mnt
本身挂载到的目录,而不是子目录——但由于这只能由管理员临时手动完成,因此管理员仍可以/mnt
自行决定在内部挂载任何他们喜欢的目录。当然,这并不意味着系统会自动挂载它。总而言之,这似乎是微软的一个糟糕选择。
优点:
- ???
缺点:
- 绝对不符合规格
- 意味着你不能安装任何东西
/mnt
- 表明它是手动安装的,而不是自动安装的
在/c
这可能看起来是一种直观且显而易见的选择。它反映了 Windows 的隐喻,即驱动器名称是每个路径的第一部分,并且易于输入和记忆。但 FHS 不喜欢 中的任意目录/
。
禁止创建根文件系统的新子目录有以下几个原因:
它需要根分区上的空间,系统管理员可能出于性能或安全原因希望保持根分区的空间较小且简单。
它逃避了系统管理员为在可安装卷上分发标准文件层次结构而设置的任何纪律。
发行版不应该在根层次结构中创建新目录,除非仔细考虑后果(包括应用程序可移植性)。
优点:
- 直觉的
缺点:
- 绝对不符合规格
概括
永久驱动器应该挂载在哪里是 *nix 系统用户长期以来一直存在的问题。不幸的是,目前似乎没有达成太多共识。我个人认为微软做出了错误的决定,本来可以/media/c
做得更好,尽管/c
这也是一个有效的选择。不过,有可能由于缺乏共识,开发人员只是随机选择了它并且从未改变过。无论如何,WSL 挂载C:
在哪里的答案/mnt/c
是“它就是这么做的”。
答案2
有人知道为什么微软选择将 WSL 目录挂载在
/mnt/c
而不是上吗/c
?
正如此处其他当前答案所表明的(并且相当清楚),这可能更多的是一个观点问题。由于基于观点的问题在这里公平地说是题外话,我将回答您(隐含的)问题的另一部分:
我已经在网上看到了关于如何将其更改为的教程
/c
,但我担心这种更改可能会破坏某些东西。
虽然我不一定鼓励这样做,但我并不担心它会破坏任何东西,至少不是传统意义上的破坏。
更改方法直接在 [WSL 文档](https://learn.microsoft.com/en-us/windows/wsl/wsl-config#automount-settings。只需sudo -e /etc/wsl.conf
添加:
[automount]
root=/
退出 WSL 发行版,从 PowerShell 运行wsl --shutdown
(或wsl --terminate <distro>
)(作为普通非管理员用户),然后重新启动。
您现在应该可以看到/c
(以及根级别的任何其他 Windows 驱动器)。请注意,/mnt
(例如/mnt/c
)下的预先存在的挂载点仍将存在,但为空。您可以sudo rmdir /mnt/c
针对每个驱动器执行(等等)。
我有一些相当良性的理由建议您保留坐骑/mnt
:
其他人也都在这么做 ;-)
如果你遵循 WSL 指示(例如另一个 Stack 答案),他们通常会假设该位置是
/mnt/c
有些代码可能会错误地假设
/mnt/c
第三方代码
/mnt/c
也有可能这样做,但可能性很小。不过,你很可能运行很多第三方 WSL 代码。其他人都在这么做(重复)
将来当您发布问题时,如果您确实将挂载点更改为
/c
,那么我建议您确保在问题中引用此事实(假设您正在使用该路径)。否则,这只是那些希望回答的人可能需要解决的另一个细节。
但同样,这只是意味着保留 WSL 默认设置是“阻力最小的路径”。如果你这样做,我仍然不希望出现任何问题。