通过 Rclone 将 OneDrive 挂载至个人网盘

通过 Rclone 将 OneDrive 挂载至个人网盘

通过 莫拉

部分系统的部分命令可能与文章中有所不同,请仔细斟酌。

最近放暑假了,在家里闲着无聊开始研究起了个人网盘,发现可以把国内一直很难用的 OneDrive 挂载到个人网盘上。 反正我的服务器在国外(Doge),可以利用这个优势来得到一个速度高度可用的“OneDrive”。

于是我在网上找了很久,终于找到了一个好东西——Rclone,Rclone 是一个开源的命令行程序,用于管理云存储上的文件。它是云供应商的 Web 存储接口的功能丰富的替代方案。超过40种云存储产品支持 Rclone ,包括S3对象存储,商业和消费者文件存储服务以及标准传输协议。虽然网上有很多 Rclone 教程,但是它们要么缺少了很多重要的需要注意的点,要么年代久远,软件早已更新。所以我打算写一篇所谓的教程,实际上你可以把它称为“记录”。

1.vps 安装 Rclone

安装 Rclone 我用的是脚本安装,直接在 SSH 中复制下列命令执行即可,理论上兼容大部分系统与架构。

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

安装完成后,执行命令 rclone version 检查是否正确安装,如果安装正确,会出现类似下面的信息:

rclone version #检查版本信息
rclone v1.59.0 #返回信息
- os/version: centos 7.9.2009 (64 bit)
- os/kernel: 5.15.38-1.el7.x86_64 (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.18.3
- go/linking: static
- go/tags: none

2.获取token

由于 OneDrive 第三方挂载需要登录微软账号以获取 token,而目前大多数 vps 所用的系统并没有图形界面,所以获取 token 需要利用 Windows 等其他带有图形界面的系统环境。我这里直接使用 Windows 获取 token,然后将其粘贴进 vps 上的 rclone 客户端中。

Windows 下载地址 点这里(1.59版本)

下载后解压,然后在解压后的目录右键单击“在终端中打开”。(有些系统是“在 powershell 中打开”)

在终端中打开

输入 Rclone version【如果是 powershell,请在开头添加 ./ (之后所有在 Windows 下的操作亦如此)】 检查版本是否正确。

检查后,输入 Rclone config. 然后输入 n 创建一个新的对象,输入对象的名字,这里为 OneDrive 。也可以是其他的名字。

./rclone config
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Enter name for new remote.
name> onedrive #远程目标名称

在出来的选项中找到 Microsoft OneDrive,输入左侧的序号。(这里的序号会随着更新而发生变化)

client_id 与 client_secret 均回车跳过输入,使用 Rclone 自带的 API 与 OneDrive 交换数据。

Storage> 32 #该版本 OneDrive 是32号

Option client_id.
OAuth Client Id.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_id> #回车,不输入

Option client_secret.
OAuth Client Secret.
Leave blank normally.
Enter a value. Press Enter to leave empty.
client_secret> #回车,不输入

在出来的选项中输入左侧的序号来选择你所使用的 OneDrive 体系。我是 global ,所以选择1。Edit advanced config? 输入 n ; Use auto config? 输入 y .

Option region.
Choose national cloud region for OneDrive.
Choose a number from below, or type in your own string value.
Press Enter for the default (global).
 1 / Microsoft Cloud Global
   \ (global)
 2 / Microsoft Cloud for US Government
   \ (us)
 3 / Microsoft Cloud Germany
   \ (de)
 4 / Azure and Office 365 operated by 21Vianet in China
   \ (cn)
region> 1 #一般情况下选择1

Edit advanced config?
y) Yes
n) No (default)
y/n> n #获取token无需使用高级设置

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> y #使用自动设置

接下来,会自动打开浏览器登录页面,按照提示登录微软账户,选择同意接入。当成功获取 token 时,浏览器中会有“All done. Please go back to rclone.”字样。

设置连接类型,这里使用的是 OneDrive,所以输入1,config_driveid 请按回车跳过输入。然后会显示你的 OneDrive 账户,核对无误后输入 y.

