侧边栏壁纸
  • 累计撰写 64 篇文章
  • 累计创建 46 个标签
  • 累计收到 96 条评论

目 录CONTENT

文章目录

Linux使用rclone自动挂载webdav(PVE下LXC容器)

草莓牛奶
2024-04-12 / 0 评论 / 0 点赞 / 23 阅读 / 1,850 字 / 正在检测是否收录...
温馨提示:
「博客文章out of date 会及时更新,无特殊说明仍然有效,欢迎指正内容中的错误」

在Linux系统上使用Rclone挂载WebDAV是一种高效连接并管理多种云存储服务的方法。Rclone是一款强大的命令行工具,支持众多云服务,其中就包括WebDAV。WebDAV(Web-based Distributed Authoring and Versioning)允许用户通过网络编辑和管理存储在远程服务器上的文件。这篇博客将详细介绍如何在Linux环境下配置Rclone,实现对WebDAV的安全连接和高效管理,适合希望通过命令行操作提升云存储操作效率的用户。

步骤 1: 安装 Rclone

首先,确保你的Linux系统上已经安装了Rclone。如果还没有安装,可以通过以下命令安装:

bashCopy code
curl https://rclone.org/install.sh | sudo bash

步骤 2: 配置 Rclone

接下来,需要配置Rclone以连接到你的WebDAV服务器。

  1. 运行配置向导:

    rclone config
    
  2. 选择 n 新建一个配置。

  3. 输入配置的name名称,例如 MyWebDAV

  4. 从服务列表中选择WebDAV,通常通过输入与WebDAV对应的数字或直接输入 webdav

  5. 输入WebDAV服务的参数,包括:

    • url: WebDAV服务器的URL。
    • vendor: 选择 other 除非你使用的是如Nextcloud或Owncloud这样特定的WebDAV服务。
    • user: 你的WebDAV用户名。
    • pass: 输入你的密码,输入时Rclone会提供加密选项。

完成这些步骤后,WebDAV驱动就配置好了。

步骤 3: 配置 systemd开机自启动

  1. 打开一个文本编辑器来创建一个新的服务文件:

    bashCopy code
    sudo nano /etc/systemd/system/rclone-webdav.service
    
  2. 将以下内容复制并粘贴到文件中,注意替换 <配置名称>/path/to/local/mount 为你的Rclone配置名称和挂载点路径:

[Unit]
Description=Rclone WebDAV Mount
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/rclone mount <配置名称>: /path/to/local/mount --umask 0022 --default-permissions --allow-other --buffer-size 32M --low-level-retries 200 --dir-cache-time 2h --vfs-read-chunk-size 64M --vfs-read-chunk-size-limit 1G --cache-dir /tmp --vfs-cache-mode writes --copy-links --no-gzip-encoding --use-mmap &

ExecStop=/bin/fusermount -u /path/to/local/mount
Restart=on-failure

[Install]
WantedBy=default.target

例如,如果你的Rclone配置名称为 MyWebDAV,则应替换 <配置名称>MyWebDAV

Rclone挂载参数的优化配置及其说明:

  1. --umask 0022:设置文件创建的权限掩码,0022 允许所有者读写权限,组和其他用户只读。
  2. --default-permissions:强制内核对文件权限的检查。
  3. --allow-other:允许所有用户访问挂载的文件系统。
  4. --buffer-size 32M:设置向远程发送和从远程接收数据的缓冲区大小。
  5. --low-level-retries 200:在失败的情况下,低级操作的重试次数。
  6. --dir-cache-time 2h:目录项在缓存中的保留时间,除非检测到变化。
  7. --vfs-read-chunk-size 64M :从远程存储一次读取的数据块的初始大小为 64MB。
  8. --vfs-read-chunk-size-limit 1G:设置读取块大小的上限为 1GB。
  9. --cache-dir /tmp:指定存储缓存文件的目录。
  10. --vfs-cache-mode writes:更改的文件会先写入磁盘再上传,有助于防止数据丢失。
  11. --copy-links:跟随符号链接并复制指向的数据。
  12. --no-gzip-encoding:禁用gzip编码,如果远程已经压缩数据,则此选项有益。
  13. --use-mmap:使用内存映射文件进行VFS缓存,可以提高性能。
  14. --allow-non-empty:允许在挂载点不为空的情况下也进行挂载。
  15. --no-check-certificate:允许 Rclone 在挂载点不为空的情况下也进行挂载。
