Linux客户端通过mfsymlinks在Samba共享创建的符号链接无法在服务器/Windows客户端使用的解决方法咨询
Linux客户端通过mfsymlinks在Samba共享创建的符号链接无法在服务器/Windows客户端使用的解决方法咨询
嘿,我之前也碰到过一模一样的问题,咱们来拆解下原因和解决办法:
首先得搞懂为啥会这样:你用mfsymlinks创建的其实不是真正的POSIX符号链接,而是Samba模拟出来的“伪软链”——它把链接信息存在文件的扩展属性里,只有开启了mfsymlinks选项的Linux客户端挂载共享时,才能识别这种模拟的链接。服务器本地和Windows客户端根本不认这种格式,自然用不了。
下面给你几个可行的解决方向:
一、创建真实的POSIX符号链接(推荐,跨端兼容性最好)
要让服务器、Linux客户端、Windows客户端都能识别,得用真实的软链,步骤如下:
- 修改Samba配置文件(一般是
/etc/samba/smb.conf),找到你对应的共享段,把mfsymlinks = yes替换成以下配置:
注:follow symlinks = yes wide links = yes unix extensions = yeswide links允许链接到共享目录外的文件,如果担心安全,可根据需求调整,但如果只是共享内的软链,这个选项是必要的。 - 保存配置后,重启Samba服务生效:
sudo systemctl restart smbd nmbd - 之后Linux客户端挂载共享时,不需要再指定
mfsymlinks选项,直接用ln -s hello.txt hello.sl创建软链就行——这时候创建的是真实的POSIX软链,服务器本地直接访问共享目录时能识别,Windows客户端也能兼容(需要满足下面的Windows设置)。
二、让服务器本地识别mfsymlinks模拟的软链
如果一定要保留mfsymlinks的方式,想让服务器本地能用,那服务器本地挂载自己的Samba共享时,也要加上mfsymlinks选项,比如:
mount -t cifs //localhost/你的共享名 /mnt/挂载点 -o username=你的用户名,password=你的密码,mfsymlinks
不过这种方式只能解决服务器本地的问题,Windows客户端还是没法识别模拟的软链,所以不推荐长期用。
三、Windows客户端的兼容设置
如果用了真实的POSIX软链,还需要给Windows做些设置才能识别:
- 开启Windows的「开发者模式」(设置->更新和安全->开发者选项),或者通过组策略开启:计算机配置->管理模板->系统->文件系统->启用跨文件系统的符号链接
- 确保访问共享的Windows用户有足够的权限(比如管理员权限,或者组策略里允许普通用户创建/访问符号链接)
额外提醒
创建真实软链时,尽量用共享内的相对路径(比如ln -s hello.txt hello.sl),不要用服务器本地的绝对路径(比如ln -s /var/share/hello.txt hello.sl),不然Windows客户端访问时可能找不到目标文件。
备注:内容来源于stack exchange,提问作者manµ




