使用 Systemd 服务实现 NFS 自动挂载

引言

为了确保系统启动后 NFS 自动挂载,虽然传统的 /etc/fstab 方法仍然可用,但使用 systemd 服务可以提供更强大的网络依赖处理和故障恢复能力。笔者之前尝试使用/etc/fstab 来创建自动创建,但是因为网络原因失败后卡在命令行界面系统启动失败。

本文将详细介绍如何使用 systemd 服务创建可靠的 NFS 自动挂载解决方案。

准备工作

开始之前,请确保你具备:

  • Linux 系统的 root 或 sudo 访问权限
  • 已安装 NFS 客户端包(Debian/Ubuntu 上为 nfs-common
  • 与 NFS 服务器的网络连接

理解 systemd 挂载单元

Systemd 提供两种管理挂载的方式:

  1. 挂载单元(.mount 文件)
  2. 服务单元(.service 文件)

为了实现更高级的 NFS 设置,我们将使用服务单元来获得更多的挂载过程控制。

创建 NFS 挂载服务

让我们创建一个具有网络检查和自动重试功能的服务:

sudo nano /etc/systemd/system/nfs-data-mounts.service

添加以下内容:

[Unit]
Description=挂载所有 NFS 数据共享
Requires=network-online.target
After=network-online.target
StartLimitIntervalSec=0

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c '\
    until ping -c 1 -W 5 192.168.1.100 > /dev/null 2>&1; do \
        echo "等待 NFS 服务器可达..."; \
        exit 1; \
    done && \
    mount -t nfs server:/share /mnt/data || exit 1; \
    mount -t nfs server:/share2 /mnt/data2 || exit 1'
ExecStop=/bin/bash -c '\
    umount /mnt/data2; \
    umount /mnt/data'
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target

配置详解

让我们分析关键组件:

Unit 部分

  • Requires/After:确保在启动前网络已经在线
  • StartLimitIntervalSec=0:允许无限重试次数

Service 部分

  • Type=oneshot:服务运行一次后退出
  • RemainAfterExit=yes:成功退出后服务仍被视为活动状态
  • ExecStart:在挂载前执行 ping 检查
  • Restart=on-failure:失败时自动重试
  • RestartSec=30s:重试间隔 30 秒

激活服务

使用以下命令启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable nfs-data-mounts
sudo systemctl start nfs-data-mounts

监控和故障排除

检查服务状态:

systemctl status nfs-data-mounts

查看日志:

journalctl -u nfs-data-mounts -f
文章标题:使用 Systemd 服务实现 NFS 自动挂载
文章作者:Myron
转载链接:https://phyiscs.com/configure-systemd-nfs-automount.html
上一篇
下一篇