在 Linux 中正确安装 Windows DFS 命名空间/对象是远程的

在 Linux 中正确安装 Windows DFS 命名空间/对象是远程的

我正在努力在工作中的 Ubuntu 系统上挂载远程 CIFS 目录。远程文件夹在我的 Windows 8.1 会话中似乎运行良好(也在工作中)。

我无法正常安装工作:

$ sudo mount -v -t cifs //1.2.3.4/network ~/z -o username=malat,domain=MY,uid=$(id -u),gid=$(id -g),iocharset=utf8
Password for malat@//1.2.3.4/network:  *********
mount.cifs kernel mount options: ip=1.2.3.4,unc=\\1.2.3.4\network,iocharset=utf8,uid=1002,gid=1002,user=mmalaterre,domain=MY,pass=********
mount error(2): No such file or directory
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

但我最终偶然发现这个参考文献:

$ sudo mount -v -t cifs //1.2.3.4/network ~/z -o username=malat,domain=MY,uid=$(id -u),gid=$(id -g),iocharset=utf8,nodfs
Password for malat@//1.2.3.4/network:  *********
mount.cifs kernel mount options: ip=1.2.3.4,unc=\\1.2.3.4\network,iocharset=utf8,nodfs,uid=1002,gid=1002,user=malat,domain=MY,pass=********

至少我现在有一些工作:

$ mount | grep network
//1.2.3.4/network on /home/malat/z type cifs (rw,relatime,vers=2.1,cache=strict,username=malat,domain=MY,uid=1002,forceuid,gid=1002,forcegid,addr=1.2.3.4,file_mode=0755,dir_mode=0755,soft,nounix,nodfs,mapposix,rsize=1048576,wsize=1048576,bsize=1048576,echo_interval=60,actimeo=1)

然而,似乎有些东西不起作用(我猜与 DFS 选项有关)。以下是症状:

$ cd ~/z
$ ls
folder1 folder2
$ ls folder1
subfolder1
$ ls folder2
ls: cannot access 'folder2': Invalid argument

我可以从 Windows 8.1 会话中正常访问该文件夹folder2,因此这不是权限问题。如何folder2从我的 Linux 会话进行访问?

这是 的尾部dmesg

[1927958.534353] CIFS: Attempting to mount //1.2.3.4/network
[1927958.534403] No dialect specified on mount. Default has changed to a more secure dialect, SMB2.1 or later (e.g. SMB3), from CIFS (SMB1). To use the less secure SMB1 dialect to access old servers which do not support SMB3 (or SMB2.1) specify vers=1.0 on mount.
[1927960.069018] CIFS VFS: DFS capability contradicts DFS flag
[1927960.375111] CIFS VFS: Autodisabling the use of server inode numbers on new server.
[1927960.375115] CIFS VFS: The server doesn't seem to support them properly or the files might be on different servers (DFS).
[1927960.375117] CIFS VFS: Hardlinks will not be recognized on this mount. Consider mounting with the "noserverino" option to silence this message.

更新:如果我添加vers=1.0到 mount 命令,症状会略有不同:

$ cd ~/z
$ cd folder2
$ ls
subfolder2
$ cd subfolder2/
bash: cd: subfolder2/: Object is remote

以供参考:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 19.04
Release:        19.04
Codename:       disco

内核版本:

$ uname -rvo
5.0.0-38-generic #41-Ubuntu SMP Tue Dec 3 00:27:35 UTC 2019 GNU/Linux

$ cat /etc/request-key.d/cifs.spnego.conf
create  cifs.spnego    * * /usr/sbin/cifs.upcall %k

更新:

答案1

我终于能够在我这边调试这个问题了。我必须安装 Debian buster 系统(linux 内核 5.4.x)才能使用动态调试,因为用户级别隐藏了一条错误消息。

调试失败的 CIFS 挂载的步骤位于:

这些给了我更详细的错误日志:

[...]
[  687.037593] fs/cifs/dns_resolve.c: dns_resolve_server_name_to_ip:
unable to resolve: MYSERV13
[  687.037606] fs/cifs/cifs_dfs_ref.c: cifs_compose_mount_options:
Failed to resolve server part of //MYSERV13/network to IP: -2
[...]

这就是线索。我只需更新我resolve.conf的:

search acme.corp

到:

search acme.corp mydoma01.acme.corp

我终于能够mount -t cifs在没有nodfs选项的情况下拨打电话,而这从一开始就是个问题。

这些症状不再是错误,而只是提供信息:

$ cd subfolder2
CIFS VFS: BAD_NETWORK_NAME: \\MYSERV13\network
[...]

subfolder2我终于可以毫无问题地访问内容了。

请注意,在我的 Ubuntu 系统(Linux 内核 5.0.x)上,我必须为 CIFS 指定一个显式版本才能使上述工作正常运行 ( vers=1.0)。

参考:

答案2

目前我发现的唯一解决方法是使用DFS Referral list.因此,从我的窗口框中导航到有问题的subfolder2(符号链接图标),右键单击获取属性:

DFS推荐名单

然后返回到我的 Linux 会话,并使用以下命令进行挂载:

$ sudo mount -t cifs //xyzclus01-cifs.mydoma.acme.corp/Disk12 ~/disk12 -v -o username=malat,domain=MY,uid=$(id -u),gid=$(id -g),iocharset=utf8,nodfs,vers=1.0
Password for malat@//xyzclus01-cifs.mydoma.acme.corp/Disk12:  *********
mount.cifs kernel mount options: ip=5.6.7.8,unc=\\xyzclus01-cifs.mydoma.acme.corp\Disk12,iocharset=utf8,nodfs,vers=1.0,uid=1002,gid=1002,user=malat,domain=MY,pass=********

我(终于!)可以访问 的内容了subfolder2。这是相当麻烦且违反直觉的。因此,这充其量只是一种解决方法,而不是真正的解决方案。

相关内容