#创建挂载路径文件夹
mkdir -p /path/to/local/mount

# reload守护进程
sudo systemctl daemon-reload


# 设置service文件自启
sudo systemctl restart rclone-webdav.service

# 启动service文件
sudo systemctl status rclone-webdav.service

注意事项

确保挂载点 /path/to/local/mount 在使用前是空的且存在。如果有任何错误,请检查日志文件了解更多信息:

journalctl -u rclone-webdav.service

LXC环境下挂载

在Proxmox环境中,当尝试在LXC容器内使用Rclone挂载FUSE文件系统时,用户可能会遇到问题,因为LXC容器默认无法访问宿主机的FUSE设备。这会导致挂载失败,因为容器缺少必要的设备文件和权限来执行这一操作。为解决这一问题,需要进行一系列配置调整,以确保容器可以正确访问并使用宿主机的FUSE设备,从而允许Rclone等应用正常挂载和管理文件系统。

root@Debian:~# modprobe fuse
modprobe: FATAL: Module fuse not found in directory /lib/modules/X.X.XX-X-pve

前往选项-功能界面,勾选FUSE,即可!

image-20240414170454183

要在Proxmox上的LXC容器中解决FUSE文件系统挂载问题,您需要让容器能够访问宿主机的FUSE设备。以下是手动配置的详细步骤:

  1. 修改LXC配置

    • 访问Proxmox宿主机,打开特定容器的配置文件。例如,如果容器ID为102,配置文件路径可能是 /etc/pve/nodes/[host-name]/lxc/102.conf/etc/pve/lxc/102.conf

    • 在配置文件中添加以下行来绑定FUSE设备:

      lxc.mount.entry = /dev/fuse dev/fuse none bind,create=file
      
    • 保存文件。

  2. 重启LXC容器

    • 通过Proxmox网页界面或在容器内运行 reboot 命令来重启LXC容器。
  3. 创建FUSE设备节点

    • 在LXC容器内部运行以下命令来创建FUSE设备节点:

      mknod -m 666 /dev/fuse c 10 229
      
    • 确保LXC容器中安装了FUSE包:

      apt install fuse3
      

这样的设置应允许Rclone在LXC容器内通过访问宿主机的FUSE设备来挂载FUSE文件系统。这对于确保容器中的应用正确运行至关重要。

常见问题

1.daemon参数导致失败

root@Debian:~# /usr/bin/rclone mount <配置名称>: /path/to/local/mount --daemon
RROR : Daemon timed out. Failed to terminate daemon pid XXXXX: os: process already finished
Fatal error: daemon exited with error code 1

最好的解决方法是避免使用 --daemon 标志,而是让 Systemd 本身处理后台进程管理。这意味着在 Systemd 服务文件中配置 Rclone 时不应包括 --daemon 参数。这样做可以避免与 --daemon 相关的启动问题,同时利用 Systemd 的稳定性和重新启动管理功能。

mount: improve implementation of --daemon mode · Issue #5664

挂载 --daemon 失败 - 可疑错误 - rclone 论坛

2.fusemount3未安装

root@Debian:~# /usr/bin/rclone mount <配置名称>: /path/to/local/mount
Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount3": executable file not found in $PATH

The error message you’re seeing indicates that the fusermount3 executable is missing, which is necessary for mounting file systems with FUSE. This typically happens because the fuse3 package isn’t installed on your system. You can resolve this issue by installing fuse3.

sudo apt update
sudo apt install fuse3

挂载 --daemon 失败 - 可疑错误 - rclone 论坛

3.未找到fuse

root@Debian:~# /usr/bin/rclone mount <配置名称>: /path/to/local/mount
mount helper error: fusermount3: fuse device not found, try 'modprobe fuse' first
Fatal error: failed to mount FUSE fs: fusermount: exit status 1

常见于LXC容器,详见上

0

评论区