在 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=ntlm
或 sec=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 的回答有一些关于如何指定用户名和密码的信息,如果你需要单独指定的话。
我想从 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=ntlm
或 sec=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 的回答有一些关于如何指定用户名和密码的信息,如果你需要单独指定的话。