将数据迁移到 Microsoft Azure 文件

Atul Sikaria

Microsoft Azure 存储项目经理

 

关于 Microsoft Azure Files

Microsoft Azure Files是一项基于云的存储服务,在云中表现为基于SMB2.1协议的文件共享。现在,Azure中运行的应用程序可以使用熟悉的标准文件系统API(如ReadFile和WriteFile)轻松地在虚拟机间共享文件。此外,还能通过REST接口访问这些文件,这实现了大量混合场景。最后,Azure Files与Blob、Table和 Queue Services构建于相同的技术基础之上,这意味着Azure Files还能发挥内置于我们的平台的现有可用性、持久性、可扩展性和地域冗余性特征。该服务目前处于预览阶段。要阅读有关该服务的更多详细信息,请参阅我们的 Files 博客文章

 

迁移数据

开始使用Azure Files时,可能需要将大量现有数据迁移到Azure Files服务。目前有很多方案可以将数据有效迁移至Azure Files,您的选择将取决于数据的原始位置。本文的剩余部分将会讨论这些选项,以及如何利用各个选项实现最佳性能。

1. 通过 Internet从本地迁移到Azure Files

要复制文件,您可以使用Microsoft Azure提供的AzCopy工具。AzCopy实施了大量优化,从而确保复制作业达到最高吞吐量(例如,并行上载、多线程、正确处理限制等)。

The format of the AzCopy command line is:

AzCopy <source path> <destination URL> [optional filespec] /S /DestKey:<YourKey>

其中:
source path是指要迁移到的目录的路径
destination URL是指要复制到的目录的http URL
filespec用于为要迁移的文件指定任何文件筛选器(默认值为*.*)
YourKey是指目标存储帐户的存储帐户密钥
/S 是指用于复制源目录下的所有目录和子目录的可选交换机
AzCopy包含许多其他命令行选项,您还应使用对您的环境有益的任何其他选项。有关详细信息,请参阅此AzCopy 博客文章

以下是一个用于将 c:\data 目录下的文件复制到directory to Azure Files的示例命令:
AzCopy c:\data https://myaccount.file.core.windows.net/myshare *.* /S /DestKey:myStorageAccountKey

 

2.  从IaaS VM的Azure磁盘迁移到Azure Files

在AzureIaaS VM上运行文件服务器角色的客户发现Azure Files服务颇具吸引力,因为它不必管理文件服务器本身。

要将数据从IaaS磁盘迁移到共享,您需要:

  1. 将磁盘连接到虚拟机
  2. 将共享安装到您的虚拟机
  3. 使用robocopy将数据复制到Azure Files共享

Robocopy是Windows中包含的一款强大的免费文件复制工具,用于执行大型文件复制。

要使用的命令行格式为:

Robocopy <source path> <dest path> [optional filespec] /MIR /MT:16

其中:
source path是指要复制到的目录的路径
dest path是指目标目录的路径
filespec用于为要复制的文件指定任何文件筛选器(默认值为*.*)
MT 是指要使用的线程数(参见下方的讨论)
使用robocopy时,应选择“/mt” 参数最大限度地提高吞吐量。这样就可以控制执行复制的并行线程数,主要控制要存储的 IO 请求的队列深度。线程数过低无法在服务器上排列足够的请求,因而无法充分利用我们的云体系结构固有的平行度。线程数过高很可能会产生服务器端限制,最终会降低吞吐量。在我们的测试中,我们发现队列深度介于16 到 32可以最大限度地提高吞吐量。

 

避免方法:

我们发现,使用xcopy或 Windows Explorer向Azure Files执行大型文件复制效果欠佳。这些工具对于向NTFS文件系统执行文件复制效果很好,但无法在复制到Azure Files时实现足够的平行度。Azure Files支持高度并行 IO,因此很多执行并发复制的线程的性能大大提升。使用线程数适当的robocopy可提供更高的复制吞吐量,继而缩短传输数据的时间总量。

 

3. 从Azure Blob迁移到Azure Files

将数据从Azure Blob 迁移到 Azure Files 的最快方法是使用AzCopy。您应当从与目标存储帐户位于同一数据中心的虚拟机中运行AzCopy。

以下是一个用于执行此操作的AzCopy命令示例:

AzCopy https://myaccount1.blob.core.windows.net/mycontainer Z:\mydirectory *.* /SourceKey:myStorageAccountKey

(这假定将文件共享映射到驱动器 Z)

 

在这种情况下,会将数据下载到虚拟机,然后复制到Azure Files。

有关AzCopy使用方法的详细信息,请参阅上方第 1 部分的讨论。要查看 Blob 命令行选项及其他Blob特定选项(如 SAS),请使用“AzCopy /?”运行AzCopy。

 

4.从云驱动器迁移到Azure磁盘

云驱动器版本为 2010 预览版。它支持客户使用Azure 云服务安装页面 Blob 作为Azure Web 和Worker角色驱动器。随着Azure Files的发布,云驱动器支持的所有场景均可在使用Azure Files时得到更好的发挥。云驱动器将于 2015 年淘汰,因此我们建议仍在使用云驱动器的所有客户将数据迁移到Azure Files。迁移数据的方法与使用 VHD 将数据移出Azure VM十分相似。

  1. 使用云驱动器将 Blob 安装为磁盘(大部分客户在 Web 或Worker角色设置期间执行此操作)
  2. 在您的虚拟机上安装共享。请参阅此博客文章了解如何创建和安装共享。
  3. 使用Robocopy复制数据。请参阅第 3 部分的讨论,了解如何使用Robocopy和“/mt”参数实现最大吞吐量。

 

我们希望用于将数据迁移到Azure Files的这些选项可以有效帮助您将数据迁移到文件服务,并帮助您利用该服务优化现有场景,同时为您的应用程序和企业启用新的场景。