将 Azure VM 的数据磁盘从高级存储帐户迁移到标准存储帐户

将 Azure VM 的数据磁盘从高级存储帐户迁移到标准存储帐户

我有一台 Ubuntu VM,在 Premium 存储帐户上单独安装了数据磁盘。数据磁盘非常大,因此花费比我想要的更多。我尝试按照说明复制 VHD这里,但操作立即完成,并且根据 Powershell 的结果,VHD 大小为 0 或 -1(但 Azure 门户显示正确的大小)。无论如何,我拆下了高级磁盘,并在其位置连接了标准磁盘。这很糟糕,导致初始错误消息为 -512 字节的磁盘大小无效,随后出现错误消息

无法将现有磁盘“datadrive”附加/分离到虚拟机“myservername”。错误:存储容器上已有租约,该容器包含具有 URI 的 blob

其中“附加/分离”取决于我正在执行的操作。我尝试删除新的标准存储帐户并从头开始该过程,但仍然没有成功。最终,我重新附加了高级帐户上的现有磁盘,并且能够再次成功启动机器,但尝试迁移到标准存储帐户却失败了。

可以将数据磁盘从高级存储帐户迁移到标准帐户吗?如果可以,步骤是什么?

答案1

无法从高级版降级到标准版。

从 P30/P20 缩小到更小的尺寸也是不可行的。

高级磁盘只能附加到支持高级存储的虚拟机。

您唯一的解决方案是创建另一个具有标准存储的虚拟机并通过网络复制文件,如果您有数据库或集群之类的数据,那么这会非常痛苦。

如果您拥有 P30 Premium Storage 磁盘的真正原因是因为那些 ARM 模板喜欢为像 1 MB 数据库这样愚蠢的东西创建 1000GB 磁盘,那么请尝试在部署它们之前修改模板。

答案2

鉴于 Noor 的回答是不支持从 Premium 迁移到 Standard,我不得不采取不同的、更高级别的路线。最终,我不得不创建并连接一个新磁盘,将现有磁盘的文件复制到新磁盘,然后移除并删除原始磁盘。步骤如下:

  1. 在标准存储帐户上创建一个新磁盘并将其附加到 VM。这是目标磁盘。
  2. 格式化新磁盘并将其装载到 VM
  3. 停止所有可能修改源磁盘(即 Premium 存储帐户上的原始磁盘)上文件的进程。在我的例子中,只有 Postgres 使用此磁盘,所以sudo pkill -u postgres这个技巧有效。
  4. 使用 将所有文件从源磁盘复制到目标磁盘cp -a /source/. /destination/
  5. 卸载源驱动器并删除其 fstab 条目。
  6. 卸载目标驱动器并将其挂载点从 /destination 更改为 /source
  7. 使用更新的挂载点重新挂载目标驱动器,启动适当的服务并进行测试。
  8. 一旦您对一切正常感到满意,您就可以从 Premium 存储帐户中删除 vhd。

可以找到有关在 Azure Linux VM 中添加和删除磁盘的其他帮助这里这里。虽然一个链接用于资源管理器,另一个链接用于经典资源模型,但您可以通过 Azure 门户处理创建和删除 vhd,并且 Linux 命令仍然适用于任一模型。

答案3

有一种方法可以避免使用 xcopy 或 robocopy 路线。我在尝试找出使用 powershell 跨订阅迁移 azure premium 托管磁盘的方法时偶然发现了它。以下网站详细介绍了具体细节https://cloudpuzzles.net/2017/05/moving-azure-managed-disks-around/

基本上另一种方法如下

  1. 在 AzureRM 中转到 VM 选择磁盘并选择主操作系统磁盘。
  2. 单击导出,它将提供一个 sas URL,从那里按照上面站点提供的步骤使用 powershell 将托管磁盘复制到存储容器 blob。
  3. 在 Azure 存储资源管理器中,我可以将磁盘复制粘贴到另一个订阅 - 您可以跳过此步骤
  4. 创建新的 VM 并将复制的 VHD 附加到 VM。可以使用 powershell 完成此操作,也可以在创建新 VM 后使用 Azure 存储资源管理器重命名新 vhd 并重命名目标 vhd 以匹配新 VM 的 vhd 名称。

相关内容