收起左侧

记录一次飞牛NFS共享子目录的过程(强烈建议飞牛官方赶紧开通共享子文件夹的功能)

1
回复
483
查看
[ 复制链接 ]

4

主题

1

回帖

0

牛值

江湖小虾

2025-4-4 19:18:46 显示全部楼层 阅读模式

[i=s] 本帖最后由 小康911 于 2025-4-4 19:23 编辑 [/i]<br /> <br />

<p>首先声明,我是飞牛新手哈,各位大佬莫要笑话。<br /> 先说背景:<br /> 我有个硬件数字播放器(以下简称数播),支持NAS播放,但只支持NFS协议;<br /> 我的存储路径是“存储空间2/xk”,这个是我的整个共享文件夹,已经在网页端开的SMB和WebDav;<br /> 因为这个xk文件夹很乱,里面东西很多,所以不能直接开给数播用,不然会扫到上万个音视频文件;<br /> 所以在“xk”文件夹下建立了子目录“MultiMedia”,准备把这个文件夹开放给数播。<br /> 悲催的发现,飞牛居然不支持共享子目录。<br /> 我知道最简单的方法就是在存储空间2下建立和xk同级的文件夹给nfs,但这怎能是我这个强迫症的风格?<br /> 于是首先想到软链接,果断以root登陆飞牛SSH,用ln命令在/vol2/1000下建立指向/vol2/1000/xk/MultiMedia的符号。<br /> 结果虽然在网页端文件管理中能看到刚创建的符号链接,但在共享页面的文件夹选择里还是看不到。<br /> 既然这个办法行不通,那就试试手动修改NFS协议的配置文件/etc/exports。<br /> 把末尾路径修改成/vol2/1000/xk/MultiMedia,重启NFS服务之后,数播访问正常。<br /> 正当我窃喜时,忽然发现重启飞牛之后,数播又提示无媒体,于是看了下上面的配置,居然又被改回去了。<br /> 这应该是飞牛启动的时候有进程检查了,于是干脆把飞牛映射的/fs开头的路径用ln再次指向我的文件夹,测试,依然失效。<br /> 本着“世上无难事,只要肯放弃”的原则,决定放弃网页端,自己手动搭服务。<br /> 于是在网页端关闭NFS协议,自己手动在/etc/exports末尾添加配置:<br /> /vol2/1000/xk/MultiMedia 192.168.1.0/24(ro,async,no_subtree_check)<br /> 然后先exportfs -a,再systemctl start nfs-server,结果成功。<br /> 没错,不出意外还是出意外了,重启依然失效,发现飞牛只要检测到了服务是开启的,就会按照网页端的配置强制把配置写回去。<br /> 于是一咬牙,决定写个脚本,启动之后直接写配置。<br /> 先在/home下写了个nfs.sh脚本,内容如下:<br />

!/bin/bash</p>

<p>TL="/vol2/1000/xk/MultiMedia 192.168.1.0/24(ro,async,no_subtree_check)"</p> <p>if ! grep -Fxq "$TL" /etc/exports; then<br /> echo "配置不存在,正在添加..."<br /> echo "$TL" | sudo tee -a /etc/exports > /dev/null<br /> sudo exportfs -a<br /> sudo systemctl restart nfs-server<br /> echo "操作完成"<br /> else<br /> echo "配置已存在,无需操作"<br /> fi</p> <p>先增加x权限,在终端运行测试一下没问题。<br /> 再把上面脚本全路径写入/etc/rc.local中,最后systemctl enable rc-local。<br /> 想着这回行了,重启飞牛测试,发现依然是被改回去的结局。<br /> 开始我寻思脚本没执行,于是给脚本增加日志,重启测试发现脚本是执行的,只不过脚本执行五秒钟之后,飞牛依然强制改回,好吧还是老问题。<br /> 这说明飞牛的服务要晚于rc-local启动,于是在/etc/rc.local中执行脚本的前面一行加了sleep 30。<br /> 然后重启测试,悲催的发现问题依旧,配置文件还是比我的脚本晚五秒钟被改回。<br /> 现在的我有点疯狂了,正在我想要不要用crontab设置个定时任务让脚本一分钟执行一次时,忽然灵光一现,想起了sleep是阻塞执行的。<br /> 也就是说,不管sleep多长时间,在sleep的过程中所有任务都会等候,所以我这个sleep等于没用,飞牛的服务还是在rc-local之后才执行。<br /> 于是想着能不能把sleep放到后台去等候,不阻塞前台,让启动任务该怎么执行还怎么执行,于是改/etc/rc.local如下:<br /> 修改前:<br />

!/bin/sh -e</p>

<p>sleep 30<br /> /home/nfs.sh</p> <p>exit 0<br /> 修改后:<br />

!/bin/sh -e</p>

<p>(sleep 30 && /home/nfs.sh) &</p> <p>exit 0<br /> 怀着忐忑的心情重启测试,一切正常。<br /> 悲催的折腾了半个多小时,终于问题解决。<br /> 在此强烈呼吁飞牛赶紧支持共享子文件夹吧,简直太痛苦了!</p>

收藏
送赞
分享

1

主题

5

回帖

0

牛值

江湖小虾

2025-4-5 08:21:06 显示全部楼层
大佬动手能力强大
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则