如何设置 ubuntu 以便在网络连接后运行 fstab?

如何设置 ubuntu 以便在网络连接后运行 fstab?

现在

我的设置/etc/fstab如下:

//192.168.5.167/H /mnt/ssd cifs credentials=/root/.smbreds,noauto,x- systemd.automount 0 0

我希望这样设置:首先应该连接网络,然后应该挂载 fstab mount。

答案1

_netdev您可以通过在 fstab 行的选项部分中添加以下内容将此文件系统声明为网络设备,如下所示:

//192.168.5.167/H /mnt/ssd cifs credentials=/root/.smbreds,_netdev,noauto,x-systemd.automount 0 0

这将阻止系统尝试挂载该文件系统,直到系统上启用网络为止。

手册页中说明了这一点mount

_netdev

文件系统驻留在需要网络访问的设备上(用于防止系统在系统上启用网络之前尝试安装这些文件系统)。


重要的:

  • 您似乎尝试使用x-systemd.automount但没有成功。正如您在问题中发布的示例所示,您在 x-和之间添加了一个额外的空格systemd.automount,这将导致错误。如果您想在 fstab 选项中使用 systemd.automount,请像这样使用它x-systemd.automount,然后运行sudo systemctl daemon-reload并按照它sudo systemctl restart remote-fs.target
  • 我假设您明白,使用noauto您在问题中添加的示例中的选项将阻止此文件系统在启动时挂载,并且不会使用mount -a命令挂载。此文件系统只能在 fstab 行中使用此选项明确挂载。如果这不是您想要的,那么您应该删除该noauto选项。

答案2

不要与可能有效也可能无效的 systemd 假设和遗留选项作斗争,而是让您的服务和挂载目标依赖于它。

我的 SMB 共享是从 192.168.1.2 安装的,请更改为您情况下正确的值。

# /etc/systemd/system/wait-for-ping.service
[Unit]
Description=Blocks until it successfully pings 192.168.1.2
After=network-online.target

[Service]
ExecStartPre=/usr/bin/bash -c "while ! ping -c1 192.168.1.2; do sleep 1; done"
ExecStart=/usr/bin/bash -c "echo good to go"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

使用以下命令启用该服务:

sudo systemctl daemon-reload
sudo systemctl enable --now wait-for-ping.service

然后按如下方式编辑 fstab 以将其作为最终挂载选项:

x-systemd.after=wait-for-ping.service

再执行一次systemctl daemon-reload,您就可以验证挂载目标是否设置了正确的选项。我的挂载目标是/mnt/media,这会创建mnt-media.mount,因此请执行以下操作:

systemctl cat mnt-media.mount

这应该有一个像这样的标题:

# Automatically generated by systemd-fstab-generator

[Unit]
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
SourcePath=/etc/fstab
After=wait-for-ping.service

# ... rest of file follows ...

重新启动机器,你会发现你的挂载正在等待 ping 成功。

答案3

一个选项是,不要使用 /etc/fstab 中的条目,而是将以下命令添加到 /etc/rc.local:

/sbin/ifquery --all --state 2>/dev/null && /bin/mount -t cifs -o credentials=/root/.smbreds,noauto,x- 

rc.local脚本是系统启动时最后运行的脚本。

ifquery 首先检查所有自动配置的网络接口是否已启动(您可以将其更改为 ping 命令以确保您有一个有效的连接),如果为真,则挂载文件系统。

相关内容