rclone命令解析及实战
1 rclone介绍:远程同步工具
rclone是一个开源的远程数据同步工具,由Golang编写,旨在在不同平台的文件系统和多种类型的对象存储产品之间提供数据同步功能。
- 它支持超过 40 种不同的云存储服务,包括 Amazon S3, Google Drive, Dropbox, Microsoft OneDrive, Google Cloud Storage, Amazon Drive, OpenStack Swift, Backblaze B2, Yandex Disk, SFTP, WebDAV, FTP, SFTP, Minio, Wasabi, Alibaba OSS, SwiftStack, Tencent COS, Wasabi, Yandex.Disk, Yandex.Files等等。
业界经常用rclone+alist将网盘(百度网盘、阿里网盘等)挂载到本地
rclone 支持多种文件传输方式,包括复制,同步,移动,删除文件。它还支持文件加密和压缩,支持分块上传和分块下载,可以暂停和恢复传输,支持文件的校验和合并。
rclone 的主要优势在于它的灵活性和可扩展性。它可以用来做很多事情,包括备份,文件同步,数据迁移等。它可以在各种平台上运行,包括 Windows,macOS,Linux,FreeBSD,NetBSD 等。
rclone 的配置简单,可以使用命令行或者配置文件来配置。使用 rclone 可以非常方便的操作云存储,支持的命令也非常丰富,使用起来非常方便。
主要作用:
- 将文件备份(和加密)到云存储
- 从云存储还原(和解密)文件
- 将云数据镜像到其他云服务或本地
- 将数据迁移到云,或在云存储供应商之间迁移
- 将多个、加密、缓存或不同的云存储挂载为磁盘
- 使用 lsf、ljson、size、ncdu 分析和核算云存储上保存的数据
- 将文件系统合并在一起,将多个本地和/或云文件系统呈现为一个
2 安装与配置
- 下载rclone:https://downloads.rclone.org/rclone-current-linux-amd64.zip
- 解压并配置权限
unzip rclone-current-linux-amd64.zip
# 授权
cd rclone-v1.60.0-linux-amd64/
#这里目录名称可能不一样,注意cd进入的目录即可
sudo cp rclone /usr/sbin/
sudo chown root:root /usr/sbin/rclone
sudo chmod 755 /usr/sbin/rclone
- 编写配置文件(也可以通过命令行来填写配置,但手动编写能更简洁明了,故此处演示手动编写)
mkdir -p /root/.config/rclone/
touch /root/.config/rclone/rclone.conf
vim /root/.config/rclone/rclone.conf
- 编写配置文件(此处演示配置AWS S3与SMB)
[s3_137] # 配置名称,见名之意即可
type = s3 #服务类型,为S3类型的服务
provider = AWS #供应商,我这里是AWS
env_auth = false
access_key_id = xxxx #这里对应的是aws账号access_key_id
secret_access_key = xxxxxxx #这里对应的是aws账号secret_access_key
region = ap-southeast-1 #地区,我的S3桶位于新加坡区域
endpoint = s3.ap-southeast-1.amazonaws.com #endpoint,新加坡区域
[s3_139] # 第二个挂载配置
type = s3
provider = Other
access_key_id = xxxxx
secret_access_key = xxxxx
endpoint = http://10.16.xx.xx:xxx
acl = private
bucket_acl = public-read-write
验证配置是否生效:
3 常用命令
3.1 rclone copy
将文件从源复制到目的地址,跳过已复制完成的
#rclone copy增量复制,不会删除目的端比源端多的文件 -P显示速度 源端配置名:桶名 目的端配置名:桶名
rclone copy -P s3_137:bucket01 s3:prod-public-rewards
3.2 rclone mount
挂载共享挂载到本地目录
- 如果执行命令报错: “fusermount3”: executable file not found in $PATH
rclone高版本默认mount使用的是fuse3,如果本地没有则执行下面命令安装
yum install -y fuse3 # centos
sudo groupadd fuse
# 将smb_137挂载到本地/mnt/smb目录
rclone mount smb_137: /mnt/smb
# 因为rclone的mount是阻塞性的,所以推荐使用screen终端管理神器
# # CentOS:yum install screen
# Debian/Ubuntu:apt install screen
# screen -R test_rclone
# -R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
# Ctril+a,再按d,即可保持这个screen到后台并回到主终端
# exit退出当前虚拟终端
# screen -ls 查看当前已经存在的终端
3.3 rclone sync
将源数据同步到目的地址,只更新目的地址的数据(包括新增、删除文件)
rclone sync -P s3_test:bucket-local/test_ky smb_137:test/rclone
3.4 rclone move
将源数据移动到目的地址
rclone move -P s3_test:bucket-local/test_ky/a.txt smb_137:test/rclone
Rclone delete
删除指定路径下的文件内容
rclone delete -P smb_137:test/rclone/a.txt
3.5 rclone purge
清空指定路径下所有文件数据
rclone purge -P smb_137:test/rclone/
3.6 rclone mkdir
创建一个新目录
# smb
rclone mkdir smb_137:test/rclone
# S3不支持创建空目录,所以可以通过在创建空文件来创建空目录
rclone touch s3_test:bucket-local/test_dir1/empty_file
3.7 rclone rmdir
删除空目录
rclone rmdir smb_137:test/rclone
3.8 rclone ls
列出文件、文件大小及路径
rclone ls smb_137:test/rclone
3.9 rclone lsd
列出指定路径下所有的目录/容器/桶
rclone lsd s3_test:
3.10 rclone lsl
列出指定路径下所有文件及文件修改时间、文件大小和路径
rclone lsl smb_137:test/rclone
3.11 rclone md5sum
为指定路径下的所有文件产生一个md5sum
rclone md5sum s3_test:bucket-local/test_ky
3.12 rclone sha1sum
为指定路径下的所有文件产生一个sha1sum
rclone sha1sum s3_test:bucket-local/test_ky
3.13 rclone size
获取指定路径下,文件内容总个数及大小
rclone size s3_test:bucket-local/test_ky
3.14 其他
rclone config # 以会话方式添加rclone配置
rclone version # 查看rclone版本
rclone cleanup # 清空remote
rclone dedupe # 交互式查找重复文件,进行删除/重命名操作
rclone selfupdate # 升级rclone
4 实战
4.1 rclone挂载S3
vim /root/.config/rclone/rclone.conf
配置文件:
[s3_test] # 配置名称,见名之意即可
type = s3 #服务类型,为S3类型的服务
provider = AWS #供应商,我这里是AWS
env_auth = false
access_key_id = xxxxx #这里对应的是aws账号access_key_id
secret_access_key = xxxxx #这里对应的是aws账号secret_access_key
region = ap-southeast-1 #地区,我的S3桶位于新加坡区域
endpoint = s3.ap-southeast-1.amazonaws.com #endpoint,新加坡区域
# 查看挂载点桶名:
rclone lsd s3_test: # 冒号一定不能省略
查看桶中文件及文件夹:
# 查看bucket-1桶中的文件及文件夹
rclone ls s3_test:bucket-1
4.2 rclone挂载smb
vim /root/.config/rclone/rclone.conf
配置文件:
[test_smb]
type = smb
host = 10.16.xx.xx
user = smb-test
pass = 6OtRQOZVo5bd62Z_WcYjvpAon6c4fA
domain = LOCAL
执行rclone mount挂载到本地
# 因为我用的rclone是最新版的1.65,所以默认mount使用的是fuse3
# 因此我需要先安装fuse3
yum install -y fuse3 # centos
sudo groupadd fuse
# 将smb_137挂载到本地/mnt/smb目录
rclone mount smb_137: /mnt/smb
因为rclone的mount是阻塞性的,所以推荐使用screen终端管理神器
# # CentOS:yum install screen
# Debian/Ubuntu:apt install screen
# screen -R test_rclone
# -R创建,如果之前有创建唯一一个同名的screen,则直接进入之前创建的screen
# Ctril+a,再按d,即可保持这个screen到后台并回到主终端
# exit退出当前虚拟终端
# screen -ls 查看当前已经存在的终端
# 通过命令挂载到本地
mkdir /mnt/share
sudo mount -t cifs //10.16.xx.xx/test /mnt/share -o username=smb-test,password=111111,vers=2.1,rw,mfsymlinks,domain=LOCAL
rclone ls /mnt/share
umount /mnt/share
4.3 两个挂载点之间的操作(S3与SMB)
以smb与s3为例。这里演示的是s3与smb,大家学会了之后就可以在aws的s3和自己网盘之间做备份转移等。也可以网盘与网盘之间做操作
vim /root/.config/rclone/rclone.conf
配置文件内容如下:
[s3_test]
type = s3
provider = Other
access_key_id = xxxx
secret_access_key = xxxxxx
endpoint = http://10.16.xx.xx:xxx
acl = private
bucket_acl = public-read-write
[smb_137]
type = smb
host = 10.16.xx.xx
user = smb-test
pass = 6OtRQOZVo5bd62Z_WcYjvpAon6c4fA
domain = LOCAL
①拷贝S3数据到SMB(rclone copy)
#rclone copy增量复制,不会删除目的端比源端多的文件 -P显示速度 源端配置名:桶名 目的端配置名:目录名
rclone copy -P s3_test:bucket-local/test_ky smb_137:test/
②移动SMB文件到S3(rclone move)
# 将smb test目录下的文件移动到S3
rclone move -P smb_137:test/end_dir/dir1/a.txt s3_test:bucket-local/test_ky
# 通过在s3上创建空文件的方式来创建空目录
# rclone touch s3_test:bucket-local/test_dir1/empty_file
③同步SMB与S3文件(rclone sync)
rclone sync -P s3_test:bucket-local/test smb_137:test/rclone