如何使用 rclone 从亚马逊 S3 迁移到 DigitalOcean 空间

介绍

DigitalOcean Spaces 是一个物体存储服务,旨在使存储和服务大量数据变得简单、成本高效. 如果您以前依赖了其他物体存储服务,则将数据迁移到 Spaces 可能是您的首要任务之一。

在本指南中,我们将介绍如何使用 rclone实用程序将数据从亚马逊的S3区块存储服务迁移到DigitalOcean Spaces。

创建 API 密钥和查找桶属性

在我们开始安装和配置rclone以将我们的对象复制到Spaces之前,我们需要一些关于我们的Amazon S3和DigitalOcean Spaces帐户的信息。

生成 DigitalOcean Spaces API 密钥并找到 API 终端

要创建 DigitalOcean Spaces API 密钥,请遵循我们 如何创建 DigitalOcean Space 和 API 密钥教程的创建访问密钥部分。

保存访问密钥ID和秘密密钥,以便我们可以配置rclone来访问我们的帐户。

接下来,我们需要找到合适的API终端点. 如果您已经创建了一个想要传输对象的DigitalOcean Space,您可以在DigitalOcean控制面板中查看DigitalOcean的终端点,选择空间并查看 设置选项卡:

DigitalOcean Spaces endpoint

如果您尚未创建空间,则rclone可以自动创建您选择的空间,作为复制过程的一部分。在这种情况下,终端将是您想要使用的空间区域,然后是.digitaloceanspaces.com

创建 Amazon S3 API 密钥

如果您还没有具有管理 S3 资产权限的 Amazon API 密钥,您将需要现在生成这些密钥,在您的 AWS 管理控制台中,单击您的帐户名称,并从下载菜单中选择 ** 我的安全凭据**:

AWS select security credentials

接下来,在左侧菜单中选择 用户,然后单击 添加用户按钮:

AWS add user button

输入 用户名,并在 ** Access 类型** 部分选择 Programmatic access. 点击 Next: Permissions 按钮继续:

AWS user details

在下面的页面上,选择顶部的 ** 直接附加现有策略** 选项,然后在 ** 策略类型** 过滤器中键入 ** s3read**。

AWS S3 read access

查看下一页的用户详细信息,然后在准备时点击创建用户按钮:

AWS create user

在最后一页,你会看到你的新用户的身份证件. 点击秘密访问密钥列下面的显示链接查看身份证件:

AWS secret keys

Access 密钥 IDSecret 密钥复制到安全的地方,以便您可以配置rclone以使用这些凭据。

查找 Amazon S3 桶区域和位置限制

现在,我们需要找到我们S3桶的区域和位置限制值。

在顶部菜单中单击服务并在出现的搜索栏中键入S3

我们需要寻找我们想要转移的桶的区域名称,该区域将显示在桶名称旁边:

AWS S3 bucket region

我们需要找到与我们的桶区域相关的区域字符串和匹配的位置限制。 在 亚马逊的S3区域图表中寻找您的桶区域名称,以找到合适的区域和位置限制字符串。

现在我们已经从我们的亚马逊帐户中获得了相应的信息,我们可以使用这些信息安装和配置rclone

在本地计算机上安装 rclone

您现在已经准备好在本地计算机上安装 rclone

访问项目网站的 下载部分,以查找为不同平台编译的实用程序的二进制文件。

一旦您已下载到您的计算机的rclone zip 文件,请遵循符合您的平台的下面的部分。

Linux 的

在我们可以提取档案之前,我们需要确保unzip实用程序可用。

如果您正在运行 UbuntuDebian,您可以通过键入更新本地包索引并安装unzip:

1sudo apt-get update
2sudo apt-get install unzip

如果您正在运行 CentOSFedora,您可以通过键入以下方式安装unzip:

1sudo yum install unzip

安装了unzip,导航到您下载了rclone zip 文件的目录:

1cd ~/Downloads

接下来,解开档案并进入新目录:

1unzip rclone*
2cd rclone-v*

从这里,我们可以将二进制复制到 /usr/local/bin 目录,使其在整个系统中可用:

1sudo cp rclone /usr/local/bin

