我正在努力在工作中的 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
我可以folder2
从我的 Windows 8.1 会话中很好地访问该文件夹,所以这不是权限问题。如何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
更新:
目前,我发现的唯一解决方法是使用
DFS Referral list
. 因此,从我的 Windows 框中,我导航到有问题的subfolder2
(符号链接图标),右键单击获取属性:然后回到我的 Linux 会话,并改为使用:
我可以(终于!)访问
subfolder2
. 这是相当麻烦和违反直觉的。因此,这充其量只能作为解决方法,而不是真正的解决方案。我终于能够调试我这边的问题。我必须安装一个 Debian buster 系统(linux 内核 5.4.x)才能使用动态调试,因为用户级别隐藏了一条错误消息。
调试失败的 CIFS 挂载的步骤如下:
这些给了我更详细的错误日志:
这就是线索。我只需要更新我
resolve.conf
的:至:
我终于能够在
mount -t cifs
没有nodfs
选项的情况下打电话,这从一开始就是问题所在。症状不再是错误,而是简单的信息:
我终于可以
subfolder2
毫无问题地访问内容了。请注意,在我的 Ubuntu 系统(Linux 内核 5.0.x)上,我必须为 CIFS 指定一个显式版本才能使上述工作(
vers=1.0
)。参考: