Rclone & OneDrive

通过 Rclone 挂载 OneDrive 扩展服务器存储

前言 #

Rclone 是一款功能强大的开源命令行工具,被誉为“云存储领域的瑞士军刀”。它支持超过40种主流云存储服务,包括 OneDrive、Google Drive 和 Dropbox 等。通过 Rclone,你可以将远端的云存储目录挂载到本地服务器,像使用一块普通硬盘一样无缝地读写文件,从而实现经济高效的服务器扩容。

本教程将详细介绍如何在 Linux 服务器上安装、配置 Rclone,并实现将 OneDrive 网盘挂载为本地目录,最后设置为开机自动挂载,让你的云存储真正融入服务器文件系统。

第一步:安装 Rclone #

对于 Linux、macOS 或 BSD 系统,官方提供了一键式安装脚本:

sudo -v ; curl [https://rclone.org/install.sh](https://rclone.org/install.sh) | sudo bash

对于 Windows 用户,可以根据你的系统架构从官网下载预编译好的程序包:

第二步:获取 OneDrive 授权 #

为了让 Rclone 有权限访问你的 OneDrive 文件,需要进行一次授权。由于服务器通常没有图形界面,这个过程需要在你的本地电脑(或任何有浏览器的设备)上完成。

  1. 在你的本地电脑终端(或任何安装了 Rclone 的地方)运行以下命令:

    rclone authorize "onedrive"
    
  2. 该命令会自动打开你的默认浏览器,并跳转到微软登录页面。登录你的 OneDrive 账户并授予 Rclone 访问权限。

  3. 授权成功后,浏览器页面会显示成功信息,同时运行命令的终端会返回一串 JSON 格式的授权码(Token)。完整复制这段以 { 开始、以 } 结束的代码,它将在下一步配置服务器时使用。

    Paste the following into your remote machine --->
    {"access_token":"......","token_type":"Bearer",...} // 务必完整复制整段 JSON 内容
    <---End paste
    

    注意: 这个授权码的有效期通常为一个小时,获取后尽快完成后续配置。

第三步:在服务器上配置 Rclone #

现在,回到你的服务器终端,我们将通过交互式命令行工具来配置 Rclone。

  1. 启动 Rclone 配置向导:

    rclone config
    
  2. 创建新的远程连接 (New Remote)

    • 在提示符下输入 n 并按回车,表示创建一个新的远程连接。
    • 为这个连接命名,例如 onedrive,然后按回车。
    n) New remote
    s) Set configuration password
    q) Quit config
    n/s/q> n
    name> onedrive
    
  3. 选择存储类型 (Storage Type)

    • Rclone 会列出所有支持的云服务。找到 Microsoft OneDrive 对应的编号并输入。这个编号可能会因 Rclone 版本而异,请仔细查找。
    Type of storage to configure.
    ...
    34 / Microsoft OneDrive
       \ "onedrive"
    ...
    Storage> 34
    
  4. 进行核心配置

    • Client ID & Client Secret: 直接按回车跳过,使用默认值即可。
    • 选择区域: 如果你使用的是标准版的 OneDrive,输入 1 (Microsoft Cloud Global)。如果使用的是由世纪互联运营的中国版 OneDrive,输入 4
    • 编辑高级配置: 输入 n,选择不进行高级配置。
    • 使用自动配置: 这是关键一步。因为我们是在没有图形界面的服务器上操作,所以必须选择 n(否),以便手动粘贴授权码。
    Use auto config?
     * Say Y if not sure
     * Say N if you are working on a remote or headless machine
    y) Yes (default)
    n) No
    y/n> n
    
    • 粘贴授权码: 在 config_token> 提示符后,粘贴你在第二步中获得的完整 JSON 授权码,然后按回车。
  5. 选择驱动器类型 (Drive Type)

    • 系统会询问你要连接的驱动器类型。对于个人版或商业版 OneDrive,选择 1 (OneDrive Personal or Business)。
    • 接下来会显示找到的驱动器,确认无误后输入 y
    • 最后,Rclone 会显示完整的配置信息。确认无误后,输入 y 保存。
  6. 退出配置

    • 你会看到刚才创建的 onedrive 已列在远程连接列表中。输入 q 退出配置界面。
  7. 验证配置

    • 我们可以通过一个简单的命令来测试连接是否成功。例如,创建一个测试文件并尝试将其移动到 OneDrive 的根目录:
    touch test.txt
    rclone move test.txt onedrive:
    
    • 然后登录你的 OneDrive 网页版,检查根目录下是否出现了 test.txt 文件。如果出现,则证明配置成功。

第四步:挂载 OneDrive 目录 #

配置完成后,我们就可以将 OneDrive 挂载到服务器的本地文件系统了。

  1. 首先,创建一个本地目录作为挂载点:

    sudo mkdir -p /mnt/onedrive
    
  2. 执行挂载命令。以下命令会将你 OneDrive 根目录下的 data 文件夹挂载到服务器的 /mnt/onedrive 目录。

    rclone mount onedrive:/data /mnt/onedrive \
    --copy-links \
    --no-gzip-encoding \
    --no-check-certificate \
    --allow-other \
    --allow-non-empty \
    --umask 000 \
    --daemon
    
    • onedrive:/data: 表示名为 onedrive 的远程连接下的 /data 目录。若要挂载整个网盘,请使用 onedrive:
    • /mnt/onedrive: 本地挂载点路径。
    • --daemon: 让 Rclone 在后台运行,即使关闭终端也不会中断。
    • --allow-other: 允许系统上的其他用户访问挂载点中的文件。
  3. 验证挂载

    • 使用 df -h 命令查看磁盘列表。如果能看到 onedrive:/data 或类似的条目,说明挂载成功。

第五步:设置开机自动挂载 #

为了避免每次服务器重启后都需手动挂载,我们可以创建一个 systemd 服务来实现开机自动运行。

  1. 创建服务文件

    sudo nano /etc/systemd/system/rclone-mount.service
    
  2. 粘贴服务配置: 将以下内容粘贴到编辑器中。请注意修改 UserExecStart 中的路径为你自己的配置。

    [Unit]
    Description=RClone Mount for OneDrive
    AssertPathIsDirectory=/mnt/odr
    After=network-online.target
    
    [Service]
    Type=simple
    # 修改为你的系统用户名,非 root 用户请确保有挂载点目录的权限
    User=root
    # ExecStartPre=/bin/mkdir -p /mnt/odr # 如果你不确定目录是否存在,可以取消此行注释
    ExecStart=/usr/bin/rclone mount onedrive: /mnt/odr \
            --allow-other \
            --dir-cache-time 72h \
            --vfs-cache-mode writes \
            --log-file /var/log/rclone.log \
            --log-level INFO \
            --umask 002
    Restart=on-abort
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    

    参数解释:

    • After=network-online.target: 确保在网络连接建立之后再执行挂载。
    • User: 运行此服务的系统用户。
    • --vfs-cache-mode writes: 开启VFS文件缓存(写入模式),可以显著提升文件读写性能和兼容性,强烈建议开启。
    • --dir-cache-time: 目录结构缓存时间,减少API请求。
    • --log-file: 指定日志文件路径,方便排错。
    • --umask: 设置挂载点中文件的权限掩码。
  3. 启用并启动服务

    sudo systemctl daemon-reload # 重新加载 systemd 配置
    sudo systemctl enable --now rclone-mount.service # 设置开机自启并立即启动服务
    
  4. 最后验证

    • 重启服务器 sudo reboot
    • 待服务器重连后,执行 df -h 检查 OneDrive 是否已自动挂载。

All is well.