今天给大家带来的是如何移动带有租约的VHD文件。首先我们需要知道,为什么VHD会有租约。带有租约的VHD一般是指已经在使用的VHD,比如作为虚拟机的OS磁盘,或是数据磁盘,即便是这个虚拟机已经处于关闭状态。 那么这样的磁盘,无论我们通过复制还是移动都是不能操作的。我们来看看如何通过PowerShell的Start-AzureStorageBlobCopy命令进行复制会发生什么: ![](https://s4.51cto.com/images/blog/201711/23/3af914138c583b6927a23f3c22be3c68.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 可以看到我们通过这个命令的执行结果是403已禁止。然后我们转到Azure管理门户,找到这块VHD的属性,可以看到此blob具有活动租约,是没有办法进行删除、移动以及复制的。 ![](https://s4.51cto.com/images/blog/201711/23/e95cb433ac897130dd805ef4ef4fb01e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 这时候就需要我们的神器登场,Azure Storage Explorer,可以通过以下网站来下载这个神器: https://azure.microsoft.com/en-us/features/storage-explorer/ ![](https://s4.51cto.com/images/blog/201711/23/1301bede98f39363bc60f39cb3635e46.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 然后我们打开Storage Explorer,在左侧添加新的Azure帐户。 ![](https://s4.51cto.com/images/blog/201711/23/7e80058a2e6144215ce35ad4b3a33acb.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 然后我们在选择添加Azure Account的时候一定要有针对性的选择Azure或Azure China,对应的就是国际版以及中国版。选择Azure是没有办法连接到世纪互联Azure帐户的。 ![](https://s4.51cto.com/images/blog/201711/23/dae6d94f91bf830cbae0d8a436b6fd4a.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 单击下一步后就会弹出登录帐户的窗口,在这里我们填入Azure帐号及密码。 ![](https://s4.51cto.com/images/blog/201711/23/5cafa3fc3bb4f70a73be9f9fef180ce9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 完成后就会检索到当前帐户的订阅,以及订阅里面的存储帐户信息。我们定位到需要移动或复制的VHD文件,右键选择Break Lease。无论我们是进行复制、还是移动,都需要执行这个操作。 ![](https://s4.51cto.com/images/blog/201711/23/5ec723ce9f8d87ca0c9f9af184cd8459.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 完成之后,我们就可以对其进行复制操作,右键选择复制即可。 ![](https://s4.51cto.com/images/blog/201711/23/e34d0239203ae02953c9d6d456b54b51.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 然后我们就可以将它粘贴到任何其他的存储帐户里了。 ![](https://s4.51cto.com/images/blog/201711/23/bcc96fd9d7a28934178ec7510d6fe565.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 通过Azure Storage Explorer来复制、移动blob是非常方便的,我们粘贴之后可以在下方看到文件的状态,比如正在复制,还可以执行取消操作。 ![](https://s4.51cto.com/images/blog/201711/23/c275b88a99a030624ddf00ec431877c1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 要想看到进一步,更详细的复制进度信息,可以通过PowerShell查询复制进度: while($true){Get-AzureStorageBlobCopyState -Container xxxxxxx -Blob xxxxxxxx.vhd - Context $context| fl status,bytescopied,totalbytes ; start-sleep -s 1} 显示的效果就是下面这样,可以看到总的VHD的大小,以及当前已经复制的大小。 ![](https://s4.51cto.com/images/blog/201711/23/3823047f31bfd84ea55b152f1ef39993.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 需要注意的是,对于复制VHD来讲,会对其实际所占用的体积进行复制,而不会按VHD磁盘大小进行操作,比如OS磁盘是127GB,但新系统装好也就是10多GB,所以实际复制或移动的数据也就是10多GB,而不会是127GB。这样来说,还是非常快的。