教程:使用 AzCopy 将本地数据迁移到云存储空间

AzCopy 是一个命令行工具,借助该工具,可使用简单命令将数据复制到 Azure Blob 存储、Azure 文件和 Azure 表存储或从其中复制出数据。 这些命令旨在实现最佳性能。 使用 AzCopy,可在文件系统和存储帐户之间或在存储帐户之间复制数据。 AzCopy 可以用来将数据从本地复制到存储帐户。

在本教程中,你将了解如何执行以下操作:

  • 创建存储帐户。
  • 使用 AzCopy 上传所有数据。
  • 修改用于测试目的的数据。
  • 创建一个计划任务或 cron 作业,以标识要上传的新文件。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

先决条件

若要完成本教程,请下载最新版 AzCopy。 请参阅 AzCopy 入门

如果使用 Windows,则需 Schtasks,因为本教程使用它来计划任务。 Linux 用户会改用 crontab 命令。

若要在 Azure 门户中创建常规用途 v2 存储帐户,请执行以下步骤:

  1. 在“Azure 服务”下,选择“存储帐户” 。
  2. 在“存储帐户”页上,选择“+ 创建”。
  3. 在“基本信息”边栏选项卡中,选择要在其中创建存储帐户的订阅。
  4. 在“资源组”字段中,选择所需的资源组或创建新的资源组。 有关 Azure 资源组的详细信息,请参阅 Azure 资源管理器概述
  5. 然后,输入存储帐户的名称。 所选名称在 Azure 中必须唯一。 该名称的长度还必须介于 3 到 24 个字符之间,且只能包含数字和小写字母。
  6. 选择存储帐户的区域或使用默认区域。
  7. 选择性能层。 默认层为“标准”。
  8. 指定将如何复制存储帐户。 默认的冗余选项是异地冗余存储 (GRS)。 要详细了解可用的复制选项,请参阅 Azure 存储冗余
  9. “高级”、“网络”、“数据保护”和“标签”边栏选项卡上提供了其他选项 。 若要使用 Azure Data Lake Storage,请选择“高级”边栏选项卡,然后将“分层命名空间”设置为“启用” 。 有关详细信息,请参阅 Azure Data Lake Storage Gen2 简介
  10. 选择“查看+创建”可查看存储帐户设置并创建帐户。
  11. 选择“创建” 。

下图显示了新存储帐户的“基本信息”边栏选项卡上的设置:

Screenshot showing how to create a storage account in the Azure portal.

创建容器

第一步是创建容器,因为 Blob 始终必须上传到容器中。 容器用作组织 Blob 组的方法,就像将计算机上的文件组织到文件夹中一样。

按照这些步骤创建容器:

  1. 选择主页上的“存储帐户” 按钮,然后选择创建的存储帐户。

  2. 选择“服务” 下的“Blob” ,然后选择“容器” 。

    Screenshot showing container creation

容器名必须以字母或数字开头。 名称中只能包含字母、数字和连字符 (-)。 有关命名 Blob 和容器的更多规则,请参阅命名和引用容器、Blob 和元数据

下载 AzCopy

下载 AzCopy V10 可执行文件。

将 AzCopy 文件置于计算机上的任何位置。 将文件位置添加到系统路径变量,这样即可从计算机上的任何文件夹引用该可执行文件。

使用 Microsoft Entra ID 进行身份验证

首先,为标识分配存储 Blob 数据参与者角色。 请参阅分配 Azure 角色以访问 blob 数据

然后打开命令提示符,键入以下命令,按 ENTER 键。

azcopy login --aad-endpoint https://login.partner.microsoftonline.cn

此命令返回身份验证代码和网站的 URL。 打开网站,提供代码,然后选择“下一步”按钮。

Screenshot showing the login prompt

此时会出现登录窗口。 在该窗口中,使用 Azure 帐户凭据登录到 Azure 帐户。 成功登录后,可以关闭浏览器窗口,开始使用 AzCopy。

将文件夹的内容上传到 Blob 存储

可使用 AzCopy 将文件夹中的所有文件上传到 WindowsLinux 上的 Blob 存储中。 若要上传文件夹中的所有 Blob,请输入以下 AzCopy 命令:

azcopy copy "<local-folder-path>" "https://<storage-account-name>.<blob or dfs>.core.chinacloudapi.cn/<container-name>" --recursive=true
  • <local-folder-path> 占位符替换为包含文件(例如 C:\myFolder/mnt/myFolder)的文件夹的路径。

  • <storage-account-name> 占位符替换为存储帐户的名称。

  • 请将 <container-name> 占位符替换为所创建容器的名称。

若要将指定目录的内容以递归方式上传到 Blob 存储,请指定 --recursive 选项。 使用此选项运行 AzCopy 时,会同时上传所有子文件夹及其文件。

将修改的文件上传到 Blob 存储

可基于文件的上次修改时间,使用 AzCopy 上传文件。

若要尝试此操作,可在源目录中修改文件或创建新文件,用于测试目的。 然后,使用 AzCopy sync 命令。

azcopy sync "<local-folder-path>" "https://<storage-account-name>.blob.core.chinacloudapi.cn/<container-name>" --recursive=true
  • <local-folder-path> 占位符替换为包含文件(例如 C:\myFolder/mnt/myFolder)的文件夹的路径。

  • <storage-account-name> 占位符替换为存储帐户的名称。

  • 请将 <container-name> 占位符替换为所创建容器的名称。

若要详细了解 sync 命令,请参阅同步文件

创建计划的任务

可创建用于运行 AzCopy 命令脚本的计划任务或 cron 作业。 此脚本标识新的本地数据,并按特定时间间隔将其上传到云存储。

将 AzCopy 命令复制到文本编辑器。 将 AzCopy 命令的参数值更新为合适的值。 将文件另存为适用于 AzCopy 的 script.sh (Linux) 或 script.bat (Windows)。

这些示例假设你的文件夹名为 myFolder,你的存储帐户名为 mystorageaccount,你的容器名为 mycontainer

注意

Linux 示例将追加 SAS 令牌。 你需要在命令中提供一个。 当前版本的 AzCopy V10 不支持 cron 作业中的 Microsoft Entra 授权。

azcopy sync "/mnt/myfiles" "https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-05-30T06:57:40Z&st=2019-05-29T22:57:40Z&spr=https&sig=BXHippZxxx54hQn%2F4tBY%2BE2JHGCTRv52445rtoyqgFBUo%3D" --recursive=true

在本教程中,Schtasks 用于在 Windows 上创建计划任务。 Crontab 命令用于在 Linux 上创建 cron 作业。

使用 Schtasks ,管理员能够在本地或远程计算机上创建、删除、查询、更改、运行和结束计划的任务。 使用 Cron ,Linux 和 Unix 用户能够使用 cron 表达式在指定日期和时间运行命令或脚本。

若要在 Linux 上创建 cron 作业,请在终端上输入以下命令:

crontab -e
*/5 * * * * sh /path/to/script.sh

在命令中指定 cron 表达式 */5 * * * * 可指示 shell 脚本 script.sh 应每隔五分钟运行一次。 可计划让脚本在每日、每月或每年的特定时间运行。 若要了解有关设置作业执行日期和时间的详细信息,请参阅 cron 表达式

若要验证计划的任务或 cron 作业运行正常,在 myFolder 目录中创建新文件。 等待五分钟以确认已将新文件上传到存储帐户。 转到日志目录,以查看计划任务或 cron 作业的输出日志。

后续步骤

若要详细了解如何在本地和 Azure 存储之间移动数据,请单击以下链接:

有关 AzCopy 的详细信息,请参阅以下任何文章: