收起左侧

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

0
回复
57
查看
[ 复制链接 ]

0

主题

0

回帖

0

牛值

江湖小虾

我这边是很多硬盘不做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"

二、创建开机执行计划

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

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

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

在里面输入服务配置

如下,注意里面的vol*.mount,就是存储空间的序号,我这里vol1就是脚本的空间,vol6是我最后一个盘的目录,execstart后面是执行脚本 。

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

下面的配置可能有多余的,改了好几次配置,老是启动太快,导致没挂上,这个就可以了,各位如果可以给出优化,更好。

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

[Service]
Type=oneshot
ExecStart=/bin/bash /vol1/1000/Docker/Videos/mount.sh
RemainAfterExit=yes
User=root
# 添加超时等待,最多等待10秒
ExecStartPre=/bin/bash -c 'count=0; until [ -d /vol1 ] || [ $count -eq 100 ]; do sleep 0.1; count=$((count+1)); done'
ExecStartPre=/bin/bash -c 'count=0; until [ -d /vol6 ] || [ $count -eq 100 ]; do sleep 0.1; count=$((count+1)); done'
# 如果等待超时,则退出并失败
ExecStartPre=/bin/bash -c '[ -d /vol1 ]'
ExecStartPre=/bin/bash -c '[ -d /vol6 ]'
# 设置启动超时
TimeoutStartSec=15
Restart=on-failure
RestartSec=5

[Install]
WantedBy=sysinit.target

三、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

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则