openwrt网络共享调整

本文详细介绍了如何在Nanopi设备上,基于OpenWrt固件配置家用网盘,通过取消自动挂载和共享来实现仅共享指定硬盘。通过自定义脚本,解决了OpenWrt系统自动共享额外硬盘的问题,确保只共享所需目录,并在`rc.local`中加入执行以保持设置。
摘要由CSDN通过智能技术生成

新入手一个nanopi,用于做家用网盘,设置为旁路由,启用了网络共享,外接了2个USB硬盘。没有使用raid,对实时性要求没那么高,计划用一块硬盘共享出来做局域网共享盘,另一个做备份即可。

备份方式直接使用 rsync

设置计划任务

rsync --update -av /mnt/sda1/ mnt/sdb1

隔几天早上执行即可。

重点来了,nanopi的固件基于openwrt,系统启动的时候,自动挂载了外接的两个u盘,并自动共享了两个盘的目录,还不止如此,还共享了sd卡的文件系统

/mnt/sda1

/mnt/sdb1

/mnt/mmcblk1p1

需求是,只需要共享/mnt/sda1,不需要其他的。

可是,在openwrt的web界面设置,或者直接在/etc/config/samba4文件中修改,只要系统重启,就会恢复成上述3个共享目录。

折腾了半天,最后发现固件中对于u盘的处理逻辑是 只要u盘有效,就自动mount,同时自动设置samba共享,代码在

/etc/hotplug.d/block

目录下,有个

20-smb

文件,注释中是 D-team ...Shenzhen...,猜测是nanopi固件的开发团队。

处理办法

在系统启动后,把已经共享的多余的目录去掉

首先,新建一个脚本

#!/bin/sh

INPF=/etc/config/samba4
TMPF=/tmp/samba4fix
cp -f $INPF ${TMPF}0
line=$(grep -nm1 "option name 'sdb1'" $INPF | cut -d: -f1) && [[ $line =~ '^[0-9]+$' ]] && sed "$((line-2)),$((line+6))d" $INPF > $TMPF || cp -f $INPF $TMPF
line=$(grep -nm1 "option name 'mmcblk1p1'" $TMPF | cut -d: -f1) && [[ $line =~ '^[0-9]+$' ]]&& sed "$((line-2)),$((line+6))d" $TMPF > ${TMPF}1 || cp -f $TMPF ${TMPF}1 
cp -f ${TMPF}1 $INPF
/etc/init.d/samba4 reload

解释一下,

原始配置文件 /etc/config/samba4是由hotplug中的脚本自动更新的,系统启动完成以后,文件内容为:

config 'samba'
	option 'name' 'OpenWrt'
	option 'workgroup' 'OpenWrt'
	option 'description' 'Samba on OpenWrt'
	option 'charset' 'UTF-8'
	option 'homes' '0'
	option 'interface' 'loopback lan'
config 'sambashare'
	option 'name' 'sda1'
	option 'path' '/mnt/sda1'

                 ..... 有几个共享,就有几段 config 'sambashare'

新建脚本的目的是,将多余的 sambashare段落删除,并重新装入smb服务即可

删除匹配字符串前后几行

 这一句比较实用,

line=$(grep -nm1 "option name 'sdb1'" $INPF | cut -d: -f1) && [[ $line =~ '^[0-9]+$' ]] && sed "$((line-2)),$((line+6))d" $INPF > $TMPF || cp -f $INPF $TMPF

 分为2段,

第一段定义变量 line,查找第一个匹配的行数,如果找到 line为行数数字,否则为空,grep的参数:n是行数,m1是第一个匹配 ;cut的目的是把冒号前的数字取出来

第二段是个逻辑分支

 如果  [[ $line =~ '^[0-9]+$' ]] 为真,意思是line变量是数字

则执行 && 后面的

sed "$((line-2)),$((line+6))d" $INPF > $TMPF 

将行数之前2行到之后6行删除,即删除 sambashare整段

否则执行 || 后面的

cp -f ... 直接复制

这样处理之后,最后执行

/etc/init.d/samba4 reload

就达到了去掉不需要的共享目录的目的。

最后在rc.local中加上自动执行

在rc.local中加一句 sleep 60 && xxxx.sh 

至于延后60秒,是等系统自动挂载和自动共享完成之后,多少秒合理视具体配置情况。确实有点简单粗暴,但是对付简单粗暴的无脑强制共享,也算是可用  😊。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值