接下来,我们可以将手动页面添加到系统中,以便我们可以轻松地获得对命令语法和可用的选项的帮助. 确保我们需要的本地手动目录可用,然后复制 rclone.1 文件:

1sudo mkdir -p /usr/local/share/man/man1
2sudo cp rclone.1 /usr/local/share/man/man1

更新数据库以在系统中添加新的手动页面:

1sudo mandb

最后,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:

1mkdir -p ~/.config/rclone
2nano ~/.config/rclone/rclone.conf

这将打开你的文本编辑器与一个新的空格文件. 跳到 定义你的对象存储帐户的部分继续。

马克思

如果您正在运行 macOS,请先将终端导航到您下载了rclone zip 文件的目录:

1cd ~/Downloads

接下来,解开文件并移动到新的目录级别:

1unzip -a rclone*
2cd rclone-v*

接下来,请确保 /usr/local/bin 目录可用,然后将 rclone 二进制移动到里面:

1sudo mkdir -p /usr/local/bin
2sudo cp rclone /usr/local/bin

最后,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:

1mkdir -p ~/.config/rclone
2nano ~/.config/rclone/rclone.conf

这将打开你的文本编辑器与一个新的空格文件. 跳到 定义你的对象存储帐户的部分继续。

窗口

如果您正在运行 Windows,请从 Windows 文件浏览器中的下载目录开始导航,选择rclone zip 文件,然后右键单击。在出现的背景菜单中,单击 提取所有...:

Windows extract rclone zip file

按照提示,从 zip 档案中提取文件。

rclone.exe实用程序必须从命令行运行. 打开一个新的 Command Prompt(cmd.exe程序)窗口,点击左下角的 Windows 按钮,键入 cmd,然后选择 Command Prompt

在内部,导航到您通过键入提取的rclone路径:

1cd "%HOMEPATH%\Downloads\rclone*\rclone*"

列出目录内容以验证您在正确的位置:

1dir
 1[secondary_label Output]
 210/23/2017 01:02 PM    <DIR>          .
 310/23/2017 01:02 PM    <DIR>          ..
 410/23/2017 01:02 PM 17 git-log.txt
 510/23/2017 01:02 PM 296,086 rclone.1
 610/23/2017 01:02 PM 16,840,192 rclone.exe
 710/23/2017 01:02 PM 315,539 README.html
 810/23/2017 01:02 PM 261,497 README.txt
 9               5 File(s)     17,713,331 bytes
10               2 Dir(s)  183,296,266,240 bytes free

您需要在此目录中,每当您想要使用rclone.exe命令。

<$>[注] 注: 在 macOS 和 Linux 上,我们通过键入rclone来运行该工具,但在 Windows 上,该命令被称为rclone.exe

接下来,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:

1mkdir "%HOMEPATH%\.config\rclone"
2notepad "%HOMEPATH%\.config\rclone\rclone.conf"

这将打开你的文本编辑器与一个新的空格文件。继续学习如何在配置文件中定义你的对象存储帐户。

配置 S3 和空间帐户

我们可以在新文件中定义我们的 Amazon S3 和 DigitalOcean Spaces 配置,以便rclone能够在我们两个帐户之间管理内容。

让我们先定义我们的 S3 帐户,将下列部分粘贴到配置文件中:

1[label ~/.config/rclone/rclone.conf]
2[s3]
3type = s3
4env_auth = false
5access_key_id = aws_access_key
6secret_access_key = aws_secret_key
7region = aws_region
8location_constraint = aws_location_constraint
9acl = private

在这里,我们定义了一个新的rclone``远程称为s3。我们将类型设置为s3,以便rclone知道与远程存储资源进行交互和管理的适当方式。

接下来,我们将access_key_idsecret_access_key变量分别设置为我们的 S3 访问密钥和秘密密密钥。

我们根据我们在 亚马逊区域图中发现的 S3 桶的属性设置了区域和位置限制。

现在,我们可以为我们的 DigitalOcean Spaces 配置定义类似的部分。

 1[label ~/.config/rclone/rclone.conf]
 2. . .
 3
 4[spaces]
 5type = s3
 6env_auth = false
 7access_key_id = spaces_access_key
 8secret_access_key = spaces_secret_key
 9endpoint = nyc3.digitaloceanspaces.com
