从 Fritz 路由器安装 CIFS SMB 网络驱动器时出现过时的文件处理程序

atl*_*fed 4 mount samba cifs smb

使用最新的 Ubuntu 服务器:Ubuntu 20.04.1 LTS 我能够使用以下命令从本地 Fritz Box 路由器成功挂载 SMB 共享卷:

mount -t cifs //fritz.box/fritz.nas/wd -o rw,vers=3,username=user,password=password,workgroup=WORKGROUP
Run Code Online (Sandbox Code Playgroud)

挂载点的权限:

drwxr-xr-x 2 root    root   
Run Code Online (Sandbox Code Playgroud)

安装后复制到驱动器的测试文件的权限:

-rwxr-xr-x 1 root    root       4 Aug  7 13:05  test.txt
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试查看文件的内容时:

test.txt: Stale file handle
Run Code Online (Sandbox Code Playgroud)

编辑还说[权限被拒绝]

尝试读取文件后 DMESG 输出:

[14540.364844] CIFS VFS: bogus file nlink value 0
Run Code Online (Sandbox Code Playgroud)

我尝试了各种权限、用户、安装选项和不同的 CIFS 版本,但结果都相同。

我无法恢复到 SMBv1,因为共享不支持它。

共享安装在其他系统(例如 MacOSX)上没有问题,并且我可以读/写。

atl*_*fed 7

最终我找到了这个德语页面:

https://debianforum.de/forum/viewtopic.php?t=176154

解决办法是添加参数noserverino:

mount -t cifs //fritz.box/fritz.nas/wd -o rw,noserverino,username=user,password=password,workgroup=WORKGROUP
Run Code Online (Sandbox Code Playgroud)

来自 man mount.cifs:

客户端自己生成 inode 编号,而不是使用服务器中的实际编号。

使用指定用户在 /etc/fstab 中完全挂载命令:

//fritz.box/fritz.nas/wd   /home/user/wd    cifs  rw,noserverino,username=user,password=password,uid=user,gid=user,workgroup=WORKGROUP 0 0
Run Code Online (Sandbox Code Playgroud)

确保安装点所有者已设置:

chown user:user /home/user/wd/
Run Code Online (Sandbox Code Playgroud)