smi*_*-on 8 samba symlink cifs
如果 SMB 共享具有带绝对路径的符号链接,/share/latest/dir -> /share/data/201407
则 Windows 客户端可以毫无问题地通过链接访问文件。
dir \\smbserver\share\latest\dir\
Directory: \\smbserver\share\latest\dir\
file a ...
Run Code Online (Sandbox Code Playgroud)
但是 unix 客户端在相同共享的 cifs 挂载上出现错误。
ls /mnt/share/latest/dir/
/mnt/share/latest/dir/ : No such file or directory
Run Code Online (Sandbox Code Playgroud)
为什么 Samba 挂载不遵循符号链接?如何获得 CIFS 挂载以跟踪符号链接?
问题是 SAMBA 服务器内置了对 unix (cifs) 客户端的特殊支持。当您在 linux 主机上使用 mount -t cifs 时,所有符号链接都会按原样传递给您(cifs 客户端)。
ls /mnt/share/latest/dir/ -l
/mnt/share/latest/dir/ -> /opt/share/data/201407
Run Code Online (Sandbox Code Playgroud)
您可能不喜欢此功能,但这是一个有其优点的设计决策,ea 不是错误,而是一个功能!:) 但有解决办法:
1)将共享目录中的绝对符号链接替换为相对符号链接。
smbserver:~> ln -s ../../data/201407 /opt/share/latest/dir
Run Code Online (Sandbox Code Playgroud)
2) 在 SAMBA 服务器上禁用对 UNIX 客户端的特殊支持。如果unix extensions参数设置为“no”,则 Windows 和 Linux 客户端将获得相同的结果。
smbserver:~# vi /etc/samba/smb.conf
[global]
unix extensions = No
smbserver:~# restart smbd
Run Code Online (Sandbox Code Playgroud)
3) 在您的 SAMBA 客户端上禁用对 UNIX 的特殊支持。挂载共享时使用nounix选项。nounix 选项禁用 CIFS Unix 扩展,以便不使用 UNIX ACL、节点 ID 和锁。
client:~$ sudo mount -t cifs -o nounix //smbserver/share /mnt
Run Code Online (Sandbox Code Playgroud)