文档目的
此文档的解决方案的目的是帮助用户将数据从百度网盘同步到AWS EC2 EBS,以实现数据备份和迁移。随着云计算和大数据技术的发展,越来越多的用户开始将数据存储到云端,而百度网盘和AWS EC2 EBS都是常用的云存储服务。然而,用户可能会遇到以下问题:
首先,由于百度网盘和AWS EC2 EBS之间的协议不同,数据的传输和同步可能会受到限制,导致传输速度缓慢或数据损失。其次,用户可能需要手动将数据从百度网盘下载到本地,再上传到AWS EC2 EBS,这样不仅浪费时间,而且容易出错。
针对这些问题,我们提供了一种解决方案,可以帮助用户快速、安全地将数据从百度网盘同步到AWS EC2 EBS。使用高效的传输协议和算法,保证数据的快速传输和完整性。同时,我们还提供了简单易用的命令行工具,让用户可以轻松地进行数据同步操作,节省时间和精力,提高工作效率和用户体验。
建议由运维人员、数据备份人员、研发人员、解决方案人员使用,需具备一定的命令行工具(CLI)使用经验。
在开始之前,您需要拥有自己的百度云盘账号,以及AWS账号,并且保证AWS 账号具备AK SK。
重要前提:需要把系统的区域编码设置为UTF-8。参见:http://perlgeek.de/en/article/set-up-a-clean-utf8-environment)。
在本次示例操作中,作者使用一台AWS EC2 t3.micro实例类型,OS采用的是 Amazon Linux 2 x86(AMI Name:amzn2-ami-kernel-5.10-hvm-2.0.20230307.0-x86_64-gp2),采用密钥(*.pem)方式验证登录,开放了安全组SSH 22端口用于登录操作。
关于EC2 Linux系统的SSH登录建议使用Xshell或PuTTY等工具,相关教程很多,不在此赘述。
#由于Amazon Linux 2默认安装的是"aws cli 1",为了升级到"aws cli 2",需要先卸载旧的"aws cli 1"版本:
$ sudo yum remove awscli
#执行成功截图:
#下载新的AWS CLI 2
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
#解压压缩包
$ unzip awscliv2.zip
#安装AWS CLI 2版本
$ sudo ./aws/install
#确认AWS CLI 2安装位置
$ which aws
#确认位置截图:
#(可选)配置“用户”或“系统”环境变量,这样就不用到安装目录才能执行aws cli命令了
#配置“用户”环境变量
$ vim ~/.bashrc
#在“用户”环境变量文件 “.bashrc”中添加以下内容(点击键盘i进入vim编辑器的编辑模式),其中红色部分就是刚才查询到的AWS CLI执行文件“aws”的安装路径:
export PATH=$PATH:/usr/local/bin
#添加时的截图:
#修改完用 ":wq"退出 vim编辑器,还需要重新加载下环境变量,使修改的环境变量生效,重启系统当然也行。
$ source ~/.bashrc
#安装bypy,这里使用pip3是由于OS中默认安装了Python3 版本,如果使用低版本,也可使使用pip命令
$ pip3 install bypy
#安装成功截图
#使用命令 bypy info获取“百度网盘”的“API验证地址”
$ bypy info
#运行后截图
#运行结束后,会提供给用户一段用于百度网盘的OpenAPI的验证地址(https),获取验证码地址示例如下:https://openapi.baidu.com/oauth/2.0/authorize?client_id=q8XXXXXXXXXXXXXXXXXXXKNBn&response_type=code&redirect_uri=oob&scope=basic+netdisk
#通过(您自己实际获取到的)https网址,登录百度云盘,点击“复制授权码”获取“授权码”
#将“授权码”复制后,回到终端控制台中进行“粘贴”,再点击“Enter(回车)”后等待,成功后如下显示表示成功,可以看到命令返回了百度云盘的Quota(总容量)和Used(已使用量)
#使用命令确保当前操作系统的默认编码格式为“UTF-8”
$ locale
#运行后显示如下,说明系统编码格式正确
如果在未来需要更替为不同的“百度云盘账号”进行数据操作,则需要手动删除已保存的认证信息json文件,这是由于目前(202303)bypy工具的官方制作者并未提供相关命令进行替换操作。
#删除当前用户目录下 ~/.bypy 隐藏文件夹中的json文件
#用ls -a查看目录下的所有文件,可以看到.bypy这个隐藏文件夹
#进入这个文件夹可以看到bypy.json这个文件
#可以使用nano或者vim等文本编辑工具查看此文件里面记录的内容,这里使用了nano工具,可以看到记录的认证字符串
#只需要通过rm命令删除此bypy.json文件,当再次运行bypy info就可以重新绑定其它的百度网盘账号了(重新绑定流程参见“首次验证”)
$ rm bypy.json
对于您之前已经使用bypy工具绑定过的“百度网盘”账号,为了安全起见,建议同时解除百度网盘中的“Python客户端”授权,解除地址为:
https://passport.baidu.com/accountbind
相关操作截图:
如此,您已经完全解除了相关授权和链接。
强烈建议在使用数据操作前,将百度云账号的VIP进行开通(例如临时开通一个月),将对下载速度有极大帮助。
以下是百度云在浏览器中的截图,用于展示在“简体中文”界面时,百度云盘的路径“/apps”的实际位置:
#测试能否检索到云盘上的文件(202303:由于百度PCS API权限限制,程序只能存取百度云盘/apps/bypy目录下面的文件和目录)
$ bypy list
#在EC2本地创建一个用于存储/同步数据的目录
$ mkdir BaiduData
#使用downdir命令下载某一个目录下的所有文件(递归),包括子文件夹下的文件, '/' 代表的是百度云盘上的 '/apps/bypy'目录, '-v' 是为了可视化下载过程。
$ bypy downdir / -v
#下图是百度云盘上文件夹的示例结构
#执行下载命令时的实际结果截图,可以看到子文件夹“myfolder”下的文件“Fun.mp3”也正常下载下来了:
#用ls命令检查下载后的文件情况,可以看到百度网盘/apps/bypy目录下面的所有文件和子文件都下载到EC2的/BaiduData目录下了:
在实际生产环境中,您可能会从百度网盘中下载大量的文件(up to TB),这时建议在Linux终端控制台中使用“后端运行”(nohup)方式进行操作,以防止意外的终端断开导致同步任务中断。
例如:
# 后台运行方式使用bypy下载在百度云盘上的数据
$ nohup bypy downdir / -v > bypy.log 2>&1 &
#1、 nohup: 这是一个在 Unix/Linux 系统中用于使命令在后台运行,并且在终端关闭时不会被中断的命令。通过使用 nohup,可以确保在终端关闭后命令仍然继续在后台运行。
#2、 -v: 这是 bypy 命令的选项,表示启用详细的日志输出,可以帮助调试和查看命令的执行过程。
#3、 > bypy.log 2>&1: 这是将命令的标准输出和标准错误输出重定向到一个名为 "bypy.log" 的文件中。">" 符号表示将标准输出重定向到文件,"2>&1" 表示将标准错误输出重定向到与标准输出相同的文件中。
#4、 "&": 这是在命令末尾添加的符号,表示将命令放入后台运行。
# 可以使用tail命令跟踪查看日志文件中的下载情况,例如:
$ tail -f /yourpath/bypy.log
在生产环境中,大量数据数据已经放置在云端EC2 EBS中后,可以再上传到S3中进行长期存储等操作。
显示使用帮助和所有命令(输出为英文):
$ bypy
第一次运行时需要授权,只需跑任何一个命令(比如 bypy info)然后跟着说明(登陆等)来授权即可。授权只需一次,一旦成功,以后不会再出现授权提示.
更详细的了解某一个命令:
$ bypy help <command>
显示在云盘(程序的)根目录下文件列表:
$ bypy list
把当前目录同步到云盘:
$ bypy syncup
or
$ bypy upload
把云盘内容同步到本地来:
$ bypy syncdown
or
$ bypy downdir /
目录上传/下载/同步加入了多进程支持(--processes)
比较本地当前目录和云盘(程序的)根目录:
$ bypy compare
更多命令和详细解释请见运行bypy的输出。
https://blog.csdn.net/PolarisRisingWar/article/details/121887801
https://zhuanlan.zhihu.com/p/348483516
https://github.com/houtianze/bypy