首页 > 解决方案 > 在不关闭实例的情况下调整云 VM 磁盘大小(谷歌云)

问题描述

所以我看到谷歌计算中有一个选项(我假设其他云虚拟机供应商也存在相同的选项,所以问题不是专门针对谷歌计算,而是在底层技术上)无需重新启动机器即可调整磁盘大小,我请问,这怎么可能?

即使它对磁盘使用某种抽象并且他们实际上并没有为 VM 分配物理磁盘,而只是磁盘的一部分(或许多磁盘的一部分),一旦在来宾 VM 中创建了磁盘一定的大小,如何改变而不需要重新启动?它是否以某种方式利用 NFS?

标签: google-compute-enginenfsdisk

解决方案


如今,它直接内置于磁盘协议中。这种能力已经存在了一段时间,因为自 1990 年代后期以来磁盘已被虚拟化(通过 iSCSI / FibreChannel 等网络协议,或通过 VMware 等硬件的软件模拟版本)。

与 VMware 模型一样,GCE 不需要任何额外的网络跃点或协议来执行此操作;管理程序只是公开虚拟磁盘,就好像它是一个物理设备一样,来宾知道它的大小可以改变并处理它。GCE 为其磁盘使用一种特定于虚拟化的驱动程序类型,称为 VirtIO SCSI,但此功能也在许多其他驱动程序类型(跨许多操作系统)中实现。


由于可以随时调整磁盘大小,因此磁盘协议需要一种方法来告诉客户已发生更新。一般来说,这在大多数协议中的工作方式如下:

  • 管理员从管理程序 UI(或他们正在使用的任何存储虚拟化 UI)调整磁盘大小。
  • 在向磁盘发出 IO 之前,来宾内部不会发生任何事情。
  • 来宾操作系统通过来宾操作系统中的设备驱动程序向磁盘发出 IO 命令。
  • Hypervisor 模拟该 IO 命令,注意到磁盘已调整大小并且客户尚未收到警报,并向客户返回响应,告诉它更新其设备视图。
  • 来宾操作系统识别此响应并通过其他命令重新查询设备大小和其他详细信息。

我不是 100% 确定,但我相信它的结构是这样的,传统上磁盘无法将更新发送到操作系统,除非操作系统首先请求它们。这可能是因为磁盘无法知道可以写入哪些内存,即使知道,也无法将对该内存的访问与操作系统同步。但是,这些限制在启用超高吞吐量/超低延迟 SSD 和 NVRAM 方面变得不那么真实了,因此 NVMe 等新磁盘协议的执行方式可能略有不同(我不知道)。


推荐阅读