介绍

DigitalOcean Spaces是一种对象存储服务,旨在使存储和提供大量数据变得简单且经济高效。如果您之前依赖其他对象存储服务,那么将数据迁移到DigitalOcean Spaces可能是您的首要任务之一。此前,可以阅读AWS 或 DigitalOcean – 哪个云平台最适合你?

在本指南中,我们将介绍如何使用rclone实用程序将数据从Amazon的S3对象存储服务迁移到DigitalOcean Spaces服务。我们将演示如何安装rclone、用于访问对象存储服务的配置设置,以及可用于在Spaces中同步文件和验证其完整性的命令。

创建 API 密钥和查找存储桶属性

在开始安装和配置 rclone 以将对象复制到 Spaces 之前,我们需要一些有关 Amazon S3和DigitalOcean Spaces账户的信息。我们需要为该工具可以使用的两种服务提供一组 API 密钥,并且我们需要知道存储桶的区域和位置约束值。

生成 DigitalOcean Spaces API 密钥并查找 API endpoint

要创建 DigitalOcean Spaces API 密钥,请按照我们的如何创建 DigitalOcean Space 和 API 密钥教程中的“创建访问密钥”部分进行操作。保存访问密钥 ID 和密钥,以便我们可以配置 rclone 来访问我们的帐户。

接下来,我们需要找到合适的 API 端点。如果您已经创建了要将对象传输到的 DigitalOcean Spaces,则可以通过选择SpacesObject Storage查看存储桶的endpoint 信息:

如果您尚未创建Spaces,rclone 可以在复制过程中自动创建您选择的Spaces。在这种情况下,endpoint将是要使用的Spaces 区域,后跟”.digitaloceanspaces.com”。您可以通过查看Spaces创建页面上的选择选项,在 DigitalOcean 控制面板中找到Spaces的可用区域。例如“nyc3”区域(endpoint为 nyc3.digitaloceanspaces.com)。

生成 Amazon S3 API 密钥

如果您还没有管理S3的 Amazon API 密钥,则需要立即生成这些密钥。在 AWS 管理控制台中,单击您的账户名称,然后从下拉菜单中选择 My Security Credentials:

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

键入“用户名”,然后在“访问类型”部分中选择“编程访问”。单击“下一步:权限”按钮继续:

在随后的页面上,选择顶部的“直接附加现有策略”选项,然后在“策略类型”筛选器中键入 s3read。选中 AmazonS3ReadOnlyAccess 策略框,然后单击 Next:Review 按钮继续:

在下一页上查看用户详细信息,然后在准备就绪后单击“创建用户”按钮:

在最后一页上,您将看到新用户的凭据。单击“秘密访问密钥”列下的“显示”链接以查看凭据:

将访问密钥 ID 和秘密访问密钥复制到安全的位置,以便将 rclone 配置为使用这些凭据。您还可以单击“Download.csv”按钮将凭据保存到您的计算机。

查找 Amazon S3 存储桶区域和位置约束

现在,我们需要查找 S3 存储桶的区域和位置约束值。

单击顶部菜单中的 Services,然后在显示的搜索栏中键入 S3。选择  S3  服务以转到 S3 管理控制台。

我们需要查找存储桶的区域名称。该区域将显示在存储桶名称旁边:

我们需要找到与存储桶区域关联的区域字符串和匹配的位置约束。在 Amazon 的此 S3 区域图表中查找存储桶的区域名称,以查找相应的区域和位置约束字符串。在我们的示例中,我们的区域名称是“新加坡”,因此我们将使用 ap-southeast-1作为区域字符串,并且我们的位置约束将为空。现在我们从亚马逊账户中获得了适当的信息,我们可以使用此信息安装和配置 rclone。

在本地计算机上安装 rclone

现在,您可以在本地计算机上安装 rclone

访问项目网站的 “下载” 部分,查找为不同平台编译的实用程序的二进制文件。将与计算机操作系统匹配的压缩二进制文件下载到 “下载” 目录以开始使用。

将 rclone zip 文件下载到计算机后,请按照以下与您的平台匹配的部分进行操作。

Linux操作系统

在提取存档之前,我们需要确保解压缩实用程序可用。

如果您运行的是 Ubuntu 或 Debian,则可以通过键入以下命令来更新本地软件包索引并安装 unzip:

如果你运行的是 CentOS 或 Fedora,你可以通过键入以下命令来安装 unzip:

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

接下来,解压缩存档并移动到新目录:

从这里,我们可以将二进制文件复制到 /usr/local/bin 目录,以便它在系统范围内可用:

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

更新 man 数据库以将新的手册页添加到系统中:

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

这将打开您的文本编辑器,其中包含一个新的空白文件。

macOS操作系统

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

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

接下来,确保 /usr/local/bin 目录可用,然后将 rclone 二进制文件移动到其中:

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

这将打开您的文本编辑器,其中包含一个新的空白文件。

Windows

