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