Systemd

使用 fstab 或 systemd 在wireguard 之後掛載smb 共享

  • February 11, 2022

在建立線保護連接後,我正在嘗試安裝 SMB 共享。因此我做了以下事情:

  • 創建了一個wireguard配置
  • 使 systemd 在啟動時啟動連接 systemctl enable wg-quick@wg0.service
  • 將以下條目添加到 fstab
//192.168.0.10/home /mnt/smb cifs x-systemd.after=wg-quick@wg0.service,credentials=/home/user/.smbcredentials,vers=3.0,uid=user,pid=user,users,_netdev 0 0

重新啟動後,網路共享未掛載。知道 fstab 中的每個條目都轉換為 systemd-unit 後,我檢查了 unit 的狀態systemctl status mnt-smb.mount

● mnt-smb.mount - /mnt/smb
  Loaded: loaded (/etc/fstab; generated; vendor preset: enabled)
  Active: failed (Result: exit-code) since Wed 2022-02-09 16:55:28 CET; 1min 17s ago
   Where: /mnt/smb
    What: //192.168.0.10/home
    Docs: man:fstab(5)
          man:systemd-fstab-generator(8)
 Process: 496 ExecMount=/bin/mount //192.168.0.10/home /mnt/smb -t cifs -o x-systemd.after=wg-quick@wg0.service,credentials=/home/user/.smbcredentials,vers=3.0,uid=user,gid=user,users,_netdev (code=exited, status=32)

Feb 09 16:55:28 homeserver systemd[1]: Mounting /mnt/smb...
Feb 09 16:55:28 homeserver systemd[1]: mnt-smb.mount: Mount process exited, code=exited status=32
Feb 09 16:55:28 homeserver systemd[1]: Failed to mount /mnt/smb.
Feb 09 16:55:28 homeserver systemd[1]: mnt-smb.mount: Unit entered failed state.

查看dmesg提供了以下資訊:

[   17.612210] Key type cifs.spnego registered
[   17.612253] Key type cifs.idmap registered
[   17.758816] wireguard: loading out-of-tree module taints kernel.
[   17.775249] wireguard: WireGuard 0.0.20191206 loaded. See www.wireguard.com for information.
[   17.775273] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[   27.752548] CIFS VFS: Error connecting to socket. Aborting operation.
[   27.752576] CIFS VFS: cifs_mount failed w/return code = -115

基於關於stackoverflow 的以下問題,我假設 115 表示“進行中”。如果wireguard vpn連接沒有啟動,我也看到了同樣的行為。

查看生成的單元文件:

# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=remote-fs.target

[Mount]
What=//192.168.0.10/home
Where=/mnt/smb
Type=cifs
Options=x-systemd.after=wg-quick@wg0.service,credentials=/home/user/.smbcredentials,vers=3.0,uid=user,gid=user,users,_netdev

如果我mount -a在登錄後執行,一切都會按預期進行。所以我認為這是單位之間的時間問題。因此,我還創建了一個自己的 systemd 單元並從 fstab 中刪除了該條目:

[Unit]
Description=Homeserver SMB
Before=remote-fs.target
After=wg-quick@wg0.service
Requires=wg-quick@wg0.service

[Mount]
Type=cifs
What=//192.168.0.10/home
Where=/mnt/smb
Options=credentials=/home/user/.smbcredentials,vers=3.0,uid=user,gid=user,users

[Install]
WantedBy=multi-user.target

將其移至/etc/systemd/system/mnt-smb.mount並通過 啟動它systemctl enable mnt-smb.mount。這適用於一次重新啟動,但在下次重新啟動後停止工作。

問題:

  • 如何解決這個時間問題?
  • 可以在單元文件或 fstab 中使用哪些 systemd 選項?

我懷疑wireguard的介面設置還沒有準備好只是因為服務啟動了。您的問題可能與此有關,在這種情況下,解決方案是等待虛擬設備。

After=network.target wg-quick@wg0.service
Requires=sys-devices-virtual-net-wg0.device

引用自:https://unix.stackexchange.com/questions/689975