参考

本人使用的 openwrt 为 esir 大佬编译的高大全固件。esir 的谷歌云盘

其使用 samba 插件时一直有个问题,那就是开机无法正常自动挂载,必须得再手动点击挂载才行。为了解决这个问题,我手贱升级了一下 samba 依赖(opkg update…)。

事实证明 opkg 和其他 linux 发行版的包管理逻辑不完全一样,内核版本不对就别指望着升级吧,基本就相当于摆设,特别是对于新版本 openwrt 来说。

升级过后,不仅原来的问题没有解决,就连 mount.cifs 命令都冇用了,那自然是在启动脚本中手动添加挂载命令都不行了,不过好在这个问题不仅我一个人遇到过,其他编译的版本有的也有这个问题。

解决方案就是不使用系统提供的 mount.cifs,而是使用 busybox 中的 mount, 因为这种情况下,mount.cifs 显然已经损坏了。

/etc/init.d/cifs 改为以下内容即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
START=97

ENABLED=0
WORKGROUPD=0
IOCHARSET=0
GUEST=""
USERS=""
AGM=""

cifs_header() {
local enabled
local workgroup

config_get enabled $1 enabled
config_get workgroup $1 workgroup

ENABLED=$enabled
WORKGROUPD=$workgroup
}

mount_natshare() {
local server
local name
local natpath
local guest
local users
local pwd
local agm
local iocharset
local smbver

config_get server $1 server
config_get name $1 name
config_get natpath $1 natpath
config_get guest $1 guest
config_get users $1 users
config_get pwd $1 pwd
config_get agm $1 agm
config_get iocharset $1 iocharset
config_get smbver $1 smbver

mkdir -p $natpath && chmod 777 $natpath
#echo "mount -t cifs -o vers=$smbver,user=$users,password=$pwd,iocharset=$iocharset,$agm //$server/$name $natpath"
# 原来
# mount -t cifs -o vers=$smbver,user=$users,password=$pwd,iocharset=$iocharset,$agm //$server/$name $natpath
# 现在
busybox mount -t cifs -o vers=$smbver,user=$users,password=$pwd,iocharset=$iocharset,$agm //$server/$name $natpath
}

start() {
config_load cifs
config_foreach cifs_header cifs

if [ $ENABLED == 1 ]
then {
config_foreach mount_natshare natshare
#echo "Cifs Mount succeed."
}
fi
}

stop() {
mount | grep '//' | awk -F ' ' '{print$3}' | while read line; do
#echo "umount -d -l $line"
umount -d -l $line 2>/dev/null
done
}

使用 mount.cifs 命令的时候也使用 busybox 内置的就可以了。