暗影翔 发表于 2024-3-30 22:00

[Arch求助]如何实现启动自动挂载nfs

本人只是闲来瞎折腾的非超能力者,瞎折腾linux。
有一台aib的服务器,运行omv系统共享nfs。原先大奶使用manjaro,在fstab里设置可以挂载服务器里的资源,在dolphin里点一下远程位置里的挂载文件夹即可访问。
后来折腾把manjaro换成了arch,依然是在fstab里设置,但是启动时可以看到mount failed的日志。通过
journalctl -b | grep mount
查询到在执行mount.nfs时,网络不可达。
mount: mount.nfs: Network is unreachable for 192.168.0.105:/export on /mnt
但是fstab里
192.168.0.105:/export   /mnt            nfs             defaults,timeo=900,retrans=5,_netdev            0 0
根据wiki上的介绍_netdev表示在告知系统在网络启动后再挂载。
通过查询日志
3月 30 21:18:51 Main-PC kernel: mlx4_en: eth0: Link Up
3月 30 21:18:51 Main-PC kernel: NFS: Registering the id_resolver key type
3月 30 21:18:51 Main-PC kernel: Key type id_resolver registered
3月 30 21:18:51 Main-PC kernel: Key type id_legacy registered
3月 30 21:18:51 Main-PC mount: mount.nfs: Network is unreachable for 192.168.0.105:/export on /mnt
3月 30 21:18:51 Main-PC systemd: mnt.mount: Mount process exited, code=exited, status=32/n/a
3月 30 21:18:51 Main-PC systemd: mnt.mount: Failed with result 'exit-code'.
3月 30 21:18:51 Main-PC systemd: Failed to mount /mnt.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/video.
3月 30 21:18:51 Main-PC systemd: Dependency failed for Remote File Systems.
3月 30 21:18:51 Main-PC systemd: remote-fs.target: Job remote-fs.target/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: mnt-video.mount: Job mnt-video.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/download.
3月 30 21:18:51 Main-PC systemd: mnt-download.mount: Job mnt-download.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/Music.
3月 30 21:18:51 Main-PC systemd: mnt-Music.mount: Job mnt-Music.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/photo.
3月 30 21:18:51 Main-PC systemd: mnt-photo.mount: Job mnt-photo.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/PT.
3月 30 21:18:51 Main-PC systemd: mnt-PT.mount: Job mnt-PT.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC systemd: Dependency failed for /mnt/winstorge.
3月 30 21:18:51 Main-PC systemd: mnt-winstorge.mount: Job mnt-winstorge.mount/start failed with result 'dependency'.
3月 30 21:18:51 Main-PC kernel: <mlx4_ib> mlx4_ib_probe: mlx4_ib: Mellanox ConnectX InfiniBand driver v4.0-0
3月 30 21:18:51 Main-PC systemd: TPM2 PCR Barrier (User) was skipped because of an unmet condition check (ConditionSecurity=measured-uki).
3月 30 21:18:51 Main-PC kernel: <mlx4_ib> mlx4_ib_probe: counter index 1 for port 1 allocated 1
3月 30 21:18:51 Main-PC kernel: mlx4_core 0000:0c:00.0 enp12s0: renamed from eth0
3月 30 21:18:51 Main-PC systemd: Starting Permit User Sessions...
3月 30 21:18:51 Main-PC systemd: Finished Permit User Sessions.
3月 30 21:18:51 Main-PC systemd: Reached target Multi-User System.
3月 30 21:18:51 Main-PC systemd: Started Simple Desktop Display Manager.
3月 30 21:18:51 Main-PC systemd: Reached target Graphical Interface.
3月 30 21:18:51 Main-PC systemd: Startup finished in 18.052s (firmware) + 7.552s (loader) + 6.305s (kernel) + 8.001s (userspace) = 39.911s.
3月 30 21:18:51 Main-PC NetworkManager: <info> device (eth0): interface index 3 renamed iface from 'eth0' to 'enp12s0'
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external')
3月 30 21:18:51 Main-PC kernel: mlx4_en: enp12s0: Steering Mode 1
3月 30 21:18:51 Main-PC kernel: mlx4_en: enp12s0: Link Up
3月 30 21:18:51 Main-PC NetworkManager: <info> settings: (enp12s0): created default wired connection 'Wired connection 2'
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): carrier: link connected
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: unavailable -> disconnected (reason 'carrier-changed', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> policy: auto-activating connection 'Wired connection 2' (11e70bbe-e8f7-3b41-bc80-cd0b2a20ba79)
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): Activation: starting connection 'Wired connection 2' (11e70bbe-e8f7-3b41-bc80-cd0b2a20ba79)
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> manager: NetworkManager state is now CONNECTING
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: prepare -> config (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: config -> ip-config (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> dhcp4 (enp12s0): activation: beginning transaction (timeout in 45 seconds)
3月 30 21:18:51 Main-PC sddm: Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
                                    Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
                                    If this causes problems, reconfigure your locale. See the locale(1) manual
                                    for more information.
3月 30 21:18:51 Main-PC NetworkManager: <info> dhcp4 (enp12s0): state changed new lease, address=192.168.0.101, acd pending
3月 30 21:18:51 Main-PC sddm: Initializing...
3月 30 21:18:51 Main-PC sddm: Starting...
3月 30 21:18:51 Main-PC sddm: Logind interface found
3月 30 21:18:51 Main-PC sddm: Adding new display...
3月 30 21:18:51 Main-PC sddm: Loaded empty theme configuration
3月 30 21:18:51 Main-PC sddm: Xauthority path: "/run/sddm/xauth_syoTia"
3月 30 21:18:51 Main-PC sddm: Using VT 2
3月 30 21:18:51 Main-PC sddm: Display server starting...
3月 30 21:18:51 Main-PC sddm: Writing cookie to "/run/sddm/xauth_syoTia"
3月 30 21:18:51 Main-PC sddm: Running: /usr/bin/X -nolisten tcp -background none -seat seat0 vt2 -auth /run/sddm/xauth_syoTia -noreset -displayfd 16
3月 30 21:18:51 Main-PC NetworkManager: <info> dhcp4 (enp12s0): state changed new lease, address=192.168.0.101
3月 30 21:18:51 Main-PC NetworkManager: <info> policy: set 'Wired connection 2' (enp12s0) as default for IPv4 routing and DNS
3月 30 21:18:51 Main-PC dbus-broker-launch: Activation request for 'org.freedesktop.resolve1' failed: The systemd unit 'dbus-org.freedesktop.resolve1.service' could not be found.
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'managed')
3月 30 21:18:51 Main-PC NetworkManager: <info> manager: NetworkManager state is now CONNECTED_SITE
3月 30 21:18:51 Main-PC NetworkManager: <info> device (enp12s0): Activation: successful, device activated.虽然最初内核里mlx4 link up了,但是网络启动未完成,后续networkmanager接手才完成了网络启动。
想知道这该如何处理。
另外,进入系统后,我如果想挂载nfs,必须要sudo组才可以,普通用户无法挂载,挂载本机上未自动挂载的盘也必须sudo才行。这样我通过dolphin就不能直接操作,必须terminal操作才可以。求助该怎么办?


indtability 发表于 2024-3-30 22:24

本帖最后由 indtability 于 2024-3-30 22:28 编辑

man systemd.special | grep network-online
man systemd-networkd-wait-online
man NetworkManager-wait-online

tldr
disable systemd-networkd-wait-online
好像没啥必要禁这个
enable NetworkManager-wait-online
大概可以解决

多说一句,以前看到 linux 入门会教各种终端命令行工具用法,现在就感觉只是为了满足初学者想象中的 linux 体验的噱头,我认为正经入门现代 linux 发行版应该从阅读 systemd 文档开始,从 systemd 切入了解 linux 系统的结构和各个角落才是正途。

RaidenII 发表于 2024-3-30 22:36

你可以用gvfs在userland挂载nfs,但是性能比fstab差一些
或者用autofs

子虚乌有 发表于 2024-3-31 01:10

我是用的docker自动启动的

posthoc 发表于 2024-3-31 01:43

本帖最后由 posthoc 于 2024-3-30 09:55 编辑

https://blog.agchapman.com/auto- ... stems-with-systemd/
以为会很直观,其实好像意外的有微妙的地方,比如上面坛友提到的默认的NetworkManager-wait-online.service其实结果上只是等待NetworkManager自己启动完成而不是确认有实际的网络连接,还要自己再做一个。

另外你用dolphin想去挂载应该会自动调用kdesu弹出一个输入密码的窗口啊,arch不一样么……

indtability 发表于 2024-3-31 02:17

posthoc 发表于 2024-3-31 01:43
https://blog.agchapman.com/auto- ... stems-with-systemd/
以为会很直观,其实好像意外的有微妙的地方, ...

没错,但我还是更鼓励从文档和文件中找答案,
systemctl cat NetworkManager-wait-online
里面就写明了命令和作用,如果愿意
nm-online --help
的话,会得到更直白的答案。

比起创建新服务,我是写了个 drop-in override 文件来去掉 -s 参数,以及调整 timeout 时间。

drop-in override 参见 man systemd.unit。

暗影翔 发表于 2024-3-31 16:59

indtability 发表于 2024-3-30 22:24
man systemd.special | grep network-online
man systemd-networkd-wait-online
man NetworkManager-wait-o ...

sytemctl enable networkmanager-wait-online.service
第一次重启,grub之后屏幕长时间显示
Arch linux: clean, xxxx files, xxxx blocks
等待之后显示网络加载成功进入登陆界面,启动之后nfs并未自动加载。当时没有时间继续排查。
今天启动,依然是长时间显示clean,然后网络加载成功,进入登陆界面,启动之后nfs加载成功。
原来启动在clean之后很快就会显示mount失败,然后进入登陆界面。


indtability 发表于 2024-3-31 18:51

本帖最后由 indtability 于 2024-3-31 18:54 编辑

暗影翔 发表于 2024-3-31 16:59
第一次重启,grub之后屏幕长时间显示

等待之后显示网络加载成功进入登陆界面,启动之后nfs并未自动加载 ...

大概率是你有某个服务依赖 network-online,导致阻塞了启动,至于昨天可能是连接超时,活用 systemd-analyze , systemctl list-depencencies [--reverse] 以及其他功能找到被阻塞的服务,用 systemctl edit 让它变成非阻塞之类。
man bootup 查看系统启动流程,对找阻塞服务可能有帮助。
我建议多读文档,对 troubleshooting 或者实现自己想要的功能很有帮助,我也很推荐通过自定义 arch 这种原味系统来学习 linux,但如果没有时间折腾这些细节,或者发现碰到的问题比解决的问题还多,我反倒觉得不如用回那些以用户友好为卖点的发行版,ubuntu,mint,manjaro 之流,我自己用的就是 manjaro,不是鼓吹谁好谁坏,只是觉得不如把时间花在对的东西上。

暗影翔 发表于 2024-4-2 22:49

本帖最后由 暗影翔 于 2024-4-2 23:12 编辑

indtability 发表于 2024-3-31 18:51
大概率是你有某个服务依赖 network-online,导致阻塞了启动,至于昨天可能是连接超时,活用 systemd-anal ...
感谢大佬,通过几个命令查了一下:

☁~systemd-analyze blame
2min 162ms systemd-networkd-wait-online.service
    6.010s NetworkManager-wait-online.service



☁~systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.

graphical.target @2min 1.607s
└─sddm.service @2min 1.607s
└─systemd-user-sessions.service @2min 1.599s +7ms
    └─remote-fs.target @2min 1.584s
      └─mnt-photo.mount @2min 1.476s +107ms
      └─mnt.mount @2min 971ms +472ms
          └─network-online.target @2min 959ms
            └─NetworkManager-wait-online.service @1.817s +6.010s
            └─NetworkManager.service @1.641s +175ms
                └─basic.target @1.640s
                  └─dbus-broker.service @1.620s +19ms
                  └─dbus.socket @1.619s
                      └─sysinit.target @1.618s
                        └─systemd-timesyncd.service @1.582s +35ms
                        └─systemd-tmpfiles-setup.service @1.520s +42ms
                            └─local-fs.target @1.519s
                              └─boot.mount @1.509s +8ms
                              └─systemd-fsck@dev-disk-by\x2duuid-04AA\x2d52F7.service @787ms +29ms
                                  └─dev-disk-by\x2duuid-04AA\x2d52F7.device @729ms



☁~systemctl list-dependencies --reverse NetworkManager-wait-online.service
NetworkManager-wait-online.service
● └─network-online.target
○   ├─archlinux-keyring-wkd-sync.service
●   ├─mnt-download.mount
●   ├─mnt-Music.mount
●   ├─mnt-photo.mount
●   ├─mnt-PT.mount
●   ├─mnt-video.mount
●   ├─mnt-winstorge.mount
●   ├─mnt.mount
○   ├─nfs-idmapd.service
○   ├─nfs-mountd.service
○   ├─nfs-server.service
●   ├─rpc-statd-notify.service
●   └─rpc-statd.service


应该是“network-online.target”,阻塞了启动。
是mount阻碍了启动,在fstab里注释掉nfs挂载就飞速启动了。

indtability 发表于 2024-4-3 09:45

暗影翔 发表于 2024-4-2 22:49
感谢大佬,通过几个命令查了一下:



你把 nfs 注释掉不是又回去了…

我本来以为是把 network-online 改为等待网络配置好之后阻塞了某个网络服务,我刚才简单看了下你几个服务,可能是 systemd-user-session 依赖 remote-fs,它依赖于那几个网络挂载,阻塞了启动,这个可以通过把你 fstab 里网络挂载那几项添加 noauto 或者 x-systemd.automount 选项来解决。具体功能见 man systemd.mount。
页: [1]
查看完整版本: [Arch求助]如何实现启动自动挂载nfs