可能有多种方法可以做到这一点,对与错,但是,这是一个我已经使用了一段时间的过程,我最近调整了它来利用新的Azure托管磁盘。
侧栏-标准托管磁盘警告
在我继续之前,我想发布一个关于标准非托管磁盘和托管磁盘之间区别的快速警告。微软会越来越多地把你推给你管理的磁盘。是的,这是一个很好的特性,可以简化VM磁盘的管理。但关键信息如下:
- 如果您提供一个大小为1Tb的非托管磁盘,但是,仅使用100GB,您要支付100GB的存储成本。所以你只为你使用的东西付钱。〔1〕。非托管磁盘成本-Azure文档]
- 如果您提供一个大小为1Tb的托管磁盘,但是,只有你10MB,您将支付整个1TB磁盘的特权[2。管理磁盘成本-Azure文档]
- 此外,高级磁盘,不管它是托管的还是非托管的,你都要为你提供的东西付费。
除此之外,托管磁盘是一个非常好的功能,它使磁盘和存储帐户管理变得相当简单。如果您节省了虚拟机的分配,并且拥有正确管理人员和技术的流程,托管磁盘很棒。
这个过程
DR
- 在Azure中创建快照
- 将快照从快照存储位置复制到Blob存储
- 基于blob.vhd文件创建新的VM实例
- 此blob日志概述了托管磁盘的使用
- 然而,也可以直接从blob安装
实际过程
我最近已经完成了这项工作,并对其进行了更新,使其变得流线型,为了我,尽可能。再一次,这是向托管磁盘使用倾斜的,但是,也可以很容易地扩展到与非托管磁盘一起使用。让我们开始:
步骤0?
如果您想创建虚拟机实例的副本,为了扩大工作量,记得笼统地讲或系统准备步骤1之前的VM实例。在下面的例子中,我的用例是从生产环境(VNET和订阅)创建服务器的副本,并将其移动到不同的、独立的非生产环境(独立的VNET和订阅)。
步骤1–创建虚拟机磁盘的快照
我们需要做的第一件事是关闭虚拟机实例的电源。我已经看到了在虚拟机实例运行时可能会发生快照,但是,我想你可以叫我更老一点的学校,当涉及到这类事情时,要谨慎一点。我以前被这个特别的虫子咬过,令人不快;所以我倾向于谨慎行事。
一旦VM实例离线,转到Azure门户并搜索“快照”。创建一个新的快照。
- 注意:Azure中的快照是按磁盘而不是按虚拟机实例完成的。
- 为快照命名
- 选择VM实例所在的订阅
- 选择要将快照保存到的资源组
- 或者创建一个新的
- 选择快照位置
- 选择源磁盘
- 如果您之前选择了包含您的VM实例的同一个资源组,磁盘选择将首先在列表中显示资源组成员vm实例磁盘
- 选择快照的存储类型-标准或高级
- 我通常只是使用标准配置,因为我还不需要更快的速度溢价(这肯定会改变一天)。
- 创建快照
一是创建快照,完成此快速下一步以生成导出访问URL(我们将在步骤2中需要它):
- 选择快照
- 从顶部菜单中,选择Export
- 您将得到一个带有时间间隔(以秒为单位)的菜单项
- 默认值是3600或1小时
- 这是好,但是,我喜欢做36000(再加0),这样我有一整天的时间来做这个,如果需要的话,一次又一次
- 将生成的URL保存到记事本,以备稍后使用!
步骤2–将快照复制到blob
下一部分依赖于PowerShell。使用参数更新以下PowerShell脚本以将快照复制到blob:
美元storageAccountName = "“$StorageAccountKey=“ “ $absoluteuri=“https://blahblahblah.blob.core.windows.net/blahblahblah / ........ “ 美元destContainer = " “ $blobname=“server.vhd “$destContext = New-AzureStorageContext -StorageAccountName 美元storageAccountName -StorageAccountKey $storageAccountKey Start-AzureStorageBlobCopy -AbsoluteUri -DestContainer 美元destcontainer-destcontext$destcontext-destblob$blobname
仅供参考,以下是对上述情况的快速解释:
- storage account name=要在其中存储VHD的存储帐户
- 存储帐户密钥=用于访问存储帐户的身份验证的主密钥或辅助密钥
- 绝对URI =这是我们在步骤1末尾生成的快照URI
- 目标容器=要存储VHD的位置。通常这是“vhds”,或者创建一个称为“快照”的
- blob名称=vhd本身的文件名(记住只使用小写)
步骤2.5 -如果需要,在斑点周围移动
在我们实际基于这个快照blob创建一个新的VM实例之前,我们还有一个额外的选择。也就是说,也许将blob移动到其他订阅是有意义的。当您想要将开发环境转移到生产环境中时,这尤其方便。其他的用例可能是相反的——为了开发目的而生成一个生产系统的副本。
这绝对是最快的方法,由于我不喜欢效率低下,这里使用的是Azure存储资源管理器(ASE)工具。它是一个为完成存储操作提供快速GUI的应用程序。如果在ASE中添加两个存储帐户,你可以这么简单:
- 从存储帐户A中选择Blob(在订阅A中)
- 从顶部菜单中选择“复制”
- 转到您的第二个存储帐户(存储帐户B可能在订阅B中)
- 去相关的容器
- 从顶部菜单中选择“粘贴”
- 等待Blob复制
- 完成
没有比这更简单或更快的了。我敢肯定如果你的命令行倾斜,为此,您有一个快速转到PowerShell cmdlet,但是,为了我,我发现它非常快。所以它没有坏,为什么修理它。
步骤3–根据我们放入Azure Blob中的快照,使用托管磁盘创建一个新的虚拟机
最后一块拼图,就像陈词滥调一样,是创建一个新的虚拟机实例。再一次,正如这篇博文中难以捉摸、含糊不清的标题所说,我们将使用PowerShell来执行此操作。当然,ARM模板可以工作,Azure门户也可以让您走得更远。然而,同样,我希望提高效率,我发现下面的PowerShell脚本在这方面做得最好。
此外,你可以把这个改成从blob挂载vhd,vs也创建一个新的托管磁盘。所以,为了制造一台新机器,PowerShell既灵活又快捷。
下面是创建新VM实例所需的脚本:
#准备VM参数$rgName = "“美元位置= " australiaEast "$Vnet=“ “子网美元= " /订阅/ xxxxxxxxx resourceGroups / /供应商/ Microsoft.Network / virtualNetworks / /子网/ “美元nicName = " VM01-Nic-01 "$vmname=“vm01”$osdiskname=“vm01 osdisk”$osdiskuri=“https:/”/ .blob.core.windows.net/ /服务器.vhd“$vmsize=“标准\u a1”$StorageAccountType=“标准LRS”美元IPaddress = " 10.10.10.10 "#创建VM资源$ipconfig=new azurermnetworkinterfaceipconfig-name“ipconfig1”-privateIpaddressVersion IPv4-privateIpaddress$ipaddress-subnet id$subnet$nic=new azurermnetworkinterface-name$nicname-resourcegroupname$rgname-location$location-ipconfig$ipconfig$vmcconfig=new azurermvconfig-vmname$vmname-vmsize$vm=add azurermmnetworkinterface-vm$vmcconfig-id$nic.id$osdisk=new azurermdisk-diskname$osdiskname-disk(new-azurermdiskconfig-accounttype$storageaccounttype-location$location-createpoption import-sourceuri$osdiskuri)-resourcegroupname$rgname$vm=set azurermvmosdisk-vm$vm-managedididididskid$osdisk.id-storageaccounttype$storageaccounttype-diskssizeingb 128-createpoption attach-windows$vm=set azurermvmbootdiagnostics-vm$vm-disable创建新的vm new azurermvm-resourcegroupname$rgname-location$location-vm$vm
再一次,让我解释一下我们在脚本开始时设置的一些参数:
- $rgname=要在其中部署虚拟机实例的资源组
- $location = Azure区域
- $vnet=要在其中部署虚拟机实例的虚拟网络
- $subnet=要部署VM实例的子网
- $nic name=服务器的NIC名称
- $vm name=虚拟机实例的名称,服务器名称
- $os disk name=操作系统磁盘名
- $osdiskuri=存储帐户中vhd的直接uri/url
- $vm size=虚拟机大小或虚拟机的服务计划
- $StorageAccountType=您想要什么类型的存储
- $ip address=我在Azure中喜欢的服务器静态IP地址,而不是使用动态IP
就这么简单!
结论
今天是悉尼的星期五。这是肯尼亚先河,很阴郁,2017年第9个寒冷的冬天。我希望上面的内容能够帮助您摆脱困境,或者让您了解快速有效地运行此过程所需的洞察力。那种回馈的感觉,帮助。那种感觉应该能让我暖和起来,让我吃午饭!倒计时!
干杯!
可以直接将快照复制到任何区域中的实际目标存储帐户。
对于如何处理带有多个磁盘的VM有什么想法吗?
我做了以上的方法。但是我的旧虚拟机的DNS设置由于新的而消失了。如何恢复它们?
嗨,伙计,DNS设置消失是什么意思?你的意思是IP地址改变了吗?
您是否介意澄清一下您所作的关于仅为您使用的标准磁盘付费的断言……从我从Azure门户网站上看到的@https://azure.microsoft.com/en-ca/pricing/details/storage/unmanaged-disks/价格是:标准非托管磁盘存储的总成本取决于磁盘的大小和数量,事务数,以及出站数据传输的数量。
他们没有说任何关于只支付你使用那些磁盘的费用。
谢谢你!
如果操作系统磁盘和数据磁盘都是BLOB容器中的vhd,并且由于成本原因您希望将它们用作非托管磁盘,那么步骤3会是什么样子?
如果跳过整个复制快照到blob部分,直接从快照创建新的vm,速度会更快吗?可能不够灵活,但速度更快。
https://docs.microsoft.com/en-us/azure/virtual-machines/scripts/virtual-machines-windows-powershell-sample-create-vm-from-snapshot
嗨,伙计,我认为当时这不是一个选择。云的好处在于它是常绿的。我还没试过,但是,你说得对,可能会更快!
您是对的,但是如果希望VM位于不同的位置,仍然需要将快照复制到blob。
这很容易。部署新的虚拟机之后,它将只有操作系统磁盘,但你可以进入磁盘选项,并添加其他现有的磁盘到它。