NOTICE: Log in and authorize rclone for access
NOTICE: Waiting for code...
NOTICE: Got code
Option config_type.
Type of connection
Choose a number from below, or type in an existing string value.
Press Enter for the default (onedrive).
 1 / OneDrive Personal or Business
   \ (onedrive)
 2 / Root Sharepoint site
   \ (sharepoint)
   / Sharepoint site name or URL
 3 | E.g. mysite or https://contoso.sharepoint.com/sites/mysite
   \ (url)
 4 / Search for a Sharepoint site
   \ (search)
 5 / Type in driveID (advanced)
   \ (driveid)
 6 / Type in SiteID (advanced)
   \ (siteid)
   / Sharepoint server-relative path (advanced)
 7 | E.g. /teams/hr
   \ (path)
config_type> 1 #设置连接类型

Option config_driveid.
Select drive you want to use
Choose a number from below, or type in your own string value.
Press Enter for the default (bb8aa980707d4027).
 1 /  (personal)
   \ (bb8aa980707d4027)
config_driveid>

Drive OK? #确认信息是否正确

Found drive "root" of type "personal"
URL: https://onedrive.live.com/?cid=bb8aa980707d4027

y) Yes (default)
n) No
y/n> y #输入确认信号

然后命令提示符中会出现 token ,注意,token 的开头是 {“access_token”: ,结尾是 “expiry”:”你当前的时间+你当前的时区”},要保证全部复制。

3.vps 配置

vps 端的配置方法和 Windows 端大体一样,唯一的不同就是 Use auto config? 需要输入 n,然后粘贴刚刚在 Windows 端生成的 token.

配置好 vps 端的 rclone 后,安装其所需的 FUSE 依赖。

yum -y install fuse

创建挂载目录,如果使用网盘,需挂载至指定目录。我这里使用的是 kodcloud 1.32 版本。

mkdir -p /www/wwwroot/pan.wljay.cn/data/files/onedrive #不一致的系统挂载目录不一致,需要自己指定

4.挂载 OneDrive

输入挂载命令

  • #remote_name 是 vps 端 rclone 的 remote 名称
  • #onedrive_path 是你想挂载的 OneDrive 目录
  • #local_path 是 OneDrive 挂载的本地位置
rclone mount #remote_name:#onedrive_path #local_path

挂载命令后可加入不同的参数,列出几个常用的参数。

–allow-other #允许非当前 rclone 用户访问资源(建议)

–vfs-cache-mode full #开启 VFS 文件缓存(建议)

–vfs-cache-max-size 10G #VFS 文件缓存上限大小

–vfs-cache-max-age 24h #VFS 文件缓存时间

–daemon #以后台方式运行(建议)

–vfs-read-chunk-size-limit 150m #分块读取大小,可提高文件读取速率

–buffer-size 100M #内存缓存,建议按 VPS 配置设置

–attr-timeout 5m #文件属性缓存大小,如果 VPS 配置比较低,亦可适当提高此值

mount 命令加上参数后就是一条可直接使用的命令。

rclone mount #remote_name:#onedrive_path #local_path --allow-other --vfs-cache-mode full --vfs-cache-max-size 10G --vfs-cache-max-age 24h --daemon --vfs-read-chunk-size-limit 150m --buffer-size 100M

执行后可使用 df -h 查看是否挂载成功,如果成功,挂载的磁盘列表中将出现 #remote_name.

df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        452M     0  452M   0% /dev
tmpfs           490M   16K  490M   1% /dev/shm
tmpfs           490M  6.8M  483M   2% /run
tmpfs           490M     0  490M   0% /sys/fs/cgroup
/dev/vda1        30G   19G  9.4G  67% /
tmpfs            98M     0   98M   0% /run/user/0
onedrive:files  5.0T  2.1G  5.0T   1% /www/wwwroot/pan.wljay.cn/data/files/onedrive

5.相关配置

开机自动挂载

建立一个新的 systemd 配置文件,定义开机所执行的动作。

cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
After=network-online.target
 
[Service]
User=root
Type=simple
ExecStart=/usr/bin/rclone mount #remote_name:#onedrive_path #local_path --allow-other --vfs-cache-mode full --vfs-cache-max-size 10G --vfs-cache-max-age 24h --daemon --vfs-read-chunk-size-limit 150m --buffer-size 100M
ExecStop=/usr/bin/fusermount -qzu #local_path

 [Install]
WantedBy=default.target
EOF

开启开机自启。

systemctl enable rclone

到这里,你应该就可以在云服务对应的挂载页面下找到你的 OneDrive 文件夹了。

祝你好运~

#参考

本篇文章将在近期更新。

将添加更多进阶内容。

1 条回复

  1. GOD 的头像
    GOD

    Who am i?

发表回复

必填项已用 * 标注。