前言
Rclone 是一个支持 70 多种云存储的备份工具,包括常见 S3 对象存储、WebDav、OneDrive 网盘等。设置好对应云存储后,只需通过 rclone copy 等简单的命令,即可将本地文件同步至云存储中。
一、安装
Rclone 的安装十分简单,可以选择官方提供的一键脚本一直安装,也可以直接下载二进制文件手动运行,选择其中一种方式即可
1、一键脚本
curl https://rclone.org/install.sh | sudo bashbash <(curl -Ls https://rclone.org/install.sh)或(官方)
sudo -v ; curl https://rclone.org/install.sh | sudo bash2、手动安装
进入官方文档下载对应平台架构的二进制文件
将 rclone 文件移动到 /usr/bin 目录
赋予权限
chmod 755 /usr/bin/rcloneapt install -y unzipwget https://downloads.rclone.org/rclone-current-linux-amd64.zipunzip rclone-current-linux-amd64.zipchmod 0777 ./rclone-*/rclonecp ./rclone-*/rclone /usr/bin/rm -rf ./rclone-*3、检查是否安装正确
rclone version二、获取token值
这里举例使用常用的OneDrive授权
1、首先在电脑上安装rclone
进入Rclone下载页面,点击下载Windows版本的Rclone软件,选择Intel/AMD-64Bit即可。如果是32位操作系统,那么选择32Bit的。
下载后将全部文件解压到D:\rclone文件夹
2、方法一通过rclone跳转
打开CMD命令窗口,依次输入下面两条命令。
cd /d d:\rclonerclone authorize "onedrive"第二条命令输入完回车后会自动打开浏览器,登录你的OneDrive账号,点击“是”按钮同意授权。成功后返回到CMD命令窗口就能看到长串授权码,即花括号以及里面的内容。
将授权码复制下来保存备用,有效期1个小时。
Paste the following into your remote machine --->
{"access_token":"EwCAA8l6BAAUwihrrCrmQ4wuIJX5mbj7rQla6TUAAS7oJFl1pmRc4whIlOj5am6oPQ+zf1kOcygsi5JHL2IgXh55prjh3r6P/fSZr8K9UJ58Pksh1YTJkzL/kHywyZnEvM8kDr55B1J//SXLJ1sGNsNR9vH0Rmz9xMrnl6GFrF8z+UQxi+GL3L3MpBN3NenacA0+pmVXKk8hghj64a8xxEFhlc+b0LJCp4yMg+96548752OPQwLZEPikbJ1zB5Wm5IUzuq03zNKa5lOicGET0l8zWW+itYg2Ca+mCS9DRm5e8NcPL5yiLZmRIm4vCI3pIQGKxEKghQG2lLmjMnWJj8BMotxH9Px2/XWs2TJ3BdLbuX2EjdYy8MNoBbaYXafe3uHx!UpdOwFHCiKnJqYomn*8cCFNP7RM1W8DMzXNBAlgTnuaRo6v7xjxFX3xIrXWonyCk*l1Z7glOXEmRS","expiry":"2021-09-16T15:47:47.8171297+08:00"}
<---End paste
3、方法二登录微软管理后台创建应用:
1.获取onedrive客户端Id和密钥
参考官方文档 Microsoft OneDrive (rclone.org)
1)在azure上注册新应用
访问 azure 注册应用,点击新注册

输入应用名称,选择任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox),重定向URI选择Web,并填入http://localhost:53682/,点击注册

注册成功后,点击概述,复制客户端ID备用

2)创建客户端密码
依次点击证书和密码、新客户端密码,添加客户端密码,截止期限最多24个月,点击添加


复制密钥值备用!刚创建时才能看到密钥值,如果看不到了,就删掉重新创建试试吧。
3)设置API权限
依次点击API权限、添加权限、Microsoft Graph、委托的权限,将以下权限全部勾选上 Files.Read, Files.ReadWrite, Files.Read.All, Files.ReadWrite.All, offline_access, User.Read, Sites.Read.All

最终的权限列表

