如何使用rclone从AmazonS3迁移到DigitalOceanSpaces
介绍
DigitalOcean Spaces 是一种对象存储服务,旨在使存储和服务大量数据变得容易且具有成本效益。 如果您之前依赖于其他对象存储服务,那么将数据迁移到 Spaces 可能是您的首要任务之一。
在本指南中,我们将介绍如何使用 rclone 实用程序将数据从 Amazon 的 S3 块存储服务迁移到 DigitalOcean Spaces。 我们将演示如何安装 rclone
、用于访问两种存储服务的配置设置,以及可用于同步文件并在 Spaces 中验证其完整性的命令。
创建 API 密钥并查找存储桶属性
在我们开始安装和配置 rclone
以将我们的对象复制到 Spaces 之前,我们需要一些关于我们的 Amazon S3 和 DigitalOcean Spaces 帐户的信息。 我们将需要一组 API 密钥用于该工具可以使用的两种服务,并且我们需要知道我们的存储桶的区域和位置约束值。
生成 DigitalOcean Spaces API 密钥并查找 API 端点
要创建 DigitalOcean Spaces API 密钥,请按照我们的 如何创建 DigitalOcean Space 和 API 密钥 教程的“创建访问密钥”部分进行操作。
保存访问密钥 ID 和密钥,以便我们可以配置 rclone
来访问我们的帐户。
接下来,我们需要找到合适的 API 端点。 如果您已经创建了希望将对象传输到的 DigitalOcean 空间,则可以通过选择空间并查看 设置 选项卡,在 DigitalOcean 控制面板中查看空间的端点:
如果您尚未创建空间,rclone
可以在复制过程中自动创建您选择的空间。 在这种情况下,端点将是您希望使用的 Spaces 区域,后跟 .digitaloceanspaces.com
。 您可以通过查看空间创建页面上的选择选项,在 DigitalOcean 控制面板中找到空间的可用区域。 在撰写本文时,只有“nyc3”区域可用(端点为 nyc3.digitaloceanspaces.com
)。
生成 Amazon S3 API 密钥
如果您还没有有权管理 S3 资产的 Amazon API 密钥,则需要立即生成这些密钥。 在您的 AWS 管理控制台中,单击您的账户名称并从下拉菜单中选择 My Security Credentials:
接下来,在左侧菜单中选择 Users,然后单击 Add user 按钮:
键入 用户名 并在 访问类型 部分中选择 程序访问 。 单击下一步:权限按钮继续:
在随后的页面上,选择顶部的 直接附加现有策略 选项,然后在 策略类型 过滤器中键入 s3read。 选中 AmazonS3ReadOnlyAccess 策略框,然后单击 Next: Review 按钮继续:
在下一页查看用户详细信息,然后在准备好后单击 创建用户 按钮:
在最后一页,您将看到新用户的凭据。 单击 Secret access key 列下的 Show 链接以查看凭据:
将 访问密钥 ID 和 秘密访问密钥 复制到安全的地方,以便您可以配置 rclone
以使用这些凭据。 您也可以单击 下载 .csv 按钮将凭据保存到您的计算机。
查找 Amazon S3 存储桶区域和位置约束
现在,我们需要找到 S3 存储桶的区域和位置约束值。
单击顶部菜单中的 Services,然后在出现的搜索栏中输入 S3。 选择S3服务进入S3管理控制台。
我们需要查找我们希望转移的存储桶的区域名称。 该区域将显示在存储桶名称旁边:
我们需要找到与我们的存储桶区域关联的区域字符串和匹配的位置约束。 在来自 Amazon 的 这个 S3 区域图表中查找您的存储桶的区域名称,以找到适当的区域和位置约束字符串。 在我们的示例中,我们的区域名称是“US East (N. Virginia)”,因此我们将使用 us-east-1
作为区域字符串,并且我们的位置约束将为空白。
现在我们已经从我们的 Amazon 帐户中获得了适当的信息,我们可以使用这些信息安装和配置 rclone
。
在本地计算机上安装 rclone
您现在已准备好在本地计算机上安装 rclone。
访问项目网站的 Downloads 部分,查找针对不同平台编译的实用程序的二进制文件。 将与您的计算机操作系统匹配的压缩二进制文件下载到您的 Downloads 目录以开始使用。
将 rclone
zip 文件下载到您的计算机后,请按照以下与您的平台匹配的部分进行操作。
Linux
在我们提取存档之前,我们需要确保 unzip
实用程序可用。
如果您正在运行 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,首先在终端中导航到您下载 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 文件资源管理器中的“下载”目录。 选择 rclone
压缩文件并右键单击。 在出现的上下文菜单中,单击 Extract All...:
按照提示从 zip 存档中提取文件。
rclone.exe
实用程序必须从命令行运行。 单击左下角的 Windows 按钮,输入 cmd,然后选择 Command Prompt,打开一个新的 Command Prompt(cmd.exe
程序)窗口。
在内部,通过键入以下内容导航到您提取的 rclone
路径:
cd "%HOMEPATH%\Downloads\rclone*\rclone*"
列出目录内容以验证您是否在正确的位置:
dir
Output10/23/2017 01:02 PM <DIR> . 10/23/2017 01:02 PM <DIR> .. 10/23/2017 01:02 PM 17 git-log.txt 10/23/2017 01:02 PM 296,086 rclone.1 10/23/2017 01:02 PM 16,840,192 rclone.exe 10/23/2017 01:02 PM 315,539 README.html 10/23/2017 01:02 PM 261,497 README.txt 5 File(s) 17,713,331 bytes 2 Dir(s) 183,296,266,240 bytes free
每当您想使用 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
在这里,我们定义了一个新的 rclone
“远程”,称为 s3
。 我们将 type
设置为 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 帐户生成的值。 我们将 endpoint
设置为我们之前确定的适当空间端点。 最后,我们再次将 acl
设置为 private
以保护我们的资产,直到我们想要共享它们。
完成后保存并关闭文件。
在 macOS 和 Linux 上,请务必锁定配置文件的权限,因为我们的凭据在里面:
chmod 600 ~/.config/rclone/rclone.conf
在 Windows 上,除非明确授予,否则非管理用户的权限会被拒绝,因此我们不需要手动调整访问权限。
将对象从 S3 复制到空间
现在我们的配置已经完成,我们准备好传输我们的文件了。
首先检查 rclone
配置的遥控器:
rclone listremotes
Outputs3: spaces:
我们定义的两个部分都会显示。
我们可以通过让 rclone
列出与 s3
远程关联的“目录”来查看可用的 S3 存储桶(确保在远程名称的末尾添加冒号):
rclone lsd s3:
Output -1 2017-10-20 15:32:28 -1 source-of-files
上面的输出表明在我们的 S3 帐户中找到了一个名为 source-of-files
的存储桶。
如果您已经创建了 DigitalOcean 空间,您可以重复该过程来查看您的空间:
rclone lsd spaces:
Output -1 2017-10-25 19:00:35 -1 existing-space
要查看 S3 存储桶或 DigitalOcean Space 的内容,您可以使用 tree
命令。 传入远程名称,后跟一个冒号和您希望列出的“目录”的名称(存储桶或空间名称):
rclone tree s3:source-of-files
Output/ ├── README.txt ├── demo_dir │ ├── demo1 │ └── demo2 └── media ├── Social Rebrand Presentation 032815.ppt ├── TechnicLauncher.jar ├── nda_template.docx ├── textfile.txt └── the_mother_of_all_demos.mp4 2 directories, 8 files
准备好后,您可以通过键入以下内容将文件从 S3 存储桶复制到 DigitalOcean Space:
rclone sync s3:source-of-files spaces:dest-of-files
如果您之前没有创建您选择的空间,rclone
将尝试使用给定名称为您创建一个。 如果提供的名称已被另一个帐户使用,或者该名称不符合 DigitalOcean Spaces 的命名要求(仅限小写字母、数字和破折号),这将失败。
假设一切顺利,rclone
将开始将对象从 S3 复制到 Spaces。
传输完成后,您可以通过使用 tree
子命令查看对象来直观地检查对象是否已传输:
rclone tree spaces:dest-of-files
Output/ ├── README.txt ├── demo_dir │ ├── demo1 │ └── demo2 └── media ├── Social Rebrand Presentation 032815.ppt ├── TechnicLauncher.jar ├── nda_template.docx ├── textfile.txt └── the_mother_of_all_demos.mp4 2 directories, 8 files
要进行更稳健的验证,请使用 check
子命令比较两个遥控器中的对象:
rclone check s3:source-of-files spaces:dest-of-files
Output2017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 0 differences found 2017/10/25 19:51:36 NOTICE: S3 bucket dest-of-files: 2 hashes could not be checked
这将比较两个遥控器中每个对象的哈希值。 您可能会收到一条消息,指出无法比较某些哈希值。 在这种情况下,您可以使用 --size-only
标志(仅根据文件大小进行比较)或 --download
标志(从两个遥控器下载每个对象以在本地进行比较)重新运行命令来验证传输完整性。
结论
在本指南中,我们介绍了如何将对象从 Amazon S3 传输到 DigitalOcean Spaces。 我们为这两个服务创建了 API 凭证,在本地计算机上安装和配置了 rclone
实用程序,然后将所有对象从 S3 存储桶复制到 DigitalOcean Space。
rclone
客户端可用于许多其他对象存储管理任务,包括上传或下载文件、在本地文件系统上挂载存储桶以及创建或删除额外的存储桶。 查看 man
页面以了解有关该工具提供的功能的更多信息。