相同的挂载 NAS 驱动器的命令结果完全不同。我有两台计算机的数据,都是 WSL2 和 Windows 11。
我想到的唯一线索是系统中更新的 Linux 内核 (5.15) 不能像其他内核一样工作。
查看 Linux“mount”文档,“drvfs”不是一个有效的类型值,但它已在其他系统(包括 WSL1)上运行多年。
除了了解发生了什么之外,我的目标是检测哪些系统需要哪个命令。“MUSICCOMP-3020”是新的,也是唯一一个不能使用“-t drvfs”的系统。我运行一个 Python 程序来在这些系统和其他几个系统上安装 NAS,因此需要可靠地检测要使用哪个命令,或者找到一个适用于所有 WSL2 安装的命令。
捕获的数据如下。它显示了两台计算机上对相同两个命令的响应:“MUSICCOMP-3020”和“XPS8950”。
======================================
在 MUSICCOMP-3020 上:
uname -a
Linux MUSICCOMP-3020 5.15.133.1-microsoft-standard-WSL2 #1 SMP 2023 年 10 月 5 日星期四 21:02:42 UTC x86_64 x86_64 x86_64 GNU/Linux
这有效:
sudo mount -t cifs -o guest,uid=1000,iocharset=utf8 //192.168.2.202/EX2Ult /mnt/ex2ult
失败了:
sudo mount -t drvfs -o rw,noatime,uid=1000,gid=1000 '\\192.168.2.202\\EX2Ult' /mnt/ex2ult
错误响应是:
<3>WSL (564) 错误:MountWithRetry:307: mount(drvfs, /mnt/ex2ult, 9p, 0x00000400, cache=mmap,msize=262144,trans=virtio,aname=drvfs;path=UNC\192.168.2.202\EX2Ult;uid=1000;gid=1000;symlinkroot=/mnt/) 失败:参数无效
======================================
在 XPS8950 上:
uname -a
Linux XPS8950 5.10.16.3-microsoft-standard-WSL2 #1 SMP 2021 年 4 月 2 日星期五 22:23:49 UTC x86_64 x86_64 x86_64 GNU/Linux
这有效:
sudo mount -t drvfs -o rw,noatime,uid=1000,gid=1000 '\\192.168.2.202\\EX2Ult' /mnt/ex2ult
失败了:
sudo mount -t cifs -o guest,uid=1000,iocharset=utf8 //192.168.2.202/EX2Ult /mnt/ex2ult
错误响应是:
mount: /mnt/ex2ult: 糟糕的选项;对于几个文件系统(例如 nfs、cifs),您可能需要 /sbin/mount。帮助程序。
===================================================
以下补充是为了回答@geary 的问题,但它太复杂了,无法作为答案。
我认为这个问题已经足够复杂了,不需要再添加历史。所以我首先回答“如果……会怎样”的部分。
作为起点,在已使用的旧系统上。总结以下详细信息,这是唯一有效的命令。它需要-t drvfs
:
sudo mount -t drvfs -o rw,noatime,uid=1000,gid=1000 '\\192.168.2.202\\EX2Ult' /mnt/ex2ult
如果我删除-t
,或者使用-t auto
,我会得到:
mount: /mnt/ex2ult: special device \\192.168.2.202\\EX2Ult does not exist.
删除其余选项会产生相同的结果。
使用其他格式,响应始终是:
mount: /mnt/ex2ult: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
我所说的“其他格式”是指:
sudo mount -t cifs -o guest,uid=1000,iocharset=utf8 //192.168.2.202/EX2Ult /mnt/ex2ult
这是同样的反应,-t auto
或者消除-t
或消除所有其他选项,
仅供参考,“其他格式”已经在纯 Ubuntu 系统上使用很长时间了。我想我是在 14.04 或 16.04 版本中想到的。这就是为什么有一个“guest”帐户。
-t drvfs
从 WSL 开始,当我使用的格式不起作用时,就使用了它。
最新的系统(带有更新内核的系统)-t drvfs
根本无法处理。所以我有一个(实际上是两个,还有一个 Win 10 系统)需要,-t drvfs
还有一个在使用时无法连接。
答案1
首先,欢迎来到 AskUbuntu!我们很高兴您向我们提出问题。
我对 Mount 命令做了一些研究,发现这帖子。它特别提到您不必指定 FS。那么,当您不指定或使用 时会发生什么auto
?
另外,我注意到,其中一个指定了访客帐户,而另一个则没有。这种变化有什么原因吗?
[编辑] @OPunWide:经过进一步挖掘,我发现 cifs 和 drvfs 都是允许您安装网络驱动器的系统。可能未安装 cifs。验证两台机器上是否都安装了这两个系统,然后再次运行测试。您应该能够使用以下命令执行此操作:
sudo apt install cifs-utils
据微软称,DrvFs is a filesystem plugin to WSL that was designed to support interop between WSL and the Windows filesystem
这些系统与不同 Windows 版本的交互方式可能会存在一些奇怪之处。
另一个选择是在你的 python 脚本中包含一些错误处理,首先尝试 cifs,然后在不起作用时尝试 drvfs,然后设置一个变量以便它坚持使用起作用的那个(直到 M$ 更新破坏它)。
答案2
我放弃了理解问题的最初目标。我找到了一个解决方案,可以让我摆脱这个问题,但它需要改变旧系统。
感谢@Geary 对 cifs 的提醒。
如果安装了“cifs-utils”,所有系统都可以正常工作。我可能在新电脑的早期就安装了这个,所以它才能正常工作,但是¯\_(ツ)_/¯
为了坚持原始示例,一旦安装了“cifs-utils”,这将适用于所有系统:
sudo mount -t auto -o guest,uid=1000,iocharset=utf8 //192.168.2.202/EX2Ult /mnt/ex2ult
我确信这是 Linux 核心在 5.10.16.3 和 5.15.0-69 之间发生的一些问题。5.15 版本的 mount 命令似乎不支持我一直使用的类型“-t drvfs”。
如果有人知道变化何时发生或如何检测它,除了失败的 mount 命令之外,我还很感激有一篇文章来解释它。