Linux 下稳定挂载 QNAP WebDAV

Linux 下稳定挂载 QNAP WebDAV(解决 Depth 限制与小文件损坏)

Linux 下稳定挂载 QNAP WebDAV(解决 Depth 限制与小文件损坏)

一、问题背景

在 Linux 下使用 davfs2 挂载 QNAP WebDAV 时,常见几个典型问题:

  • QNAP WebDAV 不允许 Depth: infinity 请求,直接返回 403 拒绝访问
  • 内核层 davfs2 兼容性差,出现 Invalid argument (os error 22) 错误
  • systemd 自动挂载不稳定,出现 Transport endpoint is not connected
  • 小文件传输要求绝对可靠,不能出现损坏或丢失
最终方案:使用 rclone 替代 davfs2,用户态 FUSE 挂载,兼容性更强、更稳定、可精确控制缓存与校验。

二、rclone 配置 WebDAV 远程

先配置好 rclone 连接 QNAP WebDAV,所有后端参数(如上传确认)都在配置中完成,不在挂载命令里乱传参数。

rclone config
  • 新建远程,类型选择 WebDAV
  • 填写 NAS 的 WebDAV 地址
  • 选择供应商:Other
  • 填写账号密码
  • 开启 Confirm upload 确保写入完成才返回成功

三、最终稳定挂载命令(无坑版)

这条命令满足:

  • 兼容 QNAP Depth 限制
  • 小文件写入立即同步,不延迟
  • 自动校验文件完整性
  • 网络抖动自动重试
  • 仅当前用户访问,安全
rclone mount \
  --dir-cache-time 5s \
  --vfs-cache-mode writes \
  --vfs-cache-max-size 1G \
  --vfs-write-back 0s \
  --vfs-read-chunk-size-limit 0 \
  --checksum \
  --retries 3 \
  --low-level-retries 10 \
  webdav_remote: /path/to/mount
关键点:
--vfs-write-back 0s 写入立即同步,绝不丢文件
--checksum 强制校验,杜绝损坏
• 不使用 --daemon,交给 systemd 管理

四、systemd 服务(最终稳定版)

这是你实际在用的、能开机自启、不会断连的最终配置。

[Unit]
Description=Rclone WebDAV Mount for QNAP
After=network-online.target nss-lookup.target
Wants=network-online.target

[Service]
User=user
Group=user

ExecStartPre=/usr/bin/fusermount -uz /path/to/mount 2>/dev/null

ExecStart=/usr/bin/rclone mount \
  --dir-cache-time 5s \
  --vfs-cache-mode writes \
  --vfs-cache-max-size 1G \
  --vfs-write-back 0s \
  --vfs-read-chunk-size-limit 0 \
  --checksum \
  --retries 3 \
  --low-level-retries 10 \
  webdav_remote: /path/to/mount

ExecStop=/usr/bin/fusermount -uz /path/to/mount

Restart=always
RestartSec=5
UMask=002
Type=simple
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target

五、启用与验证

sudo systemctl daemon-reload
sudo systemctl enable --now rclone-mount.service
sudo systemctl status rclone-mount.service

测试挂载是否正常:

ls /path/to/mount

六、关键避坑总结(非常重要)

  1. 不要加 --daemon,否则 systemd 管不住进程,会断连
  2. 不要加 --allow-other,仅自己使用完全不需要
  3. 不要在挂载命令里传 WebDAV 后端参数,全部写进 rclone config
  4. UMask=002 保证文件权限安全合理
  5. 必须加 ExecStartPre 清理残留挂载点
只要出现:Transport endpoint is not connected
100% 是 --daemon 或启动时机太早导致,按本文配置可彻底解决。

七、本方案最终效果

  • ✅ 完美兼容 QNAP WebDAV Depth 限制
  • ✅ 小文件 0 损坏、0 丢失
  • ✅ 开机自动挂载
  • ✅ 网络断开自动重连
  • ✅ 权限安全,仅当前用户可访问
  • ✅ 无内核错误、无参数报错、无断连