在我们收到的请求中,有一个频繁出现的请求是提供一种能在 Windows Azure Blob 存储与其本地文件系统之间轻松上传或下载文件的方法。一年半前, 我们很高兴地发布了 AzCopy, Windows Azure 存储客户借助这款命令行实用程序就可以实现上述操作。该实用程序旨在简化数据传输任务,使您可以轻松将数据传入或传出 Windows Azure 存储帐户。客户可以将其作为独立工具使用,也可以把它添加到现有应用程序中。您可以随时从 aka.ms/AzCopy 下载最新版本。
此命令与您可能已经很熟悉的 robocopy 等其他 Microsoft 文件复制实用程序类似。以下是命令的语法:
AzCopy <Source> <Destination> [filepattern] [Options]
在本文中,我们将重点介绍 AzCopy 的功能,暂不讨论实施细节。帮助命令 (AzCopy /?) 列出了所有可用的系统命令和参数,并对其进行了简要说明。
主要功能:
示例:
示例 1:在递归模式中,将可从本地访问的文件目录复制到 Blob 存储容器。
AzCopy C:\blob-data https://myaccount.blob.core.windows.net/mycontainer/ /destkey:key /S
上述命令将把“c:\blob-data”目录和所有子目录中的所有文件作为 Block Blob 复制到存储帐户“myaccount”中名为“mycontainer”的容器。“Blob-data”文件夹包含以下文件和一个名为“subfolder1”的子目录;
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx
完成复制操作后,Blob 容器“mycontainer”中将包含以下 Blob:
car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
如果不使用递归模式(执行复制时不使用“/S”选项),Blob 容器“mycontainer”将仅包含“blob-data”文件夹下的以下文件,并将忽略“subfolder1”文件夹下的文件。
car1.docx
car2.docx
car3.docx
train1.docx
示例 2:如果同时启用日志模式和递归模式,将从 Blob 存储中把一组 Blob 以递归方式复制到可从本地访问的目录。
AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data /sourceKey:key /S /V
此命令会在日志模式和递归模式中将帐户“myaccount”的 Blob 容器“mycontainer”下的所有 Blob 复制到“c:\blob-data”目录。
Blob 容器“mycontainer”包含以下文件:
car1.docx
car2.docx
car3.docx
train1.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
由于我们正在使用日志模式,此工具将打印以下输出到日志文件中,其中除了传输摘要外,还包含每个文件的文件传输状态。默认情况下,此工具仅显示传输摘要:
Finished Transfer: car1.docx
Finished Transfer: car2.docx
Finished Transfer: car3.docx
Finished Transfer: train1.docx
Finished Transfer: subfolder1/car_sub1.docx
Finished Transfer: subfolder1/car_sub2.docx
Transfer summary:
-----------------
Total files transferred: 6
Transfer successfully: 6
Transfer failed: 0
After the copy operation,
c:\blob-data folder will contain the files listed below:
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\train1.docx
C:\blob-data\subfolder1\car_sub1.docx
C:\blob-data\subfolder1\car_sub2.docx
下面我们来稍微尝试一下另一种略有不同的情况,即通过使用以下命令复制以“subfolder1\”开头的 Blob:
AzCopy https://myaccount.blob.core.windows.net/mycontainer/subfolder1 c:\blob-data /sourceKey:key /S /V
上述命令仅复制以“subfolder1/”开头的 Blob,因此工具仅将“subfolder1/car_sub1.docx”和“subfolder1/car_sub2.docx”Blob 复制到“c:\blob-data\”文件夹。执行复制操作后,“C:\blob-data”将包含以下文件:
C:\blob-data\car_sub1.docx
C:\blob-data\car_sub2.docx
示例 3:在重试模式中,将可从本地访问的文件目录复制到 Blob 帐户
AzCopy c:\blob-data https://myaccount.blob.core.windows.net/mycontainer /destkey:key /Z:restart.log /S
Restart.log 是一个用于维护复制操作状态并记录在中断时重新启动操作的日志文件。如果没有指定日志文件和重试模式参数,日志文件将默认为%localAppData%中的“azcopy.log”。
例如,“C:\blob-data”文件夹包含五个大文件,每个文件的大小均超过 100 MB。
C:\blob-data\car.docx
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\car4.docx
使用重试选项运行时,借助 AzCopy,可以在发生故障的情况下重新启动复制过程。如果复制“car.docx”时发生故障,AzCopy 会从“car.docx”尚未复制的部分继续复制。如果成功复制“car.docx”后发生故障,AzCopy 会从剩余四个文件中尚未复制的部分继续复制操作。
示例 4:使用文件名匹配模式选择存储 Blob 容器中的文件数量,并将其复制到可从本地访问的目录。
AzCopy https://myaccount.blob.core.windows.net/mycontainer c:\blob-data car /sourceKey:key /Z /S
“mycontainer”包含以下文件:
car1.docx
car2.docx
car3.docx
train.docx
carfolder/car_sub1.docx
carfolder/train_sub2.docx
subfolder1/car_sub1.docx
subfolder1/car_sub2.docx
复制操作完成后,“c:\blob-data”将包含以下所列的文件。由于指定了前缀为“car”的文件名匹配模式,因此复制操作仅复制前缀为“car”的文件。请注意,如果此前缀直接位于“mycontainer”容器中,则其适用于 Blob,或者适用于子目录名称。
C:\blob-data\car1.docx
C:\blob-data\car2.docx
C:\blob-data\car3.docx
C:\blob-data\carfolder\car_sub1.docx
C:\blob-data\carfolder\train_sub2.docx
性能
在 Windows Azure 数据中心内(即位于同一数据中心内的计算实例和存储帐户之间),用户使用特大计算实例上传和下载大量数据的速度应该能够达到 50MB/s。向 Windows Azure 数据中心传入和传出数据将受到 AzCopy 可用带宽的限制。
已知问题
Aung Oo
Matthew Hendel
Windows Azure 存储团队
本文翻译自:
http://blogs.msdn.com/b/windowsazurestorage/archive/2012/12/03/azcopy-uploading-downloading-files-for-windows-azure-blobs.aspx