openwrt本身是支持自动挂载移动硬盘的,如图:
但这个硬盘是NTFS格式的,默认挂载出一些怪问题,
最开始是能正常挂载的
但不知道怎么的,把分区啥啥给整损坏了,默认挂载不上,然后挂到Win上修复完完,
再挂载又不显示中文文件,真是蛋疼的很…
但使用命令手动挂载又可以成功.
所以才写了这个脚本.
将脚本放到/etc/hotplug.d/usb目录下
命名为数字开头,数字越小越优先执行,如:200-easy_auto_mount.sh
该脚本会输出系统日志,也可在终端使用命令logread -f -p audit实时监视
这个目录中的sh脚本在usb热拔插时会自动执行,按文件名前缀从小至大顺序执行…
<xmp>#!/bin/sh
# 设置要检测的设备名和挂载点
DEVICE_NAME="/dev/sdb1"
MOUNT_POINT="/usb_disk"
#判断是否已经挂载
isMounted() {
mount_output=$(mount)
if [[ "$mount_output" == *"$1"* ]]; then
return 0
else
return 1
fi
}
#判断设备文件是否存在
file_exists() {
if [ -e "$1" ]; then
return 0
else
return 1
fi
}
out_log(){
echo "$@"
logger "easy auto mount:" "$@"
return 0
}
#mount -t ntfs-3g /dev/sdb1 /usb_disk
run_cmd() {
out_log "$@"
command "$@"
return $?
}
#执行次数
run_count=0
#如果发生错误,最多重试15次.
while [ $run_count -le 15 ]; do
#if [ $run_count -gt 0 ]; then
#每次延时1秒
sleep 1
#fi
run_count=$((run_count + 1))
if file_exists $DEVICE_NAME; then
#设备存在
out_log "设备:"$DEVICE_NAME "已接入."
if ! isMounted $MOUNT_POINT; then
#没有挂载.
#如果是挂载到别的地方去了,需要卸载.
if isMounted $DEVICE_NAME; then
out_log "这个设备挂载到别处了,需要卸载..."
if ! run_cmd umount $DEVICE_NAME; then
continue
fi
fi
if ! file_exists $MOUNT_POINT; then
out_log "创建挂载点文件夹:"$MOUNT_POINT
if ! run_cmd mkdir $MOUNT_POINT; then
continue
fi
fi
out_log "开始挂载..."
if ! run_cmd mount -t ntfs-3g $DEVICE_NAME $MOUNT_POINT; then
continue
fi
out_log "挂载成功!"
else
out_log "设备:"$DEVICE_NAME",已正常挂载为:"$MOUNT_POINT ",不需要操作"
#已经挂载了.
#out_log "开始卸载..."
#if ! run_cmd umount $MOUNT_POINT; then
#continue
#fi
fi
else
out_log "设备不存在"
fi
exit 0
done
out_log "操作失败,执行超时!"
</xmp>
最后,最好将系统自动挂载中该去掉的勾去掉,否则可能会造成挂载失败,系统默认挂载会挂很久,脚本中的15秒都未必够.
如果openwrt中没有这个’挂载点’设置
需要手工去修改/etc/config/fstab文件.
另外,挂载ntfs硬盘需要安装相关的包:
这些包我都不知道哪些有用哪些没用
刚开始默认能挂载成功时貌似只有最后一个,后来出问题就装这装那装出这么多了.,
296