首先,在Azure中关于数据存储的付费规则中规定,只要你使用的不是Azure的XIO高级存储提供的I/O密集型的高吞吐低延迟的服务,那么得益于Azure存储设计中采用的稀疏文件方式存储,存储虚拟机VHD的存储只会按照实际的写入数据的使用量进行付费,因此最佳实践就是建立VHD磁盘文件的时候就最好设置为1023GB,也就是Azure订阅所支持的最大值 1TB大小。当然这里讨论的是使用单个磁盘的问题,不包括出于性能或者容量限制等问题采用多个VHD数据磁盘到Azure虚拟机中,并在上面构建软RAID解决方案的情况。
好的,如果最初创建虚拟机或之后挂载的数据磁盘没有根据最佳实践设置大小,后面发现要进行VHD扩展,那么你可能发现在Azure中做类似的操作并不容易,期初我们需要通过一个较为复杂的流程实现这个目的:关闭虚拟机
下载VHD到本地
通过Hyper-V/PowerShell或者第三方工具调整VHD大小
删除或上传时将新的调整大小后的VHD传输到BLOB存储中
重新启动虚拟机
通过diskpart或作者fdisk或者磁盘管理工具调整分区大小
这是个工作量不小的工作,尤其是上传下载部分,即便是通过支持传输实际文件大小的工具如AZCOPY或者PowerShell Add-Vhd CMDLET;所以调整磁盘曾经是难以和用户说明白的一个问题。
现在,调整Azure虚拟机磁盘大小不再是个难题了,因为Azure PowerShell模块中现在提供了新的cmdlet支持调整磁盘大小,Update-AzureDisk,而唯一的限制仅仅是需要确保调整磁盘大小的虚拟机处于关闭和取消分配的状态。
另外,这里脑补一下,有可能在我们环境里面使用的虚拟机有多个虚拟机磁盘对应不同的分区,我们只需要对其中某个特定分区磁盘进行扩充,如果是这种情况究竟哪个VHD磁盘是我们需要调整的呢,一个偷懒的办法就是把所有的数据磁盘统统扩容上去,毕竟不是只按照实际使用收费吗,当然这样无不可;只是我觉得一个好的习惯就是在每次挂接Azure的数据磁盘时,都遵守一个好的命名规范,并且 给磁盘设置一个合理的能够说明用途的标签(Label),这样在调整的时候就能起到事半功倍的效果。
好的,现在为两个测试虚拟机创建数据磁盘,
首先确认连接了当前的Azure订阅,Select-AzureSubscription -SubscriptionId { MySubscriptionId }
Add-AzureAccount -Environment AzureChinaCloud
创建演示虚拟机对象,我们分别演示已经创建的Windows Server 2012 R2服务器和Linux Ubuntu 14.04 LTS虚拟机;$winvm = Get-AzureVM -ServiceName shawnzhaidemocloud -name shzhaiwindemo
$linuxvm = Get-AzureVM -ServiceName shawnzhaidemocloud -Name shzhailinuxdemo
设置数据磁盘信息并获取当前虚拟机存储账号信息并通过该信息创建数据磁盘,function create-datadiskbaseuri
{
Param
(
[Parameter(Mandatory=$true)]
[string] $prefix,
[Parameter(Mandatory=$true)]
[Microsoft.WindowsAzure.Commands.ServiceManagement.Model.ServiceOperationContext]
$VM
)
$datadiskname= "$prefix"+"$(get-random)"
$osdisk= Get-AzureOSDisk–$VM $VM
$baseuri=