在不关闭实例的情况下调整云虚拟机磁盘的大小(谷歌云)



所以我在谷歌计算中看到了一个选项(我认为其他云虚拟机供应商也有同样的选项,所以问题不是专门针对谷歌计算,而是针对底层技术(,可以在不重新启动机器的情况下调整磁盘大小,我问,这怎么可能?

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

这是目前直接构建在磁盘协议中的。这种功能已经存在了一段时间,因为自20世纪90年代末以来,磁盘就已经虚拟化了(可以通过iSCSI/FibreChannel等网络协议,也可以通过VMware等硬件的软件模拟版本(。

与VMware模型一样,GCE不需要任何额外的网络跃点或协议来实现这一点;hypervisor只是将虚拟磁盘暴露为物理设备,而guest知道其大小可能会发生变化并进行处理。GCE为其磁盘使用一种特定于虚拟化的驱动程序类型,称为VirtIO SCSI,但该功能也在许多其他驱动程序类型中实现(跨许多操作系统(。


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

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

我不能100%确定,但我相信它的结构之所以如此,是因为传统上,除非操作系统首先请求更新,否则磁盘无法向操作系统发送更新。这可能是因为磁盘无法知道哪些内存可以自由写入,即使知道了,也无法将对该内存的访问与操作系统同步。然而,这些限制在实现超高吞吐量/超低延迟SSD和NVRAM方面变得越来越不真实,因此NVMe等新的磁盘协议可能会略有不同(我不知道(。

最新更新