收起左侧

挂载指定的几个文件夹到一个目录下,方便docker容器使用

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

1

主题

2

回帖

0

牛值

江湖小虾

2025-11-30 11:31:59 显示全部楼层 阅读模式

这边是很多硬盘不做raid,basic模式挂载,我这边docker容器使用很多文件夹的话,就需要在容器设置添加很多文件夹,我这边就想挂载到一个总文件夹,软链接方式 docker使用不了

我就使用了mount --bind方式挂载

我在第一个盘建了一个挂载脚本(最好不要建在系统盘目录下,启动太快,其他盘还没挂载到系统, 就执行脚本了)

一、编写挂载脚本

我脚本具体路径是这个 /vol1/1000/Docker/Videos/mount.sh

文件内容如下,各位根据自己的来,左边是你实际的路径,右边是你的挂载的目录,我这都挂载在/vol1/1000/Docker/Videos这个目录下面,右边videos后面的文件夹必须也要先创建,不然会报错

#!/bin/bash
export LANG="en_US.UTF-8"  # 强制使用 UTF-8 编码
export LC_ALL="en_US.UTF-8"
mount --bind "/vol3/1000/电影" "/vol1/1000/Docker/Videos/Movie"
mount --bind "/vol3/1000/动漫电影" "/vol1/1000/Docker/Videos/AnimeMovie"
mount --bind "/vol3/1000/国产电影" "/vol1/1000/Docker/Videos/国产电影"
mount --bind "/vol5/1000/电视剧" "/vol1/1000/Docker/Videos/TV"
mount --bind "/vol2/1000/其它视频" "/vol1/1000/Docker/Videos/Other"
mount --bind "/vol2/1000/动漫" "/vol1/1000/Docker/Videos/Anime"

然后给脚本加执行权限chmod +x /vol1/1000/Docker/Videos/mount.sh

二、创建开机执行计划

因为重启后吗挂载就失效了,所以需要创建开机启动计划,但飞牛没有这个功能,只能还是ssh进入管理了

在/etc/systemd/system/创建mount-videos.service文件,并编辑

命令如下nano /etc/systemd/system/mount-videos.service

在里面输入服务配置

如下,注意里面的vol*.mount,就是存储空间的序号,意思是等他们加载完成后再执行脚本(但是after不知道为啥时长不生效,所以有了后面一长串检测),execstart后面是执行挂载脚本 。

这下面一大串都是让脚本不要太快执行,等文件系统都加载完在执行,因为文件系统还没加载好,就执行这个脚本,就是挂载失败

[Unit]
Description=Mount Videos Script
# 关键依赖:确保在本地文件系统挂载后执行
After=vol1.mount vol6.mount  
Before=docker.service containerd.service
Requires=vol1.mount

[Service]
Type=oneshot
ExecStart=/bin/bash /vol1/1000/Docker/Videos/mount.sh
RemainAfterExit=yes
User=root
# 优化:使用 mountpoint 命令检查,最多等待30秒
ExecStartPre=/usr/local/bin/wait_for_volumes.sh
# 统一超时设置
TimeoutStartSec=40
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

在/usr/local/bin目录下创建检测硬盘脚本,检测到需要的硬盘挂载完成后 就跳出等待

命令nano /usr/local/bin/wait_for_volumes.sh

#!/bin/bash
# 等待所有指定的卷挂载
volumes=("/vol1" "/vol2" "/vol3" "/vol5" "/vol4" "/vol6" "/vol7")
for i in {1..300}; do
    all_ready=true
    for vol in "${volumes[@]}"; do
        if ! mountpoint -q "$vol"; then
            all_ready=false
            echo "Waiting for: $vol"
            break
        fi
    done
    if $all_ready; then
        echo "All volumes are mounted."
        exit 0
    fi
    sleep 0.1
done
echo "Error: Timeout waiting for volumes to mount."
exit 0

给检测脚本加执行权限chmod +x /usr/local/bin/wait_for_volumes.sh

三、docker服务启动延时

因为docker容器貌似比这个服务启动还快,导致容器执行后,emby啥的进入挂载目录 啥都没有,因为容器启动后,挂载还没执行

1、创建覆盖目录和配置文件:

mkdir -p /etc/systemd/system/docker.service.d

nano /etc/systemd/system/docker.service.d/startup-delay.conf

配置如下

[Service]

ExecStartPre=/bin/sleep 20

四、重新加载配置并启用服务

chmod 644 /etc/systemd/system/mount-videos.service

systemctl daemon-reload

systemctl enable mount-videos.service

立即启动服务进行测试

sudo systemctl start mount-videos.service

收藏
送赞 2
分享

7

主题

33

回帖

0

牛值

初出茅庐

2025-12-1 11:37:54 显示全部楼层

给力

1

主题

2

回帖

0

牛值

江湖小虾

2026-1-1 22:15:22 楼主 显示全部楼层

加了优化检测硬盘的脚本,防止部分硬盘没加载

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

本版积分规则