davfs2
davfs2 是一个 Linux 文件系统驱动程序,允许挂载 WebDAV 资源。WebDAV 是 HTTP/1.1 的一个扩展,允许远程协作编辑 Web 资源。
安装 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
使用 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#Automount with 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 挂载选项可用于自动挂载网络驱动器。
技巧与提示
存储凭据
创建 secrets 文件以存储 WebDAV 服务的凭据:用户使用 ~/.davfs2/secrets,root 使用 /etc/davfs2/secrets
/etc/davfs2/secrets
https://webdav.example/path davusername davpassword
确保 secrets 文件 具有正确的权限(针对 root 挂载):
# chmod 600 /etc/davfs2/secrets # chown root:root /etc/davfs2/secrets
以及针对 用户 挂载:
$ chmod 600 ~/.davfs2/secrets
故障排除
无法创建/复制文件或发生冻结
如果无法创建/复制文件或出现冻结,请编辑配置与挂载选项,使用 use_locks 0 选项。该参数的默认值为 1,在文件打开用于写入时会锁定服务器上的文件。
secrets 文件中的密码
注意密码中的特殊字符,如 \ 和 "。请使用 \ 对其进行转义。
网络在线但域名解析失败
有时 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
这最好作为用户单元 (user unit) 使用。
挂载 webdav 资源时出现 Error 'different mount options in /etc/fstab'
这种情况发生在:
- /etc/fstab 中已设置 webdav 资源及其挂载点
- 且挂载点被作为参数传递给 'mount' 命令(即使该挂载点与 /etc/fstab 中的相同)
解决方法:挂载时不要传递挂载点,以便使用 /etc/fstab 中指定的值。例如:
$ mount -t davfs https://mywebdav mymountpoint # incorrect different mount options in /etc/fstab $ mount -t davfs https://mywebdav # correct