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页面中添加上传输 ...
随机推荐
- animate.min.css 动画样式移动端存在的问题
使用animate.min.css可以使用很多动画效果,包括3D效果,现在也可以应用于HTML5手机移动端,使用切换效果的时候会导致页面出现卡顿现象,可以使用css3 transform 方法硬件加速 ...
- EditText设置可以编辑和不可编辑状态
1.首先想到在xml中设置android:editable="false",但是如果想在代码中动态设置可编辑状态,没有找到对应的函数 2.然后尝试使用editText.setFoc ...
- CF 61E 树状数组+离散化 求逆序数加强版 三个数逆序
http://codeforces.com/problemset/problem/61/E 题意是求 i<j<k && a[i]>a[j]>a[k] 的对数 会 ...
- [Angular 2] Refactoring mutations to enforce immutable data in Angular 2
When a Todo property updates, you still must create a new Array of Todos and assign a new reference. ...
- SQL Profile 总结(一)
一.前提概述 在介绍SQL Profile之前,不得不说的一个工具就是SQL Tuning Advisor:这个工具是从Oracle 10g開始引入,它的任务就是分析一个指定的SQL语句,并建议怎样使 ...
- FIR滤波器设计
FIR滤波器的优越性: 相位对应为严格的线性,不存在延迟失真,仅仅有固定的时间延迟: 因为不存在稳定性问题,设计相对简单: 仅仅包括实数算法,不涉及复数算法,不须要递推运算,长度为M,阶数为M-1,计 ...
- 解决svn状态图标不显示的办法
SVN是一款出色的代码版本控制工具,大部分开发者都在使用.由于前不久刚做了系统,所以要重装一下SVN,结果就出了问题,问题就是,不管是文件处于什么状态他的提示图标都不显示,这就太不给力了吧.通过搜寻, ...
- Linux进程调度与切换
2016-04-15 张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.分析 进程调度的时机与进程 ...
- error BC31019 无法写入输出文件 未指定错误
今天获取项目最后版本后,编译突然出现错误 error BC31019 无法写入输出文件 "xxx目录" 未指定错误 试着调整当前用户对这个文件的读写权限等各种方法,都未能解决该问题 ...
- C#摇奖程序
private void Form1_Load(object sender, EventArgs e) { //取消跨线层访问控件的判断 Control.CheckForIllegalCrossThr ...