让openwrt自动挂载ntfs移动硬盘

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硬盘需要安装相关的包:

这些包我都不知道哪些有用哪些没用 

刚开始默认能挂载成功时貌似只有最后一个,后来出问题就装这装那装出这么多了.,

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注