如果运行的是 Windows,请首先导航到 Windows 文件资源管理器中的“下载”目录。选择 rclone zip 文件并单击鼠标右键。在显示的上下文菜单中,单击 “全部提取…”。:

按照提示从 zip 存档中提取文件。rclone.exe必须从命令行运行。 通过单击左下角的“Windows”按钮,键入cmd,然后选择“命令提示符”,打开新的命令提示符(cmd.exe 程序)窗口。

在内部,通过键入以下命令导航到提取的 rclone 路径:

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

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

注意: 在 macOS 和 Linux 上,我们通过键入 rclone 来运行该工具,但在 Windows 上,该命令称为 rclone.exe。在本指南的其余部分,我们将以 rclone 的形式提供命令,因此每次在 Windows 上运行时,请务必替换 rclone.exe。

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

这将打开您的文本编辑器,其中包含一个新的空白文件。继续了解如何在配置文件中定义对象存储帐户。

配置 S3 和 Spaces 帐户

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

让我们从定义 S3 帐户开始。将以下部分粘贴到配置文件中:

在这里,我们定义了一个名为 s3 的凭证配置。我们将类型设置为 s3,以便 rclone 知道与远程存储资源交互和管理的适当方式。我们将在配置文件本身中定义 S3 凭证,因此我们将 env_auth 设置为 false。

接下来,我们将 access_key_id 和 secret_access_key 变量分别设置为 S3 访问密钥和私有密钥。请务必将值更改为与您的账户关联的 S3 凭证。

我们根据在 Amazon 区域图表中找到的 S3 存储桶的属性来设置区域和位置约束。最后,我们将访问控制策略设置为“私有”,以便资产默认不是公共的。

现在,我们可以为 DigitalOcean Spaces 配置定义一个类似的部分。将以下部分粘贴到配置文件中:

在本节中,我们将定义一个名为“spaces”的凭证配置。同样,我们将 type 设置为 s3,因为 Spaces 提供了与 S3 兼容的 API。我们关闭 env_auth,以便可以在配置文件中定义 Spaces 凭据。

接下来,我们将 access_key_id 和 secret_access_key 变量设置为为 DigitalOcean 帐户生成的值。我们将端点设置为之前确定的相应 Spaces 端点。最后,我们再次将 ACL 设置为私有以保护我们的资产,直到我们想要共享它们。完成后保存并关闭文件。

在 macOS 和 Linux 上,请务必锁定配置文件的权限,因为我们的凭据位于其中:

在 Windows 上,除非明确授予,否则将拒绝向非管理用户授予权限,因此我们不需要手动调整访问权限。

将对象从 S3 复制到Spaces

现在我们的配置已经完成,我们已经准备好传输我们的文件了。

首先检查 rclone 配置的远程:

Output

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

我们可以通过要求 rclone 列出与 s3 关联的“目录”来查看可用的 S3 存储桶(确保在远程名称的末尾添加冒号):

Output

上面的输出表明,在我们的 S3 账户中发现了一个称为example-awss3-bucket-1的存储桶。

如果您已经创建了 DigitalOcean Spaces,您可以重复该过程来查看您的Spaces:

Output

要查看 S3 存储桶或 DigitalOcean Space 的内容,您可以使用 tree 命令。传入远程名称,后跟冒号和要列出的“目录”的名称(存储桶或Spaces名称):

Output

准备就绪后,您可以通过键入以下命令将文件从 S3 存储桶复制到 DigitalOcean Space(注意:sync 命令会将原来存储桶里的内容覆盖,如果想要保留原存储桶里的内容,可以使用 copy 命令):

如果您之前没有创建所选的Spaces,rclone 将尝试为您创建一个具有给定名称的Spaces。如果提供的名称已被其他帐户使用,或者该名称不符合 DigitalOcean Spaces 的命名要求(仅限小写字母、数字和破折号),则此操作将失败。

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

传输完成后,您可以通过使用 tree 子命令查看对象来直观地检查对象是否已传输:

Output

要进行更可靠的验证,请使用 check 子命令比较两个远程数据库中的对象:

Output

这将比较两个远程中每个对象的哈希值。您可能会收到一条消息,指示无法比较某些哈希值。在这种情况下,您可以使用 –size-only 标志(仅根据文件大小进行比较)或 –download 标志(从两个远程下载每个对象以在本地进行比较)重新运行命令,以验证传输完整性。

结论

在本指南中,我们介绍了如何将对象从 Amazon S3 传输到 DigitalOcean Spaces。我们为这两项服务创建了 API 凭证,在本地计算机上安装并配置了 rclone 实用程序,然后将所有对象从 S3 存储桶复制到 DigitalOcean Spaces。

rclone 客户端可用于许多其他对象存储管理任务,包括上传或下载文件、在本地文件系统上挂载存储桶以及创建或删除其他存储桶。请查看rclone手册页,了解有关该工具提供的功能的更多信息。