2.接收许可获取token
打开CMD命令窗口,依次输入下面两条命令。
cd /d d:\rclone或直接在rclone解压目录下运行命令行,输入以下命令
.\rclone.exe authorize onedrive "应用程序(客户端)ID" "客户端密钥值"在弹出的浏览器中选择接受,回到命令行窗口,access_token已经打印屏幕上,复制token备用
三、配置 Rclone
Rclone 有提供官方的配置向导,根据提示填写对应的内容,即可生成配置文件;如果对 Rclone 配置比较熟悉的则可以直接编辑配置文件。下面分别用配置向导添加 OneDrive 网盘和配置文件直接添加 Minio S3 对象存储来进行演示
1、新手配置向导
1.输入
rclone config2.输入字母 n,来新增一个云存储
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>
3.给云存储起个名字 (后续用命令行操作时会用到)
Enter name for new remote.
name> onedrive
4.接着会出现支持的云存储列表,输入 38 来选择 OneDrive (以实际显示的顺序为准)
38 / Microsoft OneDrive
\ (onedrive)
5.Client Id 和 Client Secert 可以直接回车使用默认值
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>
6.选择 OneDrive 的类型,一般输入 1 选择 Microsoft Cloud Global
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 Vnet Group in China
\ (cn)
7.高级设置,输入 n 跳过
Edit advanced config?
y) Yes
n) No (default)
y/n>
8.下面需要打开 OneDrive 网页给 Rclone 授权,由于一般的 Linux 机器没有浏览器,所以输入 n
Use web browser to automatically authenticate rclone with remote?
* Say Y if the machine running rclone has a web browser you can use
* Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.
y) Yes (default)
n) No
9.关键步骤:将获取到的token填入下方的 config_token 中即可
Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
rclone authorize "onedrive" "xxxxxxxxxxxxxx"
Then paste the result.
Enter a value.
config_token>
10.选择你对应的onedrive的类型,一般选择1
Option config_type.
Type of connection
Choose a number from below, or type in an existing value of type string.
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)
11.选择需要使用的驱动器,根据实际因素,这里选择1
Option config_driveid.
Select drive you want to use
Choose a number from below, or type in your own value of type string.
Press Enter for the default (5008440B503864CC).
1 / OneDrive (personal)
2 / AEEE102E-CFF8-4E2A-89C6-03841FF83500 (personal)
12.后续步骤一路 y 即可,这样 OneDrive 就添加到我们的 Rclone 中了
2、进阶直接配置
输入 rclone config 后,会在 .config/rclone 目录中生成一个 rclone.conf 文件,如果我们熟悉 Rclone 配置的话,也可以直接新建编辑该文件,同样是可以生效的
以配置 Minio 为例,参照官方文档的 S3 对象存储部分,通过 vim .config/rclone/rclone.conf 编辑该文件,直接在其中填入云存储的相关配置信息即可
[minio]
type = s3
provider = Minio
env_auth = false
access_key_id = USWUXHGYZQYFYFFIT3RE
secret_access_key = MOJRH0mkL1IPauahWITSVvyDrQbEEIwljvmxdq03
region = us-east-1
endpoint = http://192.168.1.106:9000
location_constraint =
server_side_encryption =
3、检查是否配置成功
rclone lsd remote:“remote”为新增的云存储名
四、使用rclone
直接使用
完成上述配置后,就可以直接使用 rclone copy 等命令将本地文件上传到云存储中
例如下面这行命令就是拷贝AAA云存储到BBB云存储,过程中显示进度及错误信息
rclone copy AAA: BBB: -vvP定时任务
除此之外,我们还希望 Rclone 能定时运行,将文件备份到指定的云存储,这时候就需要用到 Linux 的 crontab 了
1、新建一个 sh 脚本,例如 rclone.sh,然后将上述的备份命令写入其中
#!/bin/bash
rclone copy /path/to/files minio:bucket
2、赋予运行权限
chmod 755 rclone.sh 3、添加定时任务
crontab -e0 0 * * * /root/rclone.sh >> /root/rclone.log 2>&1
4、保存后,每天的 0 点,就会自动运行 rclone.sh 脚本,将文件备份到我们指定的云存储中了
最佳实践
备份本地 /data/file 目录到腾讯云cos存储中,并设置定时任务每晚自动同步,这样可以达到定时备份重要文件上云的效果。
目录 /data/file 下创建 excludes.txt ,里面填写需要排除的文件列表。
logs/** # 排除logs下所有文件
.bak # 排除.bak结尾的文件
.zip # 排除.zip结尾的文件
配置腾讯云cos在此忽略,直接编写 rclone 命令,测试执行是否同步。
rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1手动执行一把,然后查看 tail -f /root/rclone.log 是否输出日志了,只要没报错则成功。
配置定时任务,每天自动执行
执行
crontab -e # 打开定时任务列表,跳到最后新起一行添加步骤2.成功的命令并保存,内容如下:(表示每晚3点30分进行同步)
30 4 * * * rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1
执行以下重启定时任务生效
systemctl restart cron.service 达到执行时间后检查 /root/rclone.log 下的日志保证没问题。
五、相关说明
语法
# 本地到网盘
rclone [功能选项] <本地路径> <配置名称:路径> [参数] [参数]
# 网盘到本地
rclone [功能选项] <配置名称:路径> <本地路径> [参数] [参数]
# 网盘到网盘
rclone [功能选项] <配置名称:路径> <配置名称:路径> [参数] [参数]
# [参数]为可选项
举例
# 同步本地/data/file的文件夹内容到tencent-cos存储下的/beifen文件夹中,并且排除/root/excludes.txt中指定的文件内容
rclone sync /data/file tencent-cos:/beifen --exclude-from '/root/excludes.txt'
# 两个网盘文件同步
rclone copy 配置网盘名称1:网盘路径 配置网盘名称2:网盘路径
操作命令(功能选项)
使用 rclone --help 可查看所有命令
常用的rclone命令有:
功能介绍举例
rclone config
开启一个交互式的配置会话。命令格式如下:
rclone configrclone copy
将文件从源复制到目的地址,跳过已复制完成的。命令格式如下:
rclone copy source:sourcepath dest:destpsth注:1、rclone copy复制总是指定路径下的数据;而不是当前目录。
2、–no-traverse 标志用于控制是否列出目的地址目录。
rclone sync
rclone sync source:path dest:path注:1、同步数据时,可能会删除目的地址的数据;建议先使用–dry-run标志来检查要复制、删除的数据。
2、同步数据出错时,不会删除任何目的地址的数据。
3、rclone sync同步的始终是path目录下的数据,而不是path目录。(空目录将不会被同步)
rclone move
rclone move source:path dest:path注:1、同步数据时,可能会删除目的地址的数据;建议先使用–dry-run标志来检查要复制、删除的数据。
rclone purge
清空path目录和数据。命令格式如下:
rclone purge remote:path注:1、此命令,include/exclude 过滤器失效。
2、删除path目录下部分数据,请使用rclone delete 命令
rclone mkdir
创建path目录。命令格式如下:
rclone mkdir remote:pathrclone rmdir
删除一个空目录。命令格式如下:
rclone rmdir remote:path注:1、不能删除非空的目录,删除非空目录请使用 rclone purge。
rclone check
检查源和目标地址文件是否匹配。命令格式如下:
rclone check source:path dest:path注:1、–size-only标志用于指定,只比较大小,不比较MD5SUMs。
rclone ls
列出指定path下,所有的文件以及文件大小和路径。命令格式如下:
rclone ls remote:pathrclone lsd
列出指定path下,所有目录、容器、桶。命令格式如下:
rclone lsd remote:pathrclone delete
删除指定目录的内容。命令格式如下:
rclone delete remote:path注:1、不同于rclone purge,rclone delete 可使用 include/exclude 过滤器选择删除文件内容。
eg:删除文件大小大于100M的文件
# 先检查哪些文件将被删除
rclone --min-size 100M lsl remote:path # 使用rclone lsl 列出大于100M的文件
rclone --dry-run --min-size 100M delete remote:path # 使用--dry-run 检查将要被删除的文件
# 使用 rclone delete 进行文件删除
rclone --min-size 100M delete remote:path
rclone size
获取指定path下所有数据文件的总大小。命令格式如下:
rclone size remote:pathmore
更多rclone命令,详见http://rclone.org/commands/
常用参数
日志
rclone 有 4 个级别的日志记录,ERROR,NOTICE,INFO 和 DEBUG。默认情况下,rclone 将生成 ERROR 和 NOTICE 级别消息。
过滤
我们若同步的时候需要过滤掉一些不重要的文件的话,比如程序启动日志、敏感文件。
文件类型过滤
目录过滤
目录过滤需要在目录名称后面加上 /,否则会被当做文件进行匹配。以 / 开头只会匹配根目录(指定目录下),否则匹配所目录。这同样适用于文件。
大小过滤
默认大小单位为 kBytes ,但可以使用 k ,M 或 G 后缀。
过滤规则来自某个文件
filter-file.txt 示例:
- secret*.jpg
+ .jpg
+ .png
+ file2.avi
- /dir/Trash/**
+ /dir/**
- *
环境变量
rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除 -- 前缀,更改 - 为 _ ,大写并添加前缀 RCLONE_ 。环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值。
比如设置最小上传大小 --min-size 50 ,使用环境变量是 RCLONE_MIN_SIZE=50 。当环境变量设置后,在命令行中使用 --min-size 100 ,那么此时环境变量的值就会命令行覆盖,最终生效的是 --min-size 100 。
参考资料:
https://zhichao.org/posts/rclone
https://www.kedr.cc/posts/4034988835/
https://cloud.tencent.com/developer/article/1150536?policyId=1004
https://softlns.github.io/2016/11/28/rclone-guide/