![自动安装(和重新安装)systemd](https://linux22.com/image/136818/%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85%EF%BC%88%E5%92%8C%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85%EF%BC%89systemd.png)
我在 fstab 中有一个 CIFS 挂载,工作正常,除非网络或远程服务器出现问题并且无法恢复。我希望共享在发生故障时自动重新安装,但据我所知,fstab 不支持此功能。
我现在所做的是将其移动到 autofs 挂载,公平地说,它运行良好,但我总是发现 autofs 挂载与 fstab 相比有点滞后(只是我在命令行上的直观感受)。有谁有其他解决方案的经验吗?
答案1
至于重新安装 中存在的安装/etc/fstab
,您可以使用此方法强制重新安装:
$ sudo mount -a -t cifs
每man mount
:
-t, --types vfstype
[...]
More than one type may be specified in a comma separated list.
The list of filesystem types can be prefixed with no to specify
the filesystem types on which no action should be taken. (This
can be meaningful with the -a option.) For example, the command:
mount -a -t nomsdos,ext
然后,您可以在 shell 脚本中进行检查,该脚本将强制mount -a -t cifs
命令根据计划时间运行,或者使用inotify
其他方法进行检查,以验证安装的状态,以及是否检测到它们已安装失败,运行mount ..
我上面提供的命令。
答案2
自动安装(和重新安装)systemd
出于本示例的目的,我们假设我们的份额是“大存储负载”
(因为它可以很好地说明systemd
文件路径和单元文件转义,大多数教程都没有涵盖)
- 创建您的挂载点:
sudo mkdir -p "/mnt/Loads o' Big-Storage" sudo chown -R "$(whoami)":"$(whoami)" "/mnt/Loads o' Big-Storage"
- 用于
systemd-escape --path
创建.mount
文件名:my_systemd_mountfile="$( systemd-escape --path "/mnt/Loads o' Big-Storage" )" echo "${my_systemd_mountfile}"
mnt-Loads\x20o\x27\x20Big\x2dStorage
/etc/system/system/
使用以下命令创建该文件文字文件路径内容(无转义)sudo vim "/etc/system/system/${my_systemd_mountfile}.mount"
[Unit] Description=My CIFs Media Mounter Requires=network-online.target After=network-online.service [Mount] What=//192.168.2.200/Loads o' Big-Storage Where=/mnt/Loads o' Big-Storage Options=username=foo-user,password=foo-secret Type=cifs [Install] WantedBy=multi-user.target EOF
- 创建对应的
.automount
文件:sudo vim "/etc/system/system/${my_systemd_mountfile}.automount"
[Unit] Description=My CIFs Media Automounter [Automount] Where=/mnt/Loads o' Big-Storage [Install] WantedBy=multi-user.target
- 加载并启用服务:
sudo systemctl daemon-reload sudo systemctl enable "${my_systemd_mountfile}".automount sudo systemctl start "${my_systemd_mountfile}".automount
故障排除
如果您遇到麻烦,journalctl
将会有比自我推荐更好的日志信息systemd status
:
sudo journalctl -xe "${my_systemd_mountfile}".mount