文章首发于个人公众号:「阿拉平平」
Rclone 是一个由 Golang 编写的命令行工具,用于同步各云存储间目录和文件。官方将其描述为 rsync for cloud storage
,即云存储版的 rsync。
本文将演示如何通过 Rclone 同步 FTP 文件到阿里云 OSS。
服务准备
在同步文件前,我已经准备好了存储服务:
服务 | 说明 |
---|---|
FTP | 部署在主机 192.168.10.173 上。用户:test。 |
OSS | 阿里云对象存储。名称:rclone-oss。 |
存储服务的信息在配置 Rclone 时会用到。在配置前,我们先安装下 Rclone。
安装
Rclone 支持多平台运行,这里我安装在一台 CentOS 虚拟机上,采用二进制包安装。
下载并解压:
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
# 目前我下载版本为 v1.50.2
cd rclone-v1.50.2-linux-amd64
复制二进制文件:
cp rclone /usr/bin/
chown root:root /usr/bin/rclone
chmod 755 /usr/bin/rclone
安装帮助手册:
mkdir -p /usr/local/share/man/man1
cp rclone.1 /usr/local/share/man/man1/
mandb
接下来就可以配置 Rclone 了。
配置
Rclone 的配置向导相当友好,可以通过命令 Rclone config
进行配置,输入 n
新建:
rclone config
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name>
配置 FTP
我们先创建 FTP 配置,名称定为 ftp:
name> ftp
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / 1Fichier
\ "fichier"
2 / Alias for an existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Citrix Sharefile
\ "sharefile"
9 / Dropbox
\ "dropbox"
10 / Encrypt/Decrypt a remote
\ "crypt"
11 / FTP Connection
\ "ftp"
12 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
13 / Google Drive
\ "drive"
14 / Google Photos
\ "google photos"
15 / Hubic
\ "hubic"
16 / JottaCloud
\ "jottacloud"
17 / Koofr
\ "koofr"
18 / Local Disk
\ "local"
19 / Mail.ru Cloud
\ "mailru"
20 / Mega
\ "mega"
21 / Microsoft Azure Blob Storage
\ "azureblob"
22 / Microsoft OneDrive
\ "onedrive"
23 / OpenDrive
\ "opendrive"
24 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
25 / Pcloud
\ "pcloud"
26 / Put.io
\ "putio"
27 / QingCloud Object Storage
\ "qingstor"
28 / SSH/SFTP Connection
\ "sftp"
29 / Transparently chunk/split large files
\ "chunker"
30 / Union merges the contents of several remotes
\ "union"
31 / Webdav
\ "webdav"
32 / Yandex Disk
\ "yandex"
33 / http Connection
\ "http"
34 / premiumize.me
\ "premiumizeme"
Storage>
如上所示,Rclone 支持许多存储,这里输入 11
,即 FTP:
Storage> 11
** See help for ftp backend at: https://rclone.org/ftp/ **
FTP host to connect to
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Connect to ftp.example.com
\ "ftp.example.com"
host>
之后会要求输入 host、 user、port、password 和 tls,这个根据实际情况设置即可。确认设置无误后,输入 y
:
Remote config
--------------------
[ftp]
type = ftp
host = 192.168.10.173
user = test
port = 21
pass = *** ENCRYPTED ***
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
FTP 配置完成后,输入 q
退出:
Current remotes:
Name Type
==== ====
ftp ftp
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> q
配置 OSS
再添加 OSS 配置,名称定为 oss。受限于篇幅,OSS 配置我简单贴下:
rclone config
e/n/d/r/c/s/q> n
name> oss
Storage> 4 # S3
provider> 2 # Alibaba
env_auth> 1 # false
access_key_id> <your_access_key_id> # 输入 access_key_id
secret_access_key> <your_secret_access_key> # 输入 secret_access_key
endpoint> 1 # oss-cn-hangzhou.aliyuncs.com 按实际情况选择
acl> 1 # private 按实际情况选择
storage_class> 1 # 默认即可
Edit advanced config? (y/n) n # no 高级配置,这里没有配置
配置完成后,信息会保存到 $HOME/.config/rclone/rclone.conf
。如果之后要变更配置信息,可以通过向导修改,也可以直接编辑该文件。
实例
由于 FTP 是新部署的,目前还没有目录和文件,所以先上传些文件到 FTP:
[root@rclone ~]# rclone copy /root/package ftp:package
上述命令会将 /root/package
下的文件上传到 FTP 的 package 目录(FTP 上目录不存在则创建)。通过 rclone ls
查看:
[root@rclone ~]# rclone ls ftp:
6082560 package/Redis-x64-3.2.100.msi
8799579 package/apache-maven-3.5.3-bin.tar.gz
1016311 package/nginx-1.13.12.tar.gz
36667596 package/zookeeper-3.4.12.tar.gz
可以看到,文件已上传到 FTP。现在将 FTP 中的文件同步到 OSS。执行以下命令:
[root@rclone ~]# rclone sync ftp: oss:rclone-oss
同步会花费一些时间,运行完成后,查看 oss 下的文件:
[root@rclone ~]# rclone ls oss:rclone-oss
6082560 package/Redis-x64-3.2.100.msi
8799579 package/apache-maven-3.5.3-bin.tar.gz
1016311 package/nginx-1.13.12.tar.gz
36667596 package/zookeeper-3.4.12.tar.gz
除了同步,Rclone 还提供了 mount
命令,允许将远程存储挂载到本地目录。不过进程会在前台运行,需要将其转到后台:
[root@rclone ~]# nohup rclone mount oss:rclone-oss /mnt/rclone-oss/ > /dev/null 2>&1 &
可以看到,OSS 已挂载到 /mnt/rclone-oss
下:
[root@rclone ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 36G 7.2G 29G 20% /
devtmpfs 710M 0 710M 0% /dev
tmpfs 722M 0 722M 0% /dev/shm
tmpfs 722M 9.6M 712M 2% /run
tmpfs 722M 0 722M 0% /sys/fs/cgroup
/dev/sda1 1014M 132M 883M 14% /boot
tmpfs 145M 0 145M 0% /run/user/0
oss:rclone-oss 1.0P 0 1.0P 0% /mnt/rclone-oss
写在后面
Rclone 是一个功能很强大的命令行工具,支持在多平台上使用。友好的配置向导与易懂的子命令操作方式都使得 Rclone 几乎没有上手成本。
如果在使用过程中遇到问题的话,除了 rclone --help
获取帮助,也可以查询 Rclone 的官方文档,资料非常齐全。
References
[1] GitHub: https://github.com/rclone/rclone
[2] Rclone Website: https://termux.com/https://rclone.org/
[3] Rclone – Sync Files Directories from Different Cloud Storage: https://www.tecmint.com/rclone-sync-files-from-cloud-storage/
有疑问加站长微信联系(非本文作者)