0

0

systemd mount "timeout" 但手动 mount 成功的 _netdev + Requires=network-online.target

舞夢輝影

舞夢輝影

发布时间:2026-02-05 18:37:14

|

991人浏览过

|

来源于php中文网

原创

\_netdev 不足以防止挂载超时,因其仅延迟挂载至网络设备就绪,不检测远端存储服务可达性;需通过自定义健康检查 service 显式依赖远端可用性。

systemd mount \

服务启动时 systemdmount timeout,但手动执行 mount -a 立即成功,问题大概率出在依赖顺序和网络就绪判定上——_netdev 只影响挂载时机(延迟到网络设备存在),并不保证远端服务(如 NFS、CIFS)已可连通;而 Requires=network-online.target 在多数发行版中默认由 systemd-networkd-wait-online.serviceNetworkManager-wait-online.service 实现,但它们只确认“网络配置完成”,不探测远端存储是否响应。

为什么 _netdev 不足以防止 timeout

_netdev 是 fstab 标志,被 systemd-fstab-generator 转为 Wants=network.targetAfter=network.target,仅确保网卡已注册、IP 已配好,不等待 NFS 服务器可达或 SMB 共享可枚举。若远端服务启动慢、防火墙未开、DNS 解析卡顿,mount.nfs 就会在默认 60 秒内超时。

  • _netdev 不触发任何网络连通性检测,它只是个“延迟挂载”的开关
  • 实际挂载命令仍由 systemd-mountmount 执行,超时由底层工具(如 nfs-utilstimeo= 参数)控制
  • 即使加了 Requires=network-online.target,若 network-online.target 过早进入 active 状态(例如 NetworkManager 认为 DHCP 完成就算 online),远端依然不可达

如何让 mount 真正等远端就绪

必须把“远端存储可用”显式建模为一个 systemd 依赖单元,不能只靠网络层信号。常见做法是加一层轻量健康检查。

ClipSketch AI
ClipSketch AI

将视频瞬间转化为手绘故事

下载
  • 写一个 ExecStart=/usr/bin/sh -c 'until ping -c1 -w3 server.example.com &>/dev/null || nc -z server.example.com 2049 &>/dev/null; do sleep 2; done'oneshot service,设 WantedBy=multi-user.target,再让 mount unit Requires=storage-online.serviceAfter=storage-online.service
  • 对 NFS,直接在 fstab 中加 soft,timeo=600,retrans=3(避免单次请求卡死);对 CIFS,用 sec=ntlmssp,iocharset=utf8,vers=3.0 并配 credentials=/etc/samba/creds 避免交互式认证阻塞
  • 禁用 systemd-networkd-wait-online.service(若不用 systemd-networkd),改用更可靠的等待逻辑,否则它可能 5 秒就返回 success,完全没意义

fstab 条目与对应 .mount 单元的常见错配

systemd 会为每行 fstab 自动生成 xxx.mount 单元,但自动生成的依赖可能覆盖手动设置。比如你写了 Requires=network-online.target,但生成器又加了 Conflicts=umount.target 或错误的 Before=,导致实际启动顺序混乱。

  • 运行 systemctl cat mnt-data.mount 查看真实 unit 内容,确认 Requires=After= 是否符合预期
  • 若需精确控制,建议禁用自动生成:systemctl mask proc-sys-fs-binfmt_misc.automount(非必需),改用手工写的 /etc/systemd/system/mnt-data.mount
  • 手工 unit 中必须包含 [Mount] 段的 What=Where=Type=,且 Where= 必须与挂载点路径完全一致(含尾部斜杠与否),否则 unit 不生效

真正卡住的往往不是“有没有网”,而是“远端服务是不是已经监听并接受连接”。别迷信 network-online.target,它连本机防火墙放行都没管。加一层简单探测,比调 timeout 参数更治本。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

238

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

580

2024.03.01

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

4

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

8

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

9

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

17

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

java 抽象方法
java 抽象方法

本专题整合了java抽象方法定义、作用教程等内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux网络安全之防火墙技术汇总
Linux网络安全之防火墙技术汇总

共31课时 | 3.1万人学习

React 教程
React 教程

共58课时 | 4.7万人学习

Pandas 教程
Pandas 教程

共15课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号