如果你希望通过一个自定义脚本来实现挂载,并使用 systemd 服务来管理这个脚本,可以按照以下步骤操作。这种方法更加灵活,适合需要在挂载前后执行额外操作的情况
步骤 1:创建挂载脚本
创建脚本文件:
在 /usr/local/bin/ 目录下创建一个挂载脚本,例如 mount_nfs.sh:
sudo vim /usr/local/bin/mount_nfs.sh
编写脚本内容:
在脚本中添加挂载命令和其他需要的操作。例如:
#!/bin/bash
# 定义 NFS 服务器和共享目录
NFS_SERVER="192.168.1.100"
SHARE_DIR="/shared"
MOUNT_POINT="/mnt/nfs"
# 检查挂载点是否存在
if [ ! -d "$MOUNT_POINT" ]; then
echo "挂载点 $MOUNT_POINT 不存在,正在创建..."
sudo mkdir -p "$MOUNT_POINT"
fi
# 挂载 NFS 共享
echo "正在挂载 $NFS_SERVER:$SHARE_DIR 到 $MOUNT_POINT..."
sudo mount -t nfs -o nolock,vers=3 "$NFS_SERVER:$SHARE_DIR" "$MOUNT_POINT"
# 检查挂载是否成功
if mount | grep "$MOUNT_POINT" > /dev/null; then
echo "挂载成功!"
else
echo "挂载失败!"
exit 1
fi
赋予脚本执行权限:
sudo chmod +x /usr/local/bin/mount_nfs.sh
步骤 2:创建 systemd 服务
创建服务文件:
在 /etc/systemd/system/ 目录下创建一个服务文件,例如 mount_nfs.service:
sudo vim /etc/systemd/system/mount_nfs.service
编写服务内容:
在服务文件中添加以下内容:
[Unit]
Description=Mount NFS Share via Script
Requires=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mount_nfs.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
ExecStart:指定要运行的脚本路径。
Restart=on-failure:如果挂载失败,自动重试。
RestartSec=5:重试间隔为 5 秒。
保存并退出。
步骤 3:启用并启动服务
重新加载 systemd 配置:
sudo systemctl daemon-reload
启用服务:
sudo systemctl enable mount_nfs.service
启动服务:
sudo systemctl start mount_nfs.service
检查服务状态:
sudo systemctl status mount_nfs.service
如果服务运行正常,你会看到类似以下的输出:
● mount_nfs.service - Mount NFS Share via Script
Loaded: loaded (/etc/systemd/system/mount_nfs.service; enabled; vendor preset: enabled)
Active: active (running) since ...
步骤 4:测试挂载
检查挂载点:
运行以下命令查看挂载是否成功:
df -h
mount | grep nfs
验证文件访问:
尝试访问挂载点目录,例如:
ls /mnt/nfs
步骤 5:重启系统验证
重启系统后,检查挂载点是否自动挂载:
sudo reboot
重启后,运行以下命令验证:
df -h | grep nfs
注意事项
脚本调试:
如果挂载失败,可以手动运行脚本调试:
sudo /usr/local/bin/mount_nfs.sh
日志查看:
如果服务运行失败,可以通过以下命令查看日志:
journalctl -u mount_nfs.service
卸载脚本:
如果需要卸载挂载点,可以创建一个类似的卸载脚本,并在服务中通过 ExecStop 调用。
通过以上步骤,你可以使用自定义脚本和 systemd 服务来实现自动挂载。这种方法非常适合需要复杂挂载逻辑的场景。