我们在 Azure 上有几个 Windows Server 2019 虚拟机,其数据磁盘配置了存储空间。
我们如何在这些机器上扩展配置为简单冗余(NumberOfDataCopies 设置为 1)的虚拟磁盘而不浪费物理存储?
答案1
您可以按照此过程操作,但请小心,因为错误可能会导致数据丢失:
- 第一步是从门户向虚拟机添加一个新磁盘(或更多新磁盘,取决于您的场景)。
- 连接新磁盘后,登录虚拟机,继续服务器管理器\文件和存储服务\卷\存储池,右键单击存储池您想要增加的,为您想要扩展的虚拟磁盘提供资源的,然后将新磁盘添加到该池中。
- 不要立即扩展虚拟磁盘,如果您确实必须这样做(例如,如果您的虚拟磁盘已满,并且您需要一些存储空间来重新启动相关服务),请从目标磁盘中为每个磁盘留出至少 2 GB。例如,如果目标物理磁盘的总和为 512 GB,并且使用 2 个磁盘即可达到此要求,则将最大扩展至 508 GB,就是这样:
available physical storage (512 GB) - ( disks (2) * 2 GB)
- 在提升的 PowerShell 提示符下使用此命令查找要淘汰的磁盘的 UniqueId:
Get-PhysicalDisk | select DeviceId, FriendlyName, UniqueId, Size, PhysicalLocation
在 Azure 门户上查看磁盘已附加到哪个 LUN,并将其与 PhysicLocation 上报告的 LUN 进行匹配(在报告末尾,请不要将其与开头的 DeviceId 混淆)。您需要 UniqueId,它是一个十六进制数,看起来像 6002243673DD16EBB4CF0579AE3A7647。
为您在上一步中确定的要淘汰的磁盘指定一个友好名称:
Set-PhysicalDisk -UniqueId 6002243673DD16EBB4CF0579AE3A7647 -NewFriendlyName ToRetire
- 退出步骤 5 中确定的磁盘:
Set-PhysicalDisk -FriendlyName ToRetire -Usage Retired
- 小心选择正确的存储池,启动虚拟磁盘的修复作业,将要恢复的磁盘中的所有数据移动到新添加的磁盘:
Get-StoragePool –FriendlyName SQLVMStoragePool1 | Get-Virtualdisk | Repair-VirtualDisk -Asjob
- 您可以使用以下命令检查存储作业(可能多次),直到其完成:
Get-StorageJob
存储作业完成后,可以从 GUI 下删除已退役和已耗尽的磁盘服务器管理器\文件和存储服务\卷\存储池, 然后物理磁盘。在删除磁盘之前,我通常会查看其属性,以确保已用空间应小于 1 GB(大约 750 MB 到 850 MB)。相应的 cmdlet 是删除物理磁盘。请小心,根据相关文档,如果存储池中没有足够的空间来容纳此删除,则可能导致数据丢失。在这种情况下,GUI 和 cmdlet 都会警告您。继续操作之前,请仔细阅读。
删除磁盘后,您可以从 Azure 门户中将其解除连接。要找出已删除磁盘的 LUN,请运行以下命令:
Get-PhysicalDisk | where CanPool -eq $true | select DeviceId, FriendlyName, UniqueId, Size, PhysicalLocation | ft
- 同时,一旦磁盘被移除,就可以随意将虚拟磁盘扩展到最大值(比上面计算的要多一点)。
如果您不需要淘汰现有的磁盘,您可以遵循更短、更简单的流程:
- 第一步是从门户向虚拟机添加一个新磁盘(或更多新磁盘,取决于您的场景)。
- 连接新磁盘后,登录虚拟机,继续服务器管理器\文件和存储服务\卷\存储池,右键单击存储池您想要增加的,为您想要扩展的虚拟磁盘提供资源的,然后将新磁盘添加到该池中。
- 将虚拟磁盘扩展到最大值(或达到您需要的大小),使用上一步中在存储池中添加的存储空间。
- 小心选择正确的存储池,或者,您可以尝试运行虚拟磁盘的修复作业,尝试将数据从旧磁盘传播到新添加的磁盘:
Get-StoragePool –FriendlyName SQLVMStoragePool1 | Get-Virtualdisk | Repair-VirtualDisk -Asjob
- 您可以使用以下命令检查存储作业(可能多次),直到其完成:
Get-StorageJob
你可能会发现这里所有 Windows 存储管理特定 cmdlet 的完整文档。