跳至內容

davfs2

出自 Arch Linux 中文维基

davfs2 是一個用於掛載 WebDAV 資源的 Linux 文件系統。WebDAV 是 HTTP/1.1 的一個擴展,用於遠程協作共享網絡文件資源。

安裝 davfs2

安裝軟體包 davfs2

掛載 WebDAV 資源

配置和掛載參數

配置文件分為系統級的 /etc/davfs2/davfs2.conf 和用戶級的 ~/.davfs2/davfs2.conf。普通用戶調用時,會同時讀取兩個配置文件,但用戶配置的優先級高於系統配置。可以對常規、WebDAV 相關、緩存相關、調試等內容進行配置,具體語法請參見 davfs2.conf(5)

掛載參數可以用於定義配置文件路徑、文件系統的所有者和用戶組,以及其他訪問權限相關的選項。要查詢所有可用的參數,執行以下命令:

$ mount.davfs -h

也可參見 mount.davfs(8) 了解詳細。

使用命令行

要掛載 WebDAV 資源,請使用 mount,而非直接使用 mount.davfs

# mount -t davfs http(s)://address:<port>/path /mount/point
注意:只有在系統級配置文件中定義的 dav_group 用戶組內的普通成員才能掛載 davfs2 文件系統。確保系統級配置文件中的 dav_group 已經被啟用並被指定了可用的用戶組。

使用 systemd

要使用Systemd 掛載

/etc/systemd/system/mnt-webdav-service.mount
[Unit]
Description=Mount WebDAV Service
After=network-online.target
Wants=network-online.target

[Mount]
What=http(s)://address:<port>/path
Where=/mnt/webdav/service
Options=uid=1000,file_mode=0664,dir_mode=2775,grpid
Type=davfs
TimeoutSec=15

[Install]
WantedBy=multi-user.target

也可以創建一個 systemd 自動掛載單元來設置超時時間。

/etc/systemd/system/mnt-webdav-service.automount
[Unit]
Description=Mount WebDAV Service

[Automount]
Where=/mnt/webdav/service
TimeoutIdleSec=300

[Install]
WantedBy=remote-fs.target

要了解更多關於 systemd 掛載單元的內容,參見 Fstab#通過_systemd_自動掛載

使用 fstab

要定義如何將 WebDAV 資源掛載在文件系統上,請添加一個以下格式的 fstab 條目:

/etc/fstab
https://webdav.example/path /mnt/webdav davfs rw,user,uid=username,noauto 0 0

其中,username 是所掛載的文件系統的所有者,可以是數字 ID 或是用戶名。僅有 root 用戶能以與掛載用戶不同的 UID 進行掛載。掛載參數 _netdev 可以用於自動掛載網絡驅動器。

提示與技巧

保存認證信息

創建一個密鑰文件以保存 WebDAV 服務的認證信息。對於普通用戶,使用 ~/.davfs2/secrets;對於 root 用戶,使用 /etc/davfs2/secrets

/etc/davfs2/secrets
https://webdav.example/path davusername davpassword

請確保密鑰文件的權限正確。對於 root 用戶:

# chmod 600 /etc/davfs2/secrets
# chown root:root /etc/davfs2/secrets

對於普通用戶:

$ chmod 600 ~/.davfs2/secrets

常見問題

無法創建/複製文件,同時可能卡住

如果無法創建/複製文件,同時可能卡住,請編輯#配置和掛載參數,將 use_locks 0 加入到配置中。默認配置 1 會在打開和寫入文件時在伺服器上加鎖。

密碼和密鑰文件

如果密碼中含有如 \" 這樣的特殊字符,請為其添加轉義符 \

網絡已連通但域名解析失敗

有時 network-online.target 已經成功但 WebDAV 伺服器的域名仍未被解析。可以手動等待域名解析成功。

首先,配置好#使用 fstab,然後在 15 秒重複使用 ping 測試是否能訪問伺服器。訪問成功時,再進行掛載:

/etc/systemd/system/mnt-webdav-service.service
[Unit]
Description=Mount WebDAV Service
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=bash -c 'for i in {1..15}; do if ping -c 1 mywebdav.server.url; then mount /path/to/mountpoint; break; else sleep 1; fi; done'
ExecStop=umount /path/to/mountpoint
RemainAfterExit=true

[Install]
WantedBy=default.target

建議將其配置為用戶單元

掛載 WebDAV 資源時報錯 'different mount options in /etc/fstab'

可能是以下原因導致:

  1. WebDAV 資源及其掛載點已經在 /etc/fstab 中定義
  2. 掛載點已經被作為一個參數傳遞給 'mount' 命令(即使掛載點與 /etc/fstab 中相同)

因此,請不要在掛載時傳遞掛載點,而是自動使用 /etc/fstab 中的值。例如:

$ mount -t davfs https://mywebdav mymountpoint # 錯誤
與 /etc/fstab 中的掛載參數不同
$ mount -t davfs https://mywebdav # 正確

參見