为实现在 Linux 服务器上的开发环境实时映射局域网内 Windows 的共享文件夹进行开发,我们可以使用 Linux 的 mount 功能把局域网内 Windows 的共享文件夹挂载到指定目录。在此将实现步骤罗列,给需要的人以参考。
Windows
- 添加专用于挂载的 Windows 新用户,设置用户名为
<username>
,密码为<password>
- 创建 Windows 共享文件夹
<shared_dir>
- 共享该文件夹:右键单击文件夹
<shared_dir>
进入 属性 - 共享 - 高级共享 - 共享此文件夹。 - 设置共享权限,权限 - 添加,在 选择用户或组 界面的 输入对象名称来选择 输入框内输入用户名
<username>
确定添加,并将<username>
的权限设置为 完全控制。建议删除 Everyone 用户的共享权限。 - 确定 / 固定 Windows 在局域网中的 IP 地址为
<WinIP>
- 关闭 Windows 防火墙
Linux
- 创建 Linux 挂载文件夹
<mount_dir>
- 以 root 权限运行如下命令挂载文件夹
mount -t cifs -o username="<username>",password="<password>" -o uid=<linuxuser> -o gid=<linuxgroup> //<WinIP>/<shared_dir> /<path>/<mount_dir>
其中的 <linuxuser>
和 <linuxgroup>
为 Linux 中具有开发环境配置权限的用户和其所在用户组。
上述方法将 <shared_dir>
内的文件挂载到了 <mount_dir>
中。你也可以根据自己需要对命令进行微调。
排障
如果运行 mount
执行挂载时提示 Host 宕机:
$ mount -t cifs -o username="user",password="passwd" -o uid=user -o gid=usergroup //<WinIP>/dir /path/to
Host is down.
这种情况有可能时由于两端的 Samba 协议不匹配造成的。要解决这个问题,首先需要确认是否时由前述原因造成的。可以执行如下命令:
$ smbclient -L <server_ip> -U <username> -d 256
在显示的 debug 信息中可以看到错误信息:
Connection to <WinIP> failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Failed to connect with SMB1 -- no workgroup available
这样可以在执行 mount
命令时增加参数 vers=2.0
来指定协议版本,从而解决这个问题:
$ mount -t cifs -o username="user",password="passwd" -o uid=user -o gid=usergroup -o vers=2.0 //<WinIP>/dir /path/to
如果没有任何输出,有可能已经挂载成功。可以执行 mount
命令查看挂载情况:
$ mount
参考链接: Mount CIFS Host is down