介绍
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:
sudo apt-get update
sudo apt-get install unzip
如果你运行的是 CentOS 或 Fedora,你可以通过键入以下命令来安装 unzip:
sudo yum install unzip
安装 unzip 后,导航到下载 rclone zip 文件的目录:
cd ~/Downloads
接下来,解压缩存档并移动到新目录:
unzip rclone*
cd rclone-v*
从这里,我们可以将二进制文件复制到 /usr/local/bin 目录,以便它在系统范围内可用:
sudo cp rclone /usr/local/bin
接下来,我们可以将手册页添加到系统中,以便我们可以轻松获得有关命令语法和可用选项的帮助。确保我们需要的本地手册目录可用,然后复制 rclone.1 文件:
sudo mkdir -p /usr/local/share/man/man1
sudo cp rclone.1 /usr/local/share/man/man1
更新 man 数据库以将新的手册页添加到系统中:
sudo mandb
最后,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:
mkdir -p ~/.config/rclone
nano ~/.config/rclone/rclone.conf
这将打开您的文本编辑器,其中包含一个新的空白文件。
macOS操作系统
如果您运行的是 macOS,请首先在终端中导航到您下载 rclone zip 文件的目录:
cd ~/Downloads
接下来,解压缩文件并移动到新的目录级别:
unzip -a rclone*
cd rclone-v*
接下来,确保 /usr/local/bin 目录可用,然后将 rclone 二进制文件移动到其中:
sudo mkdir -p /usr/local/bin
sudo cp rclone /usr/local/bin
最后,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:
mkdir -p ~/.config/rclone
nano ~/.config/rclone/rclone.conf
这将打开您的文本编辑器,其中包含一个新的空白文件。
Windows
如果运行的是 Windows,请首先导航到 Windows 文件资源管理器中的“下载”目录。选择 rclone zip 文件并单击鼠标右键。在显示的上下文菜单中,单击 “全部提取…”。:
按照提示从 zip 存档中提取文件。rclone.exe必须从命令行运行。 通过单击左下角的“Windows”按钮,键入cmd,然后选择“命令提示符”,打开新的命令提示符(cmd.exe 程序)窗口。
在内部,通过键入以下命令导航到提取的 rclone 路径:
C:\> cd "%HOMEPATH%\Downloads\rclone*\rclone*"
列出目录内容以验证您是否位于正确的位置:
C:\> dir
每当要使用 rclone.exe 命令时,都需要在此目录中。
注意: 在 macOS 和 Linux 上,我们通过键入 rclone 来运行该工具,但在 Windows 上,该命令称为 rclone.exe。在本指南的其余部分,我们将以 rclone 的形式提供命令,因此每次在 Windows 上运行时,请务必替换 rclone.exe。
接下来,我们可以创建配置目录并打开配置文件来定义我们的 S3 和 Spaces 凭证:
mkdir "%HOMEPATH%\.config\rclone"
notepad "%HOMEPATH%\.config\rclone\rclone.conf"
这将打开您的文本编辑器,其中包含一个新的空白文件。继续了解如何在配置文件中定义对象存储帐户。
配置 S3 和 Spaces 帐户
我们可以在新文件中定义 Amazon S3 和 DigitalOcean Spaces 配置,以便 rclone 可以管理我们两个账户之间的内容。
让我们从定义 S3 帐户开始。将以下部分粘贴到配置文件中:
~/.config/rclone/rclone.conf
[s3]
type = s3
env_auth = false
access_key_id = aws_access_key
secret_access_key = aws_secret_key
region = aws_region
location_constraint = aws_location_constraint
acl = private
在这里,我们定义了一个名为 s3 的凭证配置。我们将类型设置为 s3,以便 rclone 知道与远程存储资源交互和管理的适当方式。我们将在配置文件本身中定义 S3 凭证,因此我们将 env_auth 设置为 false。
接下来,我们将 access_key_id 和 secret_access_key 变量分别设置为 S3 访问密钥和私有密钥。请务必将值更改为与您的账户关联的 S3 凭证。
我们根据在 Amazon 区域图表中找到的 S3 存储桶的属性来设置区域和位置约束。最后,我们将访问控制策略设置为“私有”,以便资产默认不是公共的。
现在,我们可以为 DigitalOcean Spaces 配置定义一个类似的部分。将以下部分粘贴到配置文件中:
~/.config/rclone/rclone.conf
...
[spaces]
type = s3
env_auth = false
access_key_id = spaces_access_key
secret_access_key = spaces_secret_key
endpoint = nyc3.digitaloceanspaces.com
acl = private
在本节中,我们将定义一个名为“spaces”的凭证配置。同样,我们将 type 设置为 s3,因为 Spaces 提供了与 S3 兼容的 API。我们关闭 env_auth,以便可以在配置文件中定义 Spaces 凭据。
接下来,我们将 access_key_id 和 secret_access_key 变量设置为为 DigitalOcean 帐户生成的值。我们将端点设置为之前确定的相应 Spaces 端点。最后,我们再次将 ACL 设置为私有以保护我们的资产,直到我们想要共享它们。完成后保存并关闭文件。
在 macOS 和 Linux 上,请务必锁定配置文件的权限,因为我们的凭据位于其中:
chmod 600 ~/.config/rclone/rclone.conf
在 Windows 上,除非明确授予,否则将拒绝向非管理用户授予权限,因此我们不需要手动调整访问权限。
将对象从 S3 复制到Spaces
现在我们的配置已经完成,我们已经准备好传输我们的文件了。
首先检查 rclone 配置的远程:
rclone listremotes
Output
s3:
spaces:
将显示我们定义的两个部分。
我们可以通过要求 rclone 列出与 s3 关联的“目录”来查看可用的 S3 存储桶(确保在远程名称的末尾添加冒号):
rclone lsd s3:
Output
-1 2023-12-05 11:43:53 -1 example-awss3-bucket-1
上面的输出表明,在我们的 S3 账户中发现了一个称为example-awss3-bucket-1的存储桶。
如果您已经创建了 DigitalOcean Spaces,您可以重复该过程来查看您的Spaces:
rclone lsd spaces:
Output
-1 2023-12-05 11:40:34 -1 example-digitalocean-bucket-1
要查看 S3 存储桶或 DigitalOcean Space 的内容,您可以使用 tree 命令。传入远程名称,后跟冒号和要列出的“目录”的名称(存储桶或Spaces名称):
rclone tree s3:example-awss3-bucket-1
Output
├── 01
│ ├── AWS-Certified-SysOps-Administrator-Official-Study-Guide.pdf
│ ├── ISOIEC 27018:2019.pdf
│ ├── ISO_IEC_27701_2019_CH_Ver1.3.pdf
│ ├── ISO/IEC 27017:2015(en).pdf
│ └── aws-transit-gateway-deployment-guide.pdf
└── net402-161215140944.pdf
1 directories, 6 files
准备就绪后,您可以通过键入以下命令将文件从 S3 存储桶复制到 DigitalOcean Space(注意:sync 命令会将原来存储桶里的内容覆盖,如果想要保留原存储桶里的内容,可以使用 copy 命令):
rclone sync s3:example-awss3-bucket-1 spaces:example-digitalocean-bucket-1
如果您之前没有创建所选的Spaces,rclone 将尝试为您创建一个具有给定名称的Spaces。如果提供的名称已被其他帐户使用,或者该名称不符合 DigitalOcean Spaces 的命名要求(仅限小写字母、数字和破折号),则此操作将失败。
假设一切顺利,rclone 将开始将对象从 S3 复制到 Spaces。
传输完成后,您可以通过使用 tree 子命令查看对象来直观地检查对象是否已传输:
rclone tree spaces:example-digitalocean-bucket-1
Output
├── 01
│ ├── AWS-Certified-SysOps-Administrator-Official-Study-Guide.pdf
│ ├── ISOIEC 27018:2019.pdf
│ ├── ISO_IEC_27701_2019_CH_Ver1.3.pdf
│ ├── ISO/IEC 27017:2015(en).pdf
│ └── aws-transit-gateway-deployment-guide.pdf
├── F001
│ └── F001 [couldn't find "F001/F001" in directory cache]
└── net402-161215140944.pdf
2 directories, 6 files
要进行更可靠的验证,请使用 check 子命令比较两个远程数据库中的对象:
rclone check s3:example-awss3-bucket-1 spaces:example-digitalocean-bucket-1
Output
2023/12/05 11:56:55 NOTICE: S3 bucket example-digitalocean-bucket-1: 0 differences found
2023/12/05 11:56:55 NOTICE: S3 bucket example-digitalocean-bucket-1: 1 hashes could not be checked
2023/12/05 11:56:55 NOTICE: S3 bucket example-digitalocean-bucket-1: 6 matching files
这将比较两个远程中每个对象的哈希值。您可能会收到一条消息,指示无法比较某些哈希值。在这种情况下,您可以使用 –size-only 标志(仅根据文件大小进行比较)或 –download 标志(从两个远程下载每个对象以在本地进行比较)重新运行命令,以验证传输完整性。
结论
在本指南中,我们介绍了如何将对象从 Amazon S3 传输到 DigitalOcean Spaces。我们为这两项服务创建了 API 凭证,在本地计算机上安装并配置了 rclone 实用程序,然后将所有对象从 S3 存储桶复制到 DigitalOcean Spaces。
rclone 客户端可用于许多其他对象存储管理任务,包括上传或下载文件、在本地文件系统上挂载存储桶以及创建或删除其他存储桶。请查看rclone手册页,了解有关该工具提供的功能的更多信息。