1.概述
Rclone官网
Rclone是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。
Rclone只支持国外的一些云存储,因为 Google Drive 无法在大陆地区访问,如果要使用 Rclone 挂载 Google Drive 就需要使用国外的服务器。
本文只介绍同步 Google Drive 的方法,其他云存储请自行测试。
2.rclone能为您做什么?
Rclone可帮助您:
- 将文件备份(和加密)到云存储
- 从云存储还原(和解密)文件
- 将云数据镜像到其他云服务或本地
- 将数据迁移到云,或在云存储供应商之间迁移
- 将多个加密的,缓存的或多样化的云存储作为磁盘挂载
- 分析和使用占了云存储中保存的数据LSF,ljson,大小,ncdu
- 将文件系统联合在一起以将多个本地和/或云文件系统呈现为一个
特征
- 转账
- 始终检查MD5,SHA1哈希是否具有文件完整性
- 时间戳记保留在文件中
- 可以随时重启操作
- 可以往返于网络,例如两个不同的云提供商
- 可以使用多线程下载到本地磁盘
- 将新文件或更改的文件复制到云存储
- 同步(单向)以使目录相同
- 验证后将文件移动到云存储中,删除本地
- 检查哈希以及丢失/多余的文件
- 将您的云存储挂载为网络磁盘
- 通过HTTP /WebDav /FTP /SFTP /dlna服务本地或远程文件
- 基于实验Web的GUI
3.安装
先进行挂载依赖 fuse
的安装,不然挂载的时候会出错
yum -y install fuse
以下提供两种方法安装选一种就可以
1.官方安装脚本安装,请先自行安装 curl
curl https://rclone.org/install.sh | sudo bash
2.下载压缩包安装,提取并解压缩
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
安装手册页
sudo mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1/
sudo mandb
安装完成
4.常用选项参数
配置命令
rclone config
配置文件所在目录
~/.config/rclone/rclone.conf
挂载命令
rclone mount <网盘名称>:<网盘路径> <本地路径> <参数> --daemon
卸载命令
fusermount -qzu <本地路径>
一些命令参数
rclone copy source:path dest:path
# 从源文件拷贝到目的,不会删除目的的文件,会跳过未变更的文件,基于大小和修改时间或MD5值判断是否变更过。
rclone sync source:path dest:path
# 将目的文件夹同步成和原文件夹完成相同,会删除目的文件夹中的其他文件,可以先用 --dry-run 参数运行,查看哪些文件会被删除和变更。
rclone move source:path dest:path
# 移动文件夹,对于少量文件移动到有大量文件的目的,可以使用 --no-traverse 参数加速。
rclone purge remote:pat
# 删除 path 及其中的所有内容。
rclone mkdir remote:path [flags]
# 如果路径不存在,则创建
rclone rmdir remote:path [flags]
# 删除空的存储桶,如果存储桶非空,可以使用 rclone purge
rclone check source:path dest:path [flags]
# 根据文件大小以及 hash 值对源和目的进行校验(md5和sha1),--size-only 只对比大小;--download 下载下来对比;--one-way,根据源端的数据列表对比; --checksum ,进行 size, checksum 校验;默认,进行大小和修改时间校验。
rclone ls remote:path [flags]
# 查看对象大小和路径;lsl,包括修改时间;lsd,列出目录;lsjson,以 json 格式输出。
rclone lsd remote:path [flags]
# 列出路径下的目录或存储桶
rclone delete remote:path [flags]
# 删除 path 下符合条件的对象
rclone size remote:path [flags]
# 查看远端的文件数目和总大小
rclone rcat remote:path [flags]
# 将标准输出复制到远程文件中
5.开始配置及挂载
输入配置命令
rclone config
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> google
按n
添加新配置并输入名称
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, Tencent COS, 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 / In memory object storage system.
\ "memory"
17 / Jottacloud
\ "jottacloud"
18 / Koofr
\ "koofr"
19 / Local Disk
\ "local"
20 / Mail.ru Cloud
\ "mailru"
21 / Mega
\ "mega"
22 / Microsoft Azure Blob Storage
\ "azureblob"
23 / Microsoft OneDrive
\ "onedrive"
24 / OpenDrive
\ "opendrive"
25 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
26 / Pcloud
\ "pcloud"
27 / Put.io
\ "putio"
28 / QingCloud Object Storage
\ "qingstor"
29 / SSH/SFTP Connection
\ "sftp"
30 / Sugarsync
\ "sugarsync"
31 / Tardigrade Decentralized Cloud Storage
\ "tardigrade"
32 / Transparently chunk/split large files
\ "chunker"
33 / Union merges the contents of several upstream fs
\ "union"
34 / Webdav
\ "webdav"
35 / Yandex Disk
\ "yandex"
36 / http Connection
\ "http"
37 / premiumize.me
\ "premiumizeme"
38 / seafile
\ "seafile"
Storage>13
选一个要配置的存储类型我们选 **13**
Google Drive
client_id> #可为空直接回车
client_secret #可为空直接回车
rclone从驱动器请求访问时应该使用的范围。
输入一个字符串值。按 Enter 表示默认值 ("")。
从下面的数字中选择一个数字,或者输入你自己的值。
1 / 完整访问所有文件,不包括应用程序数据文件夹。
\ "驱动器"
2 / 只读访问文件元数据和文件内容。
\ "drive.readonly"
/ 只访问rclone创建的文件。
3 | 这些在驱动网站中可见。
| 当用户取消对应用程序的授权时,文件授权将被撤销。
\ "drive.file"
/ 允许对应用程序数据文件夹进行读写访问。
4 | 这在驱动器网站上是看不到的。
\ "drive.appfolder"
/ 允许对文件元数据进行只读访问,但不允许对文件元数据进行只读访问。
5 |不允许任何读取或下载文件内容的权限。
\ "drive.metadata.readonly"
scope>1
访问权限我们选 1
root_folder_id> #可为空直接回车
service_account_file> #可为空直接回车
Edit advanced config? (y/n)
y) Yes
n) No (default)
#我们选No
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
#这一项我们选No
输入NO后会给出一个URL网址,先登入自己的Google Drive,然后复制这段URL网址,
在当前Google Drive页面下浏览器粘贴这一段URL回车
然后会提示 “rclone”想要访问您的 Google 帐号“
选择允许,后会出现一段代码
复制代码粘贴到 Enter verification code>
回车
Please go to the following link: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=123456789654.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=RAR5TEm_rx5GhfSD1NIpMQ
Log in and authorize rclone for access
Enter verification code>4/1AY0e-g62iXTPrx9CFtKeBpZs9E8DyUrLG1..........
Configure this as a team drive?
y) Yes
n) No (default)
要不要选择团队共享盘
那种无限空间的共享盘合作我们先选NO
[google]
type = drive
scope = drive
token = {"access_token":"ya29.a0AfH6SM......}
#生成的配置
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d>
#确定配置我们选yes
Name Type
==== ====
google drive
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
完成配置
挂载
创建一个用来挂载的目录
mkdir /google
挂载的命令
rclone mount name: /google --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
name
是配置名称 /google
是我们刚才创建用来挂载的目录
那我们就输入以下命令来挂载
rclone mount google: /google --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
执行上面的命令会把整个谷歌网盘都挂载过来,那有时候误操作把网盘其他文件误删掉就不好了,那我们就先在谷歌网盘里创建一个文件夹,挂载到创建的文件夹里这样就不会影响到网盘其他文件
先自行在网盘里创建一个文件夹如,data
然后执行如下命令
rclone mount google:data /google --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
这样就只挂载网盘里的 data
目录了
执行了挂载命令行终端可能会卡住,关掉重新打开
输入 df -h
来确认
df -h | grep google
google:data 15G 56M 15G 1% /google
挂载后就可以像操作本地目录一样操作 Google Drive
挂载之后网盘里的文件会同步到挂载目录,要是服务器挂载目录里有文件的话就会被删掉,只会存在网盘里有的文件。 请先确保挂载目录为空,或转移目录里的重要文件。
服务器与Google Drive各自生成或创建的文件都会同步
但Google Drive删掉文件,服务器里文件还会继续存在
服务器删掉文件,Google Drive对应文件也会被删掉
卸载挂载
fusermount -qzu /google
6.开机自动挂载
脚本来源:https://raw.githubusercontent.com/x91270/Centos/master/rcloned
新建脚本文件vim google.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
NAME_BIN="rclone"
### BEGIN INIT INFO
# Provides: rclone
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start rclone at boot time
# Description: Enable rclone by daemon.
### END INIT INFO
NAME="OneDrive" #rclone name名
REMOTE='Download' #远程文件夹
LOCAL='/home/OneDrive' #挂载地址
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[信息]${Font_color_suffix}"
Error="${Red_font_prefix}[错误]${Font_color_suffix}"
RETVAL=0
check_running(){
PID="$(ps -C $NAME_BIN -o pid= |head -n1 |grep -o '[0-9]\{1,\}')"
if [[ ! -z ${PID} ]]; then
return 0
else
return 1
fi
}
do_start(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN (PID ${PID}) 正在运行..." && exit 0
else
fusermount -zuq $LOCAL >/dev/null 2>&1
mkdir -p $LOCAL
sudo /usr/bin/rclone mount $NAME:$REMOTE $LOCAL --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 >/dev/null 2>&1 &
sleep 2s
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN 启动成功 !"
else
echo -e "${Error} $NAME_BIN 启动失败 !"
fi
fi
}
do_stop(){
check_running
if [[ $? -eq 0 ]]; then
kill -9 ${PID}
RETVAL=$?
if [[ $RETVAL -eq 0 ]]; then
echo -e "${Info} $NAME_BIN 停止成功 !"
else
echo -e "${Error} $NAME_BIN 停止失败 !"
fi
else
echo -e "${Info} $NAME_BIN 未运行"
RETVAL=1
fi
fusermount -zuq $LOCAL >/dev/null 2>&1
}
do_status(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info} $NAME_BIN (PID $(echo ${PID})) 正在运行..."
else
echo -e "${Info} $NAME_BIN 未运行 !"
RETVAL=1
fi
}
do_restart(){
do_stop
do_start
}
case "$1" in
start|stop|restart|status)
do_$1
;;
*)
echo "使用方法: $0 { start | stop | restart | status }"
RETVAL=1
;;
esac
exit $RETVAL
修改这一处
NAME="OneDrive" #rclone name名
REMOTE='Download' #远程文件夹
LOCAL='/home/OneDrive' #挂载地址
改为
NAME="google" #创建的配置名
REMOTE='data' #网盘里的文件夹
LOCAL='/google' #服务器本地挂载目录
添加执行权限,并写入开机自启动配置文件
chmod +x google.sh
vim /etc/rc.local
/bin/bash /root/google.sh start
重启reboot
再查看挂载上没有
df -h | grep google
google:data 15G 66M 15G 1% /google
设置完成
参考文章:
https://www.misterma.com/archives/860/
https://www.ioiox.com/archives/108.html