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#使用 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
以及对于 user 挂载
$ 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
这最好用作用户单元。
错误“在挂载 webdav 资源时 /etc/fstab 中有不同的挂载选项”
这发生在以下情况时:
- webdav 资源及其挂载点已在 `/etc/fstab` 中设置
- 挂载点已作为参数传递给
mount
命令(即使挂载点与 `/etc/fstab` 中的相同)
解决方法:挂载时不要传递挂载点,以便使用 `/etc/fstab` 中指定的值。例如
$ mount -t davfs https://mywebdav mymountpoint # incorrect different mount options in /etc/fstab $ mount -t davfs https://mywebdav # correct