通过 cifs 挂载 DFS 共享时 DFS-Link 失败

通过 cifs 挂载 DFS 共享时 DFS-Link 失败

我正在尝试通过 cifs 挂载 DFS 共享。份额是这样建立的:

\\mydomain.local\Files是DFS共享。
我可以成功挂载此共享,如下所示:

# mount -t cifs //mydomain.local/Files ~/fileserver -o username=myuser,domain=mydomain.local,password=hunter2

之后我可以按照我的预期遍历 ~/fileserver 中的目录。

# ls ~/fileserver
folder1 folder2

然而,当我尝试 cd 进入folder1 时,出现错误:

# cd folder1
cd: folder1: No such file or directory

错误出现之前需要一两秒的时间。
我认为这是因为folder1是到另一个文件服务器的DFS链接,它链接到: \\fileserver2.mydomain.local\Fileshare$\somedirectory\folder1

现在我在这之后查看了 dmesg:

# dmesg
CIFS: Attempting to mount //fileserver2.mydomain.local/Fileshare/somedirectory/folder1
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.
FS-Cache: Duplicate cookie detected
FS-Cache: O-cookie c=0000000088cf85cb [p=00000000a52bce0c fl=222 nc=0 na=1]
FS-Cache: O-cookie d=00000000ff7a58d3 n=000000005109413d
FS-Cache: O-key=[5] '46696c6573'
FS-Cache: N-cookie c=00000000c39f9d7a [p=00000000a52bce0c fl=2 nc=0 na=1]
FS-Cache: N-cookie d=00000000ff7a58d3 n=00000000930f66cf
FS-Cache: N-key=[5] '46696c6573'
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.
FS-Cache: Duplicate cookie detected
FS-Cache: O-cookie c=0000000088cf85cb [p=00000000a52bce0c fl=222 nc=0 na=1]
FS-Cache: O-cookie d=00000000ff7a58d3 n=000000005109413d
FS-Cache: O-key=[5] '46696c6573'
FS-Cache: N-cookie c=000000007c6a3385 [p=00000000a52bce0c fl=2 nc=0 na=1]
FS-Cache: N-cookie d=00000000ff7a58d3 n=00000000f006535b
FS-Cache: N-key=[5] '46696c6573'
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.
CIFS VFS: \\fileserver2.mydomain.local cannot query dirs between root and final path, enabling CIFS_MOUNT_USE_PREFIX_PATH
CIFS VFS: Autodisabling the use of server inode numbers on new server.
CIFS VFS: The server doesn't seem to support them properly or the files might be on different servers (DFS).
CIFS VFS: Hardlinks will not be recognized on this mount. Consider mounting with the "noserverino" option to silence this message.
CIFS VFS: cifs_read_super: get root inode failed

我相信“无法查询根路径和最终路径之间的目录”似乎是实际问题,因为我无权直接挂载 ShareFileshare$somedirectory,而只能挂载folder1.我也可以直接将此共享挂载到 fileserver2 上,但由于 DFS 上有许多指向另一台服务器的链接,因此我必须挂载大量内容。

我很幸运能够使用高级帐户尝试安装访问两者Fileshare$,并且somedirectory当我使用该用户而不是“myuser”安装它时,我可以访问folder1:

# mount -t cifs //mydomain.local/Files ~/fileserver -o username=adminuser,domain=mydomain.local,password=hunter2
# ls ~/fileserver/folder1
file1 file2 file3

但我无法使用此提升的帐户进行日常工作 - 而且,我无法更改 DFS 共享或文件服务器上的权限。

有趣的是 smbclient 可以通过以下方式进行遍历myuser

# smbclient '\\mydomain.local\Files' -U '[email protected]'
# smb: \> ls folder1
.
..
file1
file2
file3

我尝试了很多不同的安装选项(主要是在绝望中):

vers=1.0
vers=3.0
noserverino
sec=ntlmv2
sec=ntlmssp

有人知道我还可以尝试什么吗?

顺便说一句,DFS 共享位于 Windows 服务器上。

答案1

当尝试连接到与 DFS 分发的主要共享路径不同的共享时,我看到了类似的效果。

这让我猜测,内核安装不会识别“目标提示”。

示例:提供的共享指向\\ad.example.com\dir1不同服务器中的真实共享\\server1.ad.example.com\dir1

挂载命令

mount -t cifs //ad.example.com/dir1 /mnt

导致 /mnt 中的内容可访问

另一方面,有\\ad.example.com\upperdir 一个带有子目录“dir2”的共享,它也指向不同服务器中的真实共享\\server2.ad.example.com\dir2

如果现在使用命令

mount -t cifs //ad.example.com/upperdir /mnt

我可以在“/mnt”中看到子目录“dir2”,但是当尝试访问它时,我得到与 jaffex 描述的相同的错误(没有这样的文件或目录)。

这只发生在我的 ubuntu 20.04 机器上,未使用内核版本 5.4.0。在内核 4.15.0 的 ubuntu 18.04 上进行相同的组合甚至可以使第二部分正常工作。查看“/proc/fs/cifs/dfscache”,我可以看到服务器可能提供要使用的正确共享:

cache entry: path=\ad.example.com\upperdir\dir2,type=link,ttl=1800,etime=779521798,interlink=no,path_consumed=31,expired=yes
\server2.ad.example.com\dir2 (target hint)

因此我猜测 cifs 内核模块中的某些内容在新内核中的工作方式有所不同

相关内容