使用AutoRclone转存Google Drive资源

Posted by Ray on February 15, 2020

AutoRclone介绍

AutoRclone是一个用Python写的小程序的集合,有以下功能:

  1. 利用service accounts来替代普通Google账号进行拷贝/上传(借鉴folderclone);
  2. 通过rclone rc来做到对Rclone任务的监、控;
  3. 可以用Google Groups的形式对成百上千的service accounts进行管理。

可以实现以下资源转存:

  1. 从本地到 Team Drive,
  2. 从公共分享目录到 Team Drive,
  3. 从 Team Drive 到 Team Drive。

下载安装程序

对于Windows和Linux分别用以下方式安装相关脚本

windows下安装

软件都建议安装最新版

首先安装Python

安装Rclone,win版的需要解压,并添加解压目录到系统环境变量(我的电脑右键—属性—高级系统设置—环境变量—添加解压目录到系统环境变量列表里的Path里面—保存ok)。

然后下载AutoRclone并解压,进入cmd或PowerShell中切换到AutoRclone的目录,输入以下命令安装相关Python依赖包:

1
pip3 install -r requirements.txt

Linux下安装

由于本教程是在 CentOS7 下进行测试,部分命令对其他系统并不完全通用,如果是Debian/Ubuntu下,请将 yum 命令改成 apt-get 命令

安装Python

检查是否安装Python

1
python -V

如果未安装或者版本过低建议安装Python3.8

Python有提供各个版本的源代码下载,我这边用的是 Python3.8 版本

1
2
3
4
5
6
7
8
yum -y install yum-utils
yum-builddep python
curl -O https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
tar xf Python-3.8.0.tgz
cd Python-3.8.0
./configure
make
make install

设置python3为默认版本

1
2
3
4
5
vi /etc/profile.d/python.sh         #编辑用户自定义配置,输入alias参数
​
alias python='/usr/local/bin/python3.8'
​
source /etc/profile.d/python.sh     #重启会话使配置生效

安装pip

1
2
3
wget https://bootstrap.pypa.io/get-pip.py
​
python get-pip.py -i https://pypi.tuna.tsinghua.edu.cn/simple/

下载安装程序

安装screen,git和最新的Rclone

1
sudo yum install screen git && curl https://rclone.org/install.sh | sudo bash

然后从Github下载代码并安装相关Python依赖包

1
sudo git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && pip3 install -r requirements.txt

proxifier全局代理(可选)

如果会使用代理此步骤可跳过

需要自备梯子,然后安装proxifier

添加proxifier的Proxy server

  • 操作路径:菜单栏 -> Profile -> proxy servers -> add
  • Server 填写127.0.0.1
  • Port 填写代理的端口号
  • Protocol 选择SOCKS Version5
  • 以上信息填写完毕后,点击 Check,如果成功点击OK保存

配置Proxification Rules

  • 操作路径:菜单栏 -> Profile -> Proxification Rules
  • Name 任意填写
  • Enabled 要勾选上
  • Applications 填写需要代理的进程名,如powershell.exe,多个之间用分号分割。
  • Action 选择刚才我们创建的 Proxy SOCKS5 127.0.0.1
  • 点击OK保存即可
  • 如果你要代理所有网络,可以直接在 Proxification Rules 列表上修改 Default Rules 的 Action

生成service accounts

以下步骤如果输入python3没有反应,请改成python或者py3

开启Drive API(点击Enable the Drive API——DOWNLOAD CLIENT CONFIGURATION)将下载的credentials.json保存到AutoRclone目录下面

注意:开启Drive API会创建一个名为Quickstart的项目,请勿删除。

现需要创建新的项目并在新的项目中创建service accounts,直接运行(自己需要几个项目就把数字2改成几,每个账号创建项目数量是有上限的)

1
python3 gen_sa_accounts.py --quick-setup 2 --new-only
  • 如果你已经有N个项目会额外创建2个项目(项目N+1到项目N+2)
  • 开启相关的服务
  • 创建200个service accounts(2个项目,每个项目100个)
  • 将200个service accounts的授权文件下载到accounts文件夹下面

