在Azure公有云服务中,存储服务是用户非常依赖也是非常核心的一项功能,之前博文也有提到过一些与Azure存储相关的内容,都是从一些实用场景来切入的,比如SQL备份到Blob并还原。
用过Azure存储服务的筒子们都知道Azure主要分为存储账户,容器,此外还有文件服务(可能国内还没有上线),粒度更细的划分还包括三类存储类型,分别是Blob、table以及queue。blob应该是用途最广泛的,我的理解它应该是一种典型的对象类存储;后两者table是用来存放非结构化数据的,queue呢我个人感觉用途更窄一些。对于国内版本Azure每个订阅下最多应该能够支持50个存储账户,每个存储账户下各种类型的数据大小总和上限应该是500GB如果没记错的话,那么显然Azure能够提供PB级的数据量管理能力,想想还是够用的。。。
Blob里面又分块blob和页blob,单个块blob最大容量200GB,适用于一些图片,音频,视频等文件类型,页blob适用于一些随即写入类型的文件,最典型的就是虚拟机的vhd文件。因此Azure VM默认都是以页blob来存放vhd文件的,单个容量最大1TB,这也是为什么我们在Azure上给VM附加磁盘时最大只能1TB。
###################################################################
想要管理并使用Azure存储上的数据,除了通过接口调用之外,微软提供了几种现成的管理工具,以便用户能够随时在本地和云端上传下载,AzCopy就是其中一个选择。
AzCopy可以通过官方网站下载离线安装包,如下图:
或者可以通过Web Installer安装Azure PowerShell也会一并把AzCopy装上,安装后的路径如下:
打开AzCopy后(Microsoft Azure Storage tools),可以通过/?来查看使用帮助和一些简单示例:
###################################################################
下面就在我的环境里做几个简单并且常用的演示,首先我在本地D:\test下准备了三个文件,后缀都不一样,如下图:
另外在我Azure订阅下准备了一个叫做labstorage01的storage account,里面会用到两个容器(container),分别为labcontainer01和02,如下图:
AzCopy的语法还是很好理解的,基本就是围绕source和destination,key这些关键字段来进行的,以下面的截图为例,我将本地d:\test下的文件拷贝到labcontainer01容器下,/S指定递归模式,也就是将test文件夹下的所有文件全部上传:
完成后可以在Azure门户上查看到,如下图:
根据上传文件类型的不同,可以指定blob类型为块或者页,如下图所示:
上传后的vhd文件属性显示为页blob,如下图:
这里我再准备另外一个存储账户labstorage02,并且在这个账户下创建了新的容器labcontainer03:
通过AzCopy就可以在不同的存储账户中转移数据,如下图:
通过上面的指令将labstorage01下labcontainer02里面vhd文件拷贝到labstorage02下labcontainer03容器中,如下图:
此外如果是想模糊匹配指定的文件名或单独的文件,可以通过/pattern:来定义,例如下图指定所有t开头的文件,并以/S方式全部拷贝至目的路径:
同样AzCopy如果在执行过程中意外中断,可以通过/Z来生成日志文件并恢复操作(journal file),/V用来生成Log;对于这两个参数如果不指定其他路径的话,文件就生成在默认路径当中:
很奇怪的是我用/Z没有找到journal file,但是Log文件还是可以正常生成的,默认路径在下图所示:
当然日志文件中的内容和大家通过command line窗口中看到的差不多,如下图:
###################################################################
总的来说,AzCopy是一个很不错的工具,用来管理Azure存储中的数据非常方便,这里依然还有不少没有提及的功能,例如设置并发执行数(concurrent),在Azure Blob与Azure FileShare中彼此拷贝数据,管理table数据等等,并且AzCopy也在不断更新当中,相信在日后会带来更多优秀的功能。