在 Windows 子系统中为 Linux 安装 windows 共享

Mounting a windows share in Windows Subsystem for Linux

我想从 WSL(Linux 的 Windows 子系统)中安装一个 windows 服务器。在 Ubuntu 上(使用统一界面)我可以输入

gvfs-mount smb://domain\;user@server/share

一切正常。

如果我在 WSL 中尝试此操作,则会收到以下错误:

Error mounting location: volume doesn't implement mount

虽然您已经在 WSL 中为您创建了通过 /mnt/c 为 windows 主机创建的挂载,但如果您想从另一台计算机挂载共享,则需要创建挂载点,例如

sudo mkdir -p /mnt/somename

然后您需要使用 mount.cifs 在该挂载点挂载远程共享的 smb:// 文件系统,例如

sudo mount.cifs //server/sharename /mnt/somename

您可以选择在 /mnt/somename 之后包含选项,例如

-o username=yourname,uid=YOURUID,noperm,password=yourpassforremoteshare

如果您尝试安装的是较旧的 WinXP 共享,则需要通过包含 sec=ntlmsec=ntlm1 来启用 NTLMv1 身份验证。有关 sec= 选项的进一步使用,请参阅 mount.cifs

假设主机 Windows OS 可以访问位于“\\servername\sharename”的文件共享,请在 bash 中尝试此命令。您将需要成为 root:

mkdir /mnt/mountedshare
mount -t drvfs '\servername\sharename' /mnt/mountedshare

单引号很重要!

使用 SharePoint Online UNC 路径为我工作。虽然权限很奇怪。我可以浏览文件夹并查看文件名,但无法读取文件。所以需要弄清楚权限的事情。如果您对此有所了解,请告诉我。

实际上,如果您的 windows 共享已经映射到 Windows 主机中的驱动器,则可以更简单。假设您已经在 Z: 上安装了共享。在这种情况下,以下将起作用:

sudo mkdir /mnt/z
sudo mount -t drvfs 'Z:' /mnt/z

在 WSL 中(我使用的是 Ubuntu),看起来当您安装 cifs-utils 时它不会创建 cifs 在挂载时需要的模块文件。输入:"modinfo cifs" 你会看到。无论如何,解决方法是在 Windows 中映射一个驱动器号,然后挂载到该驱动器号,如上所述。谢谢加布佐。

可能是 cifs-utils 在错误的位置查找模块文件。或者 MS 故意禁用它。他们不希望 WSL 太有用。

安装 SMB 服务器共享应该很简单,我在 Windows build 1909 和 WSL 2.0 Ubuntu 20.04.1 LTS (GNU/Linux 4.19.128-microsoft-standard x86_64)。你像往常一样使用 mount:

sudo mount -t drvfs '\server\share' /your/mount/folder

没什么难的,挂载的源路径是常规的UNC路径名。重要的是文件系统类型(“驱动器文件系统”?)以及您需要用单引号将服务器路径括起来(在命令行上)这一事实。和往常一样,你的挂载文件夹也必须存在。

this WSL issue 上,我发现了一些不错的选项 (-o),它似乎在不使用 sudo 的情况下创建、读取和写入文件以及读取正确的 modification/creation 日期方面效果很好:

metadata,rw,noatime,uid=1000,gid=1000,umask=22,fmask=11

因为我喜欢始终挂载此服务器,所以我将挂载指令放入 /etc/fstab 以使其由 WSL 自动挂载:

\server\share /your/mount/folder drvfs metadata,rw,noatime,uid=1000,gid=1000,umask=22,fmask=11 0 0

(您可以使用 sudo mount -a 重新加载 fstab)

请注意,我已在 Windows 本身上登录服务器并使其记住用户名和密码。 @David C. Rankin 的回答有一些关于如何指定用户名和密码的信息,如果你需要单独指定的话。