Rclone挂载Google Drive将文件同步到云存储

rclone.png

1.概述

Rclone官网

Rclone是一个命令行程序,用于管理云存储上的文件。它是云供应商Web存储界面的功能丰富的替代方案。超过40种云存储产品支持rclone,包括S3对象存储,业务和消费者文件存储服务以及标准传输协议。

Rclone只支持国外的一些云存储,因为 Google Drive 无法在大陆地区访问,如果要使用 Rclone 挂载 Google Drive 就需要使用国外的服务器。

本文只介绍同步 Google Drive 的方法,其他云存储请自行测试。

2.rclone能为您做什么?

Rclone可帮助您:

  • 将文件备份(和加密)到云存储
  • 从云存储还原(和解密)文件
  • 将云数据镜像到其他云服务或本地
  • 将数据迁移到云,或在云存储供应商之间迁移
  • 将多个加密的,缓存的或多样化的云存储作为磁盘挂载
  • 分析和使用占了云存储中保存的数据LSFljson大小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

# Rclone 

本文由:星际难民
实践,测试,整理发布.如需转载请注明地址 本文标题:Rclone挂载Google Drive将文件同步到云存储
地址:https://530503.xyz/articles/2020/11/28/1606555587401.html

评论

取消