本文说明在 Linux/PVE 环境中用 rclone 挂载 WebDAV,并配置 systemd、FUSE 权限与缓存。示例依据官方文档,实际挂载与断线恢复需在自己的环境验证。
rclone mount 把 WebDAV 内容通过 FUSE 呈现在本地路径。它不等于把全部远端文件下载为永久离线副本,读写能力与远端服务、VFS 缓存模式和权限有关。
一、安装与连接验证
Debian/Ubuntu 可先使用发行版的软件包:
sudo apt update
sudo apt install rclone fuse3
rclone version
command -v rclone fusermount3
软件包版本不满足需要时,再按 rclone 官方安装说明获取发行包;下载和核验后安装,避免把未检查的远程脚本直接交给 root 执行。后续 unit 中的二进制路径应与 command -v rclone 结果一致。
rclone config
新建名为 MyWebDAV 的 remote,选 webdav,填写服务 URL、实际 vendor、用户名和密码。使用可信 HTTPS;pass 的 obscure 存储只是可逆混淆,不是保护配置文件的强加密。将配置文件放在受限目录,确认 rclone config file 给出的路径,避免在文章或日志公开凭据。WebDAV 配置
先测试 API,不急着开机挂载:
rclone lsd MyWebDAV:
rclone ls MyWebDAV: --max-depth 1
二、前台测试挂载
选择专用且为空的挂载点。以下假定使用已存在的普通用户 media;它需要读取 remote 配置、写缓存和挂载点。示例服务主要用于读取媒体,默认使用只读挂载:
sudo install -d -o media -g media -m 0750 /mnt/webdav
sudo install -d -o media -g media -m 0700 /var/cache/rclone-webdav
sudo install -d -o media -g media -m 0700 /etc/rclone
# 将配置复制到 /etc/rclone/webdav.conf 后设置 owner=media、mode=0600
sudo -u media /usr/bin/rclone mount MyWebDAV: /mnt/webdav \
--config /etc/rclone/webdav.conf \
--cache-dir /var/cache/rclone-webdav \
--read-only \
--vfs-cache-mode full \
--vfs-cache-max-size 10G \
--vfs-cache-max-age 24h \
--buffer-size 8M \
--dir-cache-time 1m
前台运行时从另一终端访问路径并测试读取、跳转;结束前让使用该挂载的程序关闭文件,再用 fusermount3 -u /mnt/webdav 卸载。
full 可改善随机读取/seek,但缓存需要磁盘空间;10 GiB 和 24 小时是示例,缓存上限不是立即严格生效,正在使用的文件可能使其超出上限。--buffer-size 是每个打开文件的内存缓冲,不能按整个服务只有 8 MiB 估算。WebDAV 通常没有变更通知支持,目录缓存过长会延迟远端修改可见性。rclone mount 与 VFS 说明
如需让 Jellyfin 等其他用户读取,可在 /etc/fuse.conf 允许 user_allow_other,再添加 --allow-other --default-permissions 和合适的 UID/GID/umask。--allow-other 扩大本机可访问范围,不应不加说明地默认启用。只给指定用户读权限时,可以采用共享组和相应权限设计。
三、systemd 开机挂载
保存为 /etc/systemd/system/rclone-webdav.service;远端名称、用户和路径需对应前面的前台测试:
[Unit]
Description=Rclone WebDAV mount
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
User=media
Group=media
ExecStart=/usr/bin/rclone mount MyWebDAV: /mnt/webdav --config /etc/rclone/webdav.conf --cache-dir /var/cache/rclone-webdav --read-only --vfs-cache-mode full --vfs-cache-max-size 10G --vfs-cache-max-age 24h --buffer-size 8M --dir-cache-time 1m
ExecStop=/usr/bin/fusermount3 -u /mnt/webdav
Restart=on-failure
RestartSec=10
TimeoutStartSec=90
TimeoutStopSec=60
[Install]
WantedBy=multi-user.target
ExecStart 末尾没有 &,也不使用 --daemon。systemd 本身管理前台进程;& 不会像 shell 那样自动后台化。rclone 支持 Type=notify,能在成功建立挂载后再通知依赖服务启动。显式指定 --config 和 --cache-dir 避免依赖 root 的 HOME。官方 systemd 说明
sudo systemctl daemon-reload
sudo systemctl enable --now rclone-webdav.service
sudo systemctl status rclone-webdav.service
findmnt /mnt/webdav
sudo journalctl -u rclone-webdav.service -b
restart 用于重启当前服务,设置开机自启需要 enable。需要该挂载的业务服务可声明对 rclone unit 的 Requires/After 依赖,并处理远端断线,不能只依据目录存在就认为挂载可用。
四、PVE 的 LXC 环境
LXC 共享 PVE 宿主机内核,容器里 modprobe fuse 找不到宿主模块,并不意味着要在容器中安装另一个内核。在 PVE 的 容器 → 选项 → 功能 中按需开启 FUSE,保留其他原有功能设置,然后正常重启容器。检查 /dev/fuse 和容器内的 fuse3 包。

不需要顺手给容器所有设备权限,或在容器里手动建立全用户可写的设备节点。PVE 官方特别提示 FUSE 与 freezer cgroup 交互可能造成 I/O 死锁,备份/挂起前需要测试;必要时考虑在 VM 内挂载。宿主机挂载后 bind 到容器的目录也要另外安排备份,不会自动包含在容器备份中。pct FUSE 与挂载说明
五、常见问题与原参数更正
- 缺少
fusermount3:检查command -v fusermount3,安装 fuse3,并核对 unit 的绝对路径。 fuse device not found:在 PVE 端检查 FUSE 功能及宿主/dev/fuse,不要在容器里盲目 modprobe。- 目录看不到刚添加的文件:检查 WebDAV API 是否已更新及目录缓存,必要时向这个服务的 rclone 进程发送 SIGHUP 清空目录缓存;不要用 pidof 把所有 rclone 作业一并重置。
--no-check-certificate是跳过 TLS 证书验证,与非空挂载点无关。应修复服务器证书、主机名或 CA 信任。--allow-non-empty才涉及非空目录,但会遮住原有文件,本文不使用。--use-mmap用于缓冲区的内存分配方式,并不意味着启用整个 VFS 的磁盘缓存。具体性能需通过实际工作负载比较。--low-level-retries 200可能放大失败时延,不作为默认优化;先诊断认证、路由与服务错误。- 写入场景需移除
--read-only、确认远端支持和容量,理解上传延迟与失败重试,缓存不能替代备份。
评论区