davfs2
davfs2 是一個用於掛載 WebDAV 資源的 Linux 文件系統。WebDAV 是 HTTP/1.1 的一個擴展,用於遠程協作共享網絡文件資源。
安裝 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'
可能是以下原因導致:
- WebDAV 資源及其掛載點已經在 /etc/fstab 中定義
- 掛載點已經被作為一個參數傳遞給 'mount' 命令(即使掛載點與 /etc/fstab 中相同)
因此,請不要在掛載時傳遞掛載點,而是自動使用 /etc/fstab 中的值。例如:
$ mount -t davfs https://mywebdav mymountpoint # 錯誤 與 /etc/fstab 中的掛載參數不同 $ mount -t davfs https://mywebdav # 正確