收起左侧

挂载windows共享目录作为飞牛相册的备份地址

2
回复
138
查看
[ 复制链接 ]

0

主题

2

回帖

0

牛值

江湖小虾

  1. 创建一个包含命令的脚本
  2. 创建一个 systemd 服务单元,告诉系统在启动时运行这个脚本,脚本内容为对windows宿主机SMB共享文件夹的映射
  3. 为什么不用官方文件中的远程挂载?因为官方远程挂载目前不支持将远程目录作为相册的备份地址!!!
  4. 所有操作需要使用管理员账户通过ssh登录(或者你等登录shell的任意工具,具体操作自行度娘。

🚀 第1步:创建挂载脚本

将创建一个脚本,它会智能地等待,直到 Windows 主机 (我的IP是 192.168.3.87) 真正联网可访问后,再执行挂载,对于任何挂载失败的命令,它都会自动重试几次

  1. 创建一个新脚本文件:
    sudo nano /usr/local/bin/automount_cifs.sh
  1. 将以下所有内容复制并粘贴到该文件中。

    #!/bin/bash
    
    # --- 配置 ---
    REMOTE_HOST="192.168.3.87"  #这是我的IP,替换成你的
    COMMON_OPTS="username='windows宿主机用户名‘,password='windows宿主机密码',file_mode=0777,dir_mode=0777,gid=1001"
    MAX_RETRIES=5 # 最大重试次数
    RETRY_WAIT=3  # 每次重试前等待3秒
    
    # --- 1. 等待主机上线 ---
    echo "Waiting for host ${REMOTE_HOST} to come online..."
    while ! ping -c 1 ${REMOTE_HOST} &>/dev/null
    do
        sleep 5
    done
    echo "Host ${REMOTE_HOST} is online. Proceeding with mounts."
    
    # --- 2. 定义一个通用的挂载函数(带重试功能) ---
    # 用法: mount_share "远程共享名" "本地挂载点" "特定uid"
    mount_share() {
        local share_name=$1
        local mount_point=$2
        local uid_opt=$3
    
        # 检查是否已挂载
        if mountpoint -q "${mount_point}"; then
            echo "${mount_point} is already mounted."
            return 0
        fi
    
        echo "Attempting to mount //${REMOTE_HOST}/${share_name} to ${mount_point}..."
    
        local i=1
        while [ $i -le $MAX_RETRIES ]; do
            # 尝试挂载
            mount -t cifs "//${REMOTE_HOST}/${share_name}" "${mount_point}" -o ${COMMON_OPTS},${uid_opt}
    
            # 检查是否成功
            if [ $? -eq 0 ]; then
                echo "Mount successful for ${mount_point}."
                return 0
            fi
    
            # 如果失败
            echo "Mount failed (Attempt ${i}/${MAX_RETRIES}). Retrying in ${RETRY_WAIT}s..."
            sleep ${RETRY_WAIT}
            i=$((i+1))
        done
    
        echo "Gave up mounting ${mount_point} after ${MAX_RETRIES} attempts."
        return 1
    }
    
    # --- 3. 执行所有挂载 ---
    mount_share "H"          "/vol1/1000/WIN-H"  "uid=1000"
    
    #这里H是我在windows共享文件夹的名称,/vol1/1000/WIN-H是我在飞牛设备里面需要挂载H盘的位置
    
    echo "All mount **s finished."
    exit 0
    
  2. 保存并退出 (在 nano 中, 按 Ctrl+O 保存, Ctrl+X 退出)。

  3. 给这个脚本添加执行权限

        sudo chmod +x /usr/local/bin/automount_cifs.sh
    

🚀 第2步:创建 systemd 服务

现在创建一个服务文件,告诉 systemd 在开机时运行这个脚本。

  1. 创建新的 systemd 服务文件:

        sudo nano /etc/systemd/system/automount-cifs.service
    
  2. 将以下所有内容复制并粘贴到该文件中:

        [Unit]
        Description=Mount custom CIFS network shares
        # 它要求网络必须就绪后才能运行
        Wants=network-online.target
        After=network-online.target
    
        [Service]
        Type=oneshot
        RemainAfterExit=true
        # 执行我们刚才创建的脚本
        ExecStart=/usr/local/bin/automount_cifs.sh
    
        [Install]
        # 表明这个服务应该在“多用户模式”(即正常启动)时被启动
        WantedBy=multi-user.target
    
  3. 保存并退出 (在 nano 中, 按 Ctrl+O 保存, Ctrl+X 退出)。

🚀 第3步:启用并测试服务

  1. 重新加载 systemd,让它读取到您的新服务文件:

        sudo systemctl daemon-reload
    
  2. 启用 (Enable) 服务,让它开机自启:

        sudo systemctl enable automount-cifs.service
    

3.. 重启飞牛设备,或者运行 sudo systemctl restart automount-cifs.service 来立即测试新脚本。

收藏
送赞
分享

0

主题

2

回帖

0

牛值

江湖小虾

3 天前 楼主 显示全部楼层

最终效果如下,代码中的将你windows宿主机的相册文件夹,直接映射到飞牛的photos即可,
212f364e-453e-450f-8a2a-3731341cccc8.jpg
图片.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1

主题

9

回帖

0

牛值

江湖小虾

改天试一下。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则