davfs2

来自 ArchWiki

davfs2 是一个 Linux 文件系统驱动程序,允许挂载 WebDAV 资源。WebDAV 是 HTTP/1.1 的扩展,允许远程协作编写 Web 资源。

安装 davfs2

安装 davfs2AUR 软件包。

挂载 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
注意: 普通用户可以挂载 davfs2 文件系统,如果他们是系统范围配置中定义的 dav_group 组的成员。请确保在系统范围的配置文件中启用 '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 挂载选项可用于自动挂载网络驱动器。

技巧和窍门

存储凭据

创建一个 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 中有不同的挂载选项”

这发生在以下情况时:

  1. webdav 资源及其挂载点已在 `/etc/fstab` 中设置
  2. 挂载点已作为参数传递给 mount 命令(即使挂载点与 `/etc/fstab` 中的相同)

解决方法:挂载时不要传递挂载点,以便使用 `/etc/fstab` 中指定的值。例如

$ mount -t davfs https://mywebdav mymountpoint # incorrect
different mount options in /etc/fstab
$ mount -t davfs https://mywebdav # correct

参见