顺利完成后,AutoRclone文件下面的accounts文件夹下会有对应数量的json文件。

将service accounts加入到Team Drive

将service accounts加入到源Team Drive

1
python3 add_to_team_drive.py -d SharedTeamDriveSrcID

将service accounts加入到目标Team Drive

1
python3 add_to_team_drive.py -d SharedTeamDriveDstID

另外一种方法

这个方法对于G Suite管理员账号非常方便,由于本人是普通Google账号所以并未尝试,所以以下均为照搬

可以先将service accounts加入Google Groups,然后将Google Groups加入到Team Drive,这样子可以方便管理service accounts,也可以让Team Drive容纳更多的service accounts

对于G Suite管理员

  1. 按照官方步骤开启Directory API,将生成的json文件保存到credentials文件下。
  2. 控制面版里面创建一个群组,创建好你会获得一个类似域名邮箱的地址[email protected]
  3. 利用API将service accounts加入Google Groups python3 add_to_google_group.py -g [email protected]

如果想看参数的具体含义,直接运行python3 add_to_google_group.py -h

对于普通Google账号

直接创建一个Google Group然后手动地将service accounts对应的邮箱地址(可以在json认证文件中找到)挨个加进去。但每次只能加10个,每24小时只能加100个。

然后直接将Google Groups地址[email protected]或者[email protected]加入你的源Team Drive(tdsrc)和目标Team Drive(tddst)

开始拷贝/上传

如果你以上的准备工作都做好了,那么以后你只需要将项目文件夹拷贝到任何地方,进行此拷贝/上传步骤就可以了

拷贝

1
python3 rclone_sa_magic.py -s SourceID -d DestinationID -dp DestinationPathName -b 1 -e 600
  • 如果想看参数的具体含义,直接运行python3 rclone_sa_magic.py -h
  • 特别地,如果想多开,请用-p参数给不同的复制任务指定不同的端口
  • 如果发现拷贝内容明显少于源Team Drive里面的内容,那么你可能碰到Bug了,请给上运行参数再加上–disable_list_r
  • 如果你一开始就碰到了

    Failed to rc: connection failed: Post http://localhost:5572/core/stats: dial tcp :5572: connectex: No connection could be made because the target machine actively refused it.

那么可能是权限或者路径导致Rclone任务都没跑起来,请观察日志文件log_rclone.txt,并结合如下简单命令检查出原因

1
2
rclone --config rclone.conf size --disable ListR src001:
rclone --config rclone.conf size --disable ListR dst001:

上传

1
python3 rclone_sa_magic.py -sp YourLocalPath -d DestinationID -dp DestinationPathName -b 1 -e 600

每个service account的总的时间消耗是校验时间+拷贝时间,如果你的拷贝任务比较大的话建议将其(按文件夹)稍微拆分,挨个或者并行完成,这样能极大减小每次切换service accounts后不必要的校验时间。另外关于拷贝速度,API调用限制了每秒不超过10次调用,每次拷贝固定数量的文件数目,所以如果你的任务中的文件比较小的话,拷贝速度可能是每秒几百MB,文件都比较大的话,拷贝速度可能是几十GB/s。

如果你想检查是否拷贝完全?或者发现丢文件了?可以做以下检查:

1
2
rclone --config rclone.conf size src001:
rclone --config rclone.conf size dst001:

如果发现目标盘比源盘体积还要大,那么对目标盘进行去重;如果发现目标盘比源盘少文件了,那么再拷贝一次;如果还是少,那么就是源盘里面的有重复文件了,直接对其进行去重复。去重命令:

1
2
rclone --config rclone.conf dedupe dst001:
rclone --config rclone.conf dedupe src001:

参考文章

[1].AutoRclone-github仓库

[2].Rclone 750G自动换号– AutoRclone使用教程

[3].Centos7 安装python3.8和pip

[4].通过proxifier实现全局代理