原文地址:云存储技术的神器--rclone
云存储技术的神器--rclone
今天我们要推荐一款运维必备工具--rclone。
官网地址:Rclone
Rclone是什么?
Rclone,即"rsync for cloud storage",是一款专业的用于管理和同步云储存数据的开源命令行工具。通过该工具,用户不仅可以在各类型云盘之间拷贝、同步数据,还能支持资源占用低,速度快,稳定性好等一系列优点。
用户称 Rclone 为“云存储的瑞士军刀” 、 “无异于魔法的科技” 。
Rclone 具有强大的云等同于 unix 命令 rsync、cp、mv、mount、ls、ncdu、tree、rm 和 cat。Rclone 熟悉的语法包括 shell 管道支持和--dry-run保护。它在命令行、脚本或通过其API 使用。
Rclone多种文件传输协议,支持SFTP,HTTP,WebDAV,FTP和DLNA。Rclone是一个成熟的开源软件,最初受rsync的启发并采用Golang编写。其文档和社区也都非常好,提供广泛和友好的使用用例。
运维为什么必备Rclone呢?
数据存储正在迎来云服务时代,而许多人同时使用多个不同平台的云储存服务进行数据备份是很常见的事情。这是因为不同的云服务商在定价、速度、存储位置、隐私政策等方面都会有所差异。如果在每次需要迁移文件或者备份文件时,都手动登录不同的云端进行操作无疑是极其繁琐的。
作为一种全能型云存储解决方案,Rclone可帮助用户轻松实现跨平台的文件传输与同步,省去了手动下载上传的麻烦,并且支持30+种不同类型的云服务,涵盖了主流的Google Drive, Dropbox, OneDrive,阿里云OSS,腾讯COS,等等。
Rclone的主要功能
数据复制与同步:Rclone 可将文件从一个位置复制到另一个位置,这可以是两个不同的云储存提供商,也可以是本地与云之间。
挂载云存储空间为本地磁盘:Rclone 还允许你将远程的云储存挂载为本地磁盘,就像在操作本地磁盘一样进行读写,给你带来无缝体验。
支持加密传输:Rclone 支持用密码对文件进行加密传输,保护您的信息安全。
Rclone安装
arm64--(适用于类似麒麟服务器)
curl -O https://downloads.rclone.org/rclone-current-linux-arm64.zip
Bash
amd64--(常见X86架构)
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
Bash
直接执行
rclone version
可以查看到版本号即安装成功。
Rclone配置
配置可以直接添加配置文件的方式或者通过进入交互式配置会话命令一步步的完成配置。
默认配置完成的后配置文件都保存在:`/root/.config/rclone/rclone.conf` 目录下。
我这里直接通过给出腾讯COS的配置文件。
官网地址:Amazon S3
[tencent-cos] # 自定义的名称
type = s3 # 存储类型,参考官方文档所有支持的类型
provider = TencentCOS # 提供商,参考官方文档或者全部
env_auth = false # 不通过环境变量配置认证
access_key_id = AKxxxxxxxx # 腾讯云后台生成的密钥key
secret_access_key = Secretxxxxxxx # 腾讯云后台生成的密钥secret
endpoint = cos.ap-chengdu.myqcloud.com # 腾讯云cos所在的地区,看你所在存储桶的公网地址
Bash
Rclone语法
# 本地到网盘
rclone [功能选项] <本地路径> <配置名称:路径> [参数] [参数]
# 网盘到本地
rclone [功能选项] <配置名称:路径> <本地路径> [参数] [参数]
# 网盘到网盘
rclone [功能选项] <配置名称:路径> <配置名称:路径> [参数] [参数]
# [参数]为可选项
举例:
# 同步本地/data/file的文件夹内容到tencent-cos存储下的/beifen文件夹中,并且排除/root/excludes.txt中指定的文件内容
rclone sync /data/file tencent-cos:/backup --exclude-from '/root/backup_file.txt'
# 两个网盘文件同步
rclone copy 配置网盘名称1:网盘路径 配置网盘名称2:网盘路径
Bash
Rclone命令列表
使用
rclone --help
可查看所有命令,这里只列出常用的命令,其他的命令可以看官方文档详细了解:
命令 | 说明 |
---|---|
rclone copy | 复制 |
rclone move | 移动,如果要在移动后删除空源目录,加上 --delete-empty-src-dirs 参数,会删除源文件类似于MV命令 |
rclone mount | 挂载 |
rclone sync | 同步:将源目录同步到目标目录,只更改目标目录 |
rclone size | 查看网盘文件占用大小 |
rclone delete | 删除路径下的文件内容 |
rclone mkdir | 创建目录 |
rclone rmdir | 删除目录 |
rclone rmdirs | 删除指定环境下的空目录。如果加上 --leave-root 参数,则不会删除根目录 |
rclone check | 检查源和目的地址数据是否匹配 |
rclone ls | 列出指定路径下的所有的文件以及文件大小和路径 |
rclone lsl | 比上面多一个显示上传时间 |
rclone lsd | 列出指定路径下的目录 |
rclone lsf | 列出指定路径下的目录和文件 |
更多适用方法可以自行探索。
官网:Rclone
常用参数
命令 | 说明 |
---|---|
-n = --dry-run | 测试运行,查看 rclone 在实际运行中会进行哪些操作 |
-P = --progress | 显示实时传输进度,500 ms刷新一次,否则默认1分钟刷新一次 |
--cache-chunk-size 5M | 块的大小,默认 5M 越大上传越快,占用内存越多,太大可能会导致进程中断 |
--onedrive-chunk-size 100M | 提高 OneDrive 上传速度适用于G口宽带服务器 |
--drive-chunk-size 64M | 提高 Google Drive 上传速度适用于G口宽带服务器 |
--cache-chunk-total-size SizeSuffix | 块可以在本地磁盘上占用的总大小 |
--transfers=N | 并行文件数,默认为4。在比较小的内存的VPS上建议调小这个参数,比如 128M 的小鸡上使用建议设置为1。 |
--config string | 指定配置文件路径,string为配置文件路径 |
--ignore-errors | 跳过错误 |
--size-only | 根据文件大小校验,不校验hash |
--drive-server-side-across-configs | 服务端对服务端传输 |
--ignore-existing | 可以忽略在网盘上已备份的文件,这相当于增量备份,配合sync命令使用 |
日志级别
rclone 有 4 个级别的日志记录,`ERROR`,`NOTICE`,`INFO` 和
DEBUG
。默认情况下,rclone 将生成ERROR
和NOTICE
级别消息。
-q
- rclone将仅生成ERROR
消息。
-v
- rclone将生成ERROR
,`NOTICE` 和INFO
消息, 推荐此项 。
-vv
- rclone 将生成ERROR
,`NOTICE`,`INFO`和DEBUG
消息。
--log-level LEVEL
- 标志控制日志级别。
过滤
我们若同步的时候需要过滤掉一些不重要的文件的话,比如程序启动日志、敏感文件。
命令 | 说明 |
---|---|
--exclude-from | 排除文件或目录列表来自某个文件指定 |
--include-from | 包含文件或目录来自某个文件指定 |
--filter-from | 文件过滤规则来自某个文件指定 |
--exclude | 排除文件或目录 |
--include | 包含文件或目录 |
--filter | 文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以+开头,排除规则以-开头 |
文件类型过滤
比如
--exclude "*.bak"
,表示排除所有.bak
结尾的文件,也可以写作--filter "- *.bak"
比如
--include "*.{png,jpg}"
,包含所有png
和jpg
文件,排除其他文件,也可以写作--filter "+ *.{png,jpg}"
--delete-excluded
删除排除的文件。需配合过滤参数使用,否则无效。
目录过滤
目录过滤需要在目录名称后面加上
/
,否则会被当做文件进行匹配。以/
开头只会匹配根目录(指定目录下),否则匹配所目录。这同样适用于文件。
--exclude ".git/"
排除所有目录下的.git
目录。
--exclude "/.git/"
只排除根目录下的.git
目录。
--exclude "{Video,Software}/"
排除所有目录下的Video
和Software
目录。
--exclude "/{Video,Software}/"
只排除根目录下的Video
和Software
目录。
--include "/{Video,Software}/**"
仅包含根目录下的Video
和Software
目录的所有内容。
大小过滤
默认大小单位为
kBytes
,但可以使用k
,`M` 或G
后缀。
--min-size
过滤小于指定大小的文件。比如--min-size 50
表示不会传输小于 50k 的文件。
--max-size
过滤大于指定大小的文件。比如--max-size 1G
表示不会传输大于 1G 的文件。
过滤规则来自某个文件
--exclude-from <规则文件>
:从文件添加包含规则
--include-from <规则文件>
:从文件添加删除规则
--filter-from <规则文件>
:从文件添加包含 / 排除规则。比如--filter-from filter-file.txt
。
环境变量
rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除
--
前缀,更改-
为_
,大写并添加前缀RCLONE_
。 环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值 。比如设置最小上传大小
--min-size 50
,使用环境变量是RCLONE_MIN_SIZE=50
。当环境变量设置后,在命令行中使用--min-size 100
,那么此时环境变量的值就会命令行覆盖,最终生效的是--min-size 100
。
命令 | 说明 |
RCLONE_CONFIG | 自定义配置文件路径 |
RCLONE_CONFIG_PASS | 若 rclone 进行了加密设置,把此环境变量设置为密码,可自动解密配置文件 |
RCLONE_RETRIES | 上传失败重试次数,默认 3 次 |
RCLONE_RETRIES_SLEEP | 上传失败重试等待时间,默认禁用,单位s、m、h分别代表秒、分钟、小时 |
CLONE_TRANSFERS | 并行上传文件数 |
RCLONE_CACHE_CHUNK_SIZE | 块的大小 |
RCLONE_CACHE_CHUNK_TOTAL_SIZE | 块可以在本地磁盘上占用的总大小 |
---|---|
RCLONE_IGNORE_ERRORS=true | 跳过错误 |
最佳实践
我们这次以阿里云示例
准备:
1、先去阿里云创建捅,目录。
2、设置定时任务或者脚本上传或同步到对象存储中。
拷贝命令-示例:
rclone copy -v node_exporter-1.0.0.linux-amd64.tar.gz oss:/ops-llody-backup/backup/
Bash
部分脚本示例
检查oss目录中文件是否在有效期内
mysql备份并上传OSS脚本
python基于SDK的一些实验
py_oss_delete.py
py_oss_download.py
注意
1、注意系统时间是否与网络时间一致,如不一致会导致连接OSS服务器时导致403,无权限现象。