AzCopy – 上传/下载 Windows Azure Blob 文件
在我们收到的请求中,有一个频繁出现的请求是提供一种能在 Windows Azure Blob 存储与其本地文件系统之间轻松上传或下载文件的方法。一年半前, 我们很高兴地发布了 AzCopy, Windows Azure 存储客户借助这款命令行实用程序就可以实现上述操作。该实用程序旨在简化数据传输任务,使您可以轻松将数据传入或传出 Windows Azure 存储帐户。客户可以将其作为独立工具使用,也可以把它添加到现有应用程序中。您可以随时从
aka.ms/AzCopy 下载最新版本。
此命令与您可能已经很熟悉的 robocopy 等其他 Microsoft 文件复制实用程序类似。以下是命令的语法:
AzCopy <Source> <Destination> [filepattern] [Options]
在本文中,我们将重点介绍 AzCopy 的功能,暂不讨论实施细节。帮助命令 (AzCopy /?) 列出了所有可用的系统命令和参数,并对其进行了简要说明。
主要功能:
- 有效性和灵活性:借助 AzCopy,用户可以选择性地复制数据。使用递归模式时,客户可以复制文件的嵌套目录。用户可以指定文件模式(在 Windows 文件系统中使用通配符,在 Blob 存储中使用前缀)来识别等待复制的源文件。此外,用户也可以设置选项以复制设置了“存档”属性的文件。复制大量文件时,如果其中某个文件由于网络问题或其他问题而无法复制,重试选项可以从中断处(尚未复制的文件处)继续执行复制过程。使用重试模式,您无需再重新复制先前已成功复制的文件。
- 支持 Windows Azure 存储数据类型:AzCopy 提供了相应的选项,可以让客户把存储帐户中的目标数据指定为 Block Blob 或 Page Blob。默认设置为 Block Blob,因为它几乎适用于所有文件。使用 Page Blob 选项时,会向 Blob 添加零,使其成为 512 个字节的边界。
- 命名规则:URI 格式(http 或 https)用于指定 Blob 存储路径,而 NTFS Windows 文件文件夹路径则用于 Windows 文件系统。由于一些 Blob 名称无法直接转换到 Windows 文件系统, AzCopy 使用其自身的规则将其转换为 Windows 文件系统名称。下面介绍了一些在命名转换过程中遵循的规则:
- 使用以下规则对与特殊 Windows 文件名称冲突的 Blob 进行重命名:“.” =>“dot”;“..”=>“dotdot”;“/” => “slash”等。与其他冲突解决方案规则一样,如果这些名称发生冲突,则向发生冲突的文件或 Blob 名称添加字符串“(n)”以解决冲突。
- Windows 文件系统命名空间不区分大小写(但是会保留大小写),Windows Azure Blob 命名空间区分大小写,以下规则适用:
- § Blob 命名空间中的 Blob 使用文件名的默认大小写创建。
- § 文件使用 Blob 命名空间的默认大小写创建。
- § 如果从 Blob 命名空间复制到文件命名空间时发生大小写冲突,将向发生冲突的文件或 Blob 名称添加字符串“(n)”。
- 日志记录:用户可以在日志模式 (verbose) 下运行 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 可用带宽的限制。
已知问题
- 如果复制时不使用 /XN(排除新文件)和 /XO(排除旧文件),则此工具在复制前仅比较源文件和目标文件的名称。因此,尽管源文件和目标文件完全相同,系统依旧会提示用户是否覆盖目标文件。
- 如果复制时使用 /XN 和 /XO,请注意您的本地系统时间和存储服务中存储的时间将略有出入。因此,如果差不多同时修改 Blob 和本地文件,比较时可能会做出不正确的筛选。
- 使用重启恢复选项将文件复制到 Page Blob 时,如果复制操作在中途发生故障,则此工具将从文件的开始位置重新启动复制过程。对于将文件复制到 Block Blob,这一问题则不存在。
- 如果存储容器下有两个分别名为“a”和“a/b”的 Blob,则无法在该容器下使用 /S 复制这两个 Blob。Windows 不允许在同一文件夹下同时创建名称均为“a”的文件夹和文件。
Aung Oo
Matthew Hendel
Windows Azure 存储团队
本文翻译自:
AzCopy – 上传/下载 Windows Azure Blob 文件的更多相关文章
- [New Portal]Windows Azure Virtual Machine (21) 将本地Hyper-V的VM上传至Windows Azure Virtual Machine
<Windows Azure Platform 系列文章目录> 本章介绍的内容是将本地Hyper-V的VHD,上传到Azure数据中心,并且保留OS中的内容. 注意:笔者没有执行Syspr ...
- 用SpringMVC实现的上传下载方式二(多文件上传)
参考来源: http://blog.csdn.net/qq_32953079/article/details/52290208 1.导入相关jar包 commons-fileupload.j ...
- 文件上传下载(C#,web,asp.net)
目的:在浏览器页面启动上传下载CS软件,实现文件的批量下载与上传. 技术路线: 开发上传下载客户端CS程序与注册程序,压缩放到服务器端指定位置: 开发服务器端程序用以接收上传请求,压缩放到服务器端: ...
- Java Web 项目的文件/文件夹上传下载
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- java文件上传下载组件
需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- 阿里云负载均衡SLB的文件上传下载问题解决
Nfs同步文件夹配置 问题描述 : javaweb应用部署到云服务器上时,当服务器配置了SLB负载均衡的时候,多台服务器就会造成文件上传下载获取不到文件的错误, 解决办法有:1.hdfs 2.搭建f ...
- JavaWeb 文件上传下载
1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...
- javaEE(14)_文件上传下载
一.文件上传概述 1.实现web开发中的文件上传功能,需完成如下二步操作: •在web页面中添加上传输入项•在servlet中读取上传文件的数据,并保存到本地硬盘中. 2.如何在web页面中添加上传输 ...
随机推荐
- 玩转docker
开篇先论赌 (组词,赌博,....),时刻,每天都在赌! 何为赌?仁者见仁,智者必定又有一番见解,保持沉默,意见保留; ——改变思维模式,Ruiy让赌赢在“思维”!!!; 存在在IT界Ruiy定格,即 ...
- Listen第二个参数的意义
今天主要回顾下listen的第二个参数的意义. 话说现在现在都是用框架写业务代码.真的很少在去关注最基本的socket函数的意义了.该忘得都忘得差不多了.~~~ 要慢慢捡起来. 主要是在看redi ...
- thinkphp+datatables+ajax 大量数据服务器端查询
今天一白天全耗在这个问题上了,知乎2小时除外... 现在19:28分,记下来以备后查. 问题描述:从后台数据库查询人员信息,1w多条,使用一个好看的基于bootstrap的模板 Bootstrap-A ...
- java中 SSL认证和keystore使用
java中 SSL认证和keystore使用 2013-10-12 11:08 10488人阅读 评论(0) 收藏 举报 目录(?)[+] 好久没用过SSL认证了,东西久不用,就有点生疏. ...
- PHPSTORM实用快捷键
alt + F7 find usages 功能,可以很方便的找到函数在哪里调用了 Ctrl + E 可查看最近打开文件或项目 项目名右键选择"Local History | Show His ...
- (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2
转自:http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2 Upda ...
- C++编程规范之18:尽可能局部地声明变量
摘要: 避免作用域膨胀,对于需求如此,对于变量也是如此.变量将引入状态,而我们应该尽可能少地处理状态,变量的生存期也是越短越好. 变量的生存期超过必需的长度时会产生以下几个缺点: 1. 它们 ...
- UIWebView加载html 图片大小自适应的方法汇总
方法一 处理HTMLString的方法: NSString *htmls = [NSString stringWithFormat:@"<html> \n" " ...
- MySQL 二进制日志(Binary Log)
同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分. MySQL有几种不同的日志文件.通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志能够帮助我们定位mysqld ...
- 小学生之手(01)之 "for循环"
---恢复内容开始--- 咳咳咳!第一次要写这种东西,要是有不足的地方,请见谅!!!并且感觉在这班门弄斧是不是有点托大了.一向擅长低调的我,在’被逼无奈‘之下,要嚣张一下了......(此处省略500 ...