介绍
DigitalOcean Spaces是一种对象存储服务,旨在使存储和提供大量数据变得简单而经济高效。 如果您以前依赖于其他对象存储服务,则将数据迁移到空间可能是您的首要任务之一。
在本指南中,我们将介绍如何使用rclone
实用程序将数据从Amazon S3存储服务迁移到DigitalOcean Spaces。 我们将演示如何安装rclone
,用于访问这两种存储服务的配置设置以及可用于同步文件并在Spaces中验证其完整性的命令。
创建API密钥并查找桶资源
在开始安装和配置rclone
以将对象复制到空间之前,我们需要一些关于Amazon S3和DigitalOcean Spaces帐户的信息。 我们需要一套API密钥用于这个工具可以使用的服务,我们需要知道我们桶的区域和位置约束值。
生成DigitalOcean Spaces API密钥并查找API端点
要创建DigitalOcean Spaces API密钥,请按照如何创建DigitalOcean空间和API密钥教程中的“创建访问密钥”部分进行操作。
保存访问密钥ID和密钥,以便我们可以配置rclone
访问我们的帐户。
接下来,我们需要找到适当的API端点。 如果您已经创建了希望将对象传送到的DigitalOcean Space,则可以通过选择Space并查看Settings选项卡来查看DigitalOcean控制面板中的Space的端点:
如果您尚未创建空间,则rclone
可以自动创建您在复制过程中选择的空间。 在这种情况下,端点将是您希望使用的空间区域,然后是.digitaloceanspaces.com
。 您可以通过查看空间创建页面上的选择选项,在DigitalOcean控制面板中找到Spaces的可用区域。 在撰写本文时,只有“nyc3”区域可用( nyc3.digitaloceanspaces.com
端点)。
生成Amazon S3 API密钥
如果您还没有拥有管理S3资产权限的Amazon API密钥,则需要立即生成这些密钥。 在您的AWS管理控制台中,单击您的帐户名称,然后从下拉菜单中选择我的安全证书 :
接下来,在左侧菜单中选择用户 ,然后单击添加用户按钮:
键入一个用户名,并在访问类型部分选择编程访问 。 单击Next:Permissions按钮继续:
在随后的页面上,选择顶部的“ 直接附加现有策略”选项,然后在策略类型过滤器中键入s3read 。 检查AmazonS3ReadOnlyAccess策略框,然后单击Next:Review按钮继续:
查看下一页上的用户详细信息,然后在准备就绪时单击创建用户按钮:
在最后一页上,您将看到新用户的凭据。 单击“ 秘密访问密钥”列下的“ 显示”链接以查看凭据:
将访问密钥ID和秘密访问密钥复制到安全的地方,以便您可以配置rclone
以使用这些凭据。 您也可以单击Download .csv按钮将凭证保存到您的计算机。
查找Amazon S3存储区域和位置约束
现在,我们需要找到S3桶的区域和位置约束值。
点击顶部菜单中的服务 ,然后在显示的搜索栏中输入S3 。 选择S3服务转到S3管理控制台。
我们需要寻找我们希望转移的桶的地区名称。 该区域将显示在存储桶名称旁边:
我们需要找到区域字符串和与我们的区域相关的匹配位置约束。 在Amazon的S3区域图表中查找您的存储区的名称,以查找适当的区域和位置约束字符串。 在我们的例子中,我们的地区名称是“US East(N. Virginia)”,所以我们将使用us-east-1
作为区域字符串,并且我们的位置约束将是空白的。
现在我们已经从我们的Amazon账户获得了相应的信息,我们可以使用这些信息来安装和配置rclone
。
在本地计算机上安装rclone
您现在准备在本地计算机上安装rclone
。
访问项目网站的下载部分,查找针对不同平台编译的实用程序的二进制文件。 将符合您计算机操作系统的压缩二进制文件下载到您的下载目录以开始使用。
将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
如果您正在运行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
zip文件并右键单击。 在出现的上下文菜单中,单击全部提取... :
按照提示从zip压缩文件中提取文件。
rclone.exe
实用程序必须从命令行运行。 通过单击左下角的Windows按钮打开一个新的命令提示符 ( cmd.exe
程序)窗口,键入cmd并选择命令提示符 。
在里面,通过输入以下rclone
导航到你提取的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和空间帐户
我们可以在新文件中定义Amazon S3和DigitalOcean Spaces配置,以便rclone
可以管理我们两个帐户之间的内容。
首先定义我们的S3账户。 将以下部分粘贴到配置文件中:
[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
的新的rclone
“remote”。 我们将type
设置为s3
以便rclone
知道与远程存储资源进行交互和管理的适当方式。 我们将在配置文件本身中定义S3凭证,因此我们将env_auth
设置为false
。
接下来,我们分别将access_key_id
和secret_access_key
变量设置为我们的S3访问密钥和秘密密钥。 请务必将这些值更改为与您的帐户关联的S3凭证。
我们根据我们在Amazon区域图表中找到的S3存储桶的属性来设置区域和位置约束。 最后,我们将访问控制策略设置为“私有”,以便资产默认不公开。
现在,我们可以为我们的DigitalOcean Spaces配置定义一个类似的部分。 将以下部分粘贴到配置文件中:
. . .
[spaces]
type = s3
env_auth = false
access_key_id = spaces_access_key
secret_access_key = spaces_secret_key
endpoint = nyc3.digitaloceanspaces.com
acl = private
在本节中,我们正在定义一个名为“空格”的新远程。 同样,我们将type
设置为s3
因为Spaces提供了一个S3兼容的API。 我们关闭env_auth
以便我们可以在配置文件中定义空间凭证。
接下来,我们将access_key_id
和secret_access_key
变量设置为为我们的DigitalOcean帐户生成的值。 我们将endpoint
设置为我们之前确定的适当的空间端点。 最后,我们再次将private
设置为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 Space,则可以重复该过程来查看空间:
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复制到空格。
传输完成后,可以通过查看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空间。
rclone
客户端可用于许多其他对象存储管理任务,包括上传或下载文件,在本地文件系统上安装存储桶以及创建或删除其他存储桶。 查看man
页以了解有关该工具提供的功能的更多信息。