跳转至内容

davfs2

来自 ArchWiki

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

安装 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
注意:普通用户可以通过成为 /etc/davfs2/davfs2.conf 中定义的 dav_group 组(默认是 network)的成员,且挂载点已在 /etc/fstab 中定义,来挂载 davfs2 文件系统。mount.davfs 的 man 手册页中提供了 /etc/fstab 行的示例。

使用 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/secretsroot 使用 /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'

这种情况发生在:

  1. /etc/fstab 中已设置 webdav 资源及其挂载点
  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

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.