Debian虚拟机挂载群晖NFS
效果:在 docker 服务启动前挂载群晖存储,这样 docker 容器可以直接读取 nas 文件
一、准备工作
- 安装工具
apt install nfs-common
- 挂载
mount -t nfs 192.168.100.3:/volume3/nas /mnt/nas
挂载不上可能需要设置白名单,控制面板
-> 共享文件夹
-> 选择目标共享 -> 编辑
-> NFS权限
二、使用 systemd 定制挂载服务
2.1 编辑挂载
- 注意,文件名要和挂载的路径对应。例如
mnt-nas2.mount
就只能挂载/mnt/nas
,挂载/mnt/nas2
就会出错
在 systemd 里,挂载单元(.mount 文件)文件名是强绑定到挂载路径的,它会做一次“路径转义”来生成名字,如果名字和 Where= 里的路径不一致,它直接拒绝启动
vim /etc/systemd/system/mnt-nas2.mount
[Unit]
Description=Mount nas2 NFS Share
After=network-online.target
Wants=network-online.target
[Mount]
What=192.168.100.3:/volume3/nas
Where=/mnt/nas2
Type=nfs
Options=defaults,_netdev,nofail
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start mnt-nas2.mount
systemctl enable mnt-nas2.mount
2.2 修改docker启动项
systemctl edit docker.service
- 加入以下内容(文件路径
/etc/systemd/system/docker.service.d/override.conf
),路径与上面的对应
[Unit]
After=network-online.target mnt-nas2.mount
Requires=mnt-nas2.mount
-
保存并退出(nano:Ctrl+O → 回车 → Ctrl+X)
-
重新加载
systemctl daemon-reload
systemctl restart docker
2.3 验证启动顺序
systemctl show docker.service -p After -p Requires
root@Debian:~# systemctl show docker.service -p After -p Requires
Requires=docker.socket sysinit.target system.slice mnt-nas2.mount
After=firewalld.service time-set.target sysinit.target mnt-nas2.mount nss-lookup.target systemd-journald.socket containerd.service network-online.target basic.target docker.socket system.slice
看到有 mnt-nas2.mount
,证明设置成功
这样开机的时候:
-
系统先等网络就绪
-
挂载 mnt-nas2.mount
-
挂载完成后再启动 Docker
三、停止挂载
systemctl stop mnt-nas2.mount
systemd 会自动执行 umount /mnt/nas2
,只是它不会在 .mount
文件里写“停止选项”,因为 stop
就是 umount
。即 systemctl stop mnt-nas2.mount
= umount /mnt/nas2
。
如果有进程占用,可以:
umount -l /mnt/nas2
或者
sudo fuser -vm /mnt/nas2
sudo fuser -vmk /mnt/nas2 # 结束占用进程
sudo systemctl stop mnt-nas2.mount
评论区