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