10acl = private

在本节中,我们正在定义一个名为空间的新远程计算机。 再次,我们将类型设置为s3,因为Spaces提供了兼容S3的API。

接下来,我们将access_key_idsecret_access_key变量设置为我们DigitalOcean帐户所生成的值。

保存并关闭文件,当你完成。

在 macOS 和 Linux 上,请确保锁定配置文件的权限,因为我们的身份证在里面:

1chmod 600 ~/.config/rclone/rclone.conf

在 Windows 上,除非明确授权,否则不允许非管理员使用权限,因此不需要手动调整访问权限。

从 S3 复制对象到空间

现在我们的配置已经完成,我们已经准备好转移我们的文件。

开始检查配置的rclone远程设置:

1rclone listremotes
1[secondary_label Output]
2s3:
3spaces:

我们定义的两个部分都显示。

我们可以通过要求rclone列出与s3远程连接的目录来查看可用的S3桶(请确保在远程名称的末尾添加结肠):

1rclone lsd s3:
1[secondary_label Output]
2          -1 2017-10-20 15:32:28        -1 source-of-files

上面的输出表明,在我们的 S3 帐户中发现了一个桶,称为文件源

如果您已经创建了一个数字海洋空间,您可以重复程序来查看您的空间:

1rclone lsd spaces:
1[secondary_label Output]
2          -1 2017-10-25 19:00:35        -1 existing-space

要查看 S3 桶或 DigitalOcean Space 的内容,您可以使用命令. 输入远程名称,然后是列出的目录名称(桶或空间名称):

1rclone tree s3:source-of-files
 1[secondary_label Output]
 2/
 3├── README.txt
 4├── demo_dir
 5│   ├── demo1
 6│   └── demo2
 7└── media
 8    ├── Social Rebrand Presentation 032815.ppt
 9    ├── TechnicLauncher.jar
10    ├── nda_template.docx
11    ├── textfile.txt
12    └── the_mother_of_all_demos.mp4
13
142 directories, 8 files

当你准备好了,你可以将文件从你的S3桶复制到一个DigitalOcean空间通过键入:

1rclone sync s3:source-of-files spaces:dest-of-files

如果您之前尚未创建您选择的空间,则rclone将尝试为您创建一个具有所提供的名称的空间,如果所提供的名称已经被另一个帐户使用,或者如果该名称不符合DigitalOcean Spaces的命名要求(仅有字母、数字和表格)。

假设一切顺利,rclone 将开始从 S3 复制对象到 Spaces。

当转移完成时,您可以通过使用子命令视觉检查对象是否已转移:

1rclone tree spaces:dest-of-files
 1[secondary_label Output]
 2/
 3├── README.txt
 4├── demo_dir
 5│   ├── demo1
 6│   └── demo2
 7└── media
 8    ├── Social Rebrand Presentation 032815.ppt
 9    ├── TechnicLauncher.jar
10    ├── nda_template.docx
11    ├── textfile.txt
12    └── the_mother_of_all_demos.mp4
13
142 directories, 8 files

要进行更强大的验证,请使用检查子命令来比较两种远程对象:

1rclone check s3:source-of-files spaces:dest-of-files
1[secondary_label Output]
22017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 0 differences found
32017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 2 hashes could not be checked

这将比较每个对象的哈希值在两种远程中。你可能会收到一个信息,说明某些哈希无法进行比较。在这种情况下,你可以重新启动命令只大小旗(仅根据文件大小进行比较)或下载旗(从两种远程下载每个对象进行本地比较),以验证传输完整性。

结论

在本指南中,我们涵盖了如何将对象从 Amazon S3 转移到 DigitalOcean Spaces. 我们为这两个服务创建了 API 凭证,在本地计算机上安装并配置了rclone实用程序,然后将所有对象从 S3 桶复制到 DigitalOcean Space。

rclone客户端可用于许多其他对象存储管理任务,包括上传或下载文件,在本地文件系统上安装桶,以及创建或删除额外桶。

Published At
Categories with 技术
comments powered by Disqus