【问题标题】:Resizing cloud VM disk without taking instance down (Google cloud)在不关闭实例的情况下调整云 VM 磁盘大小(谷歌云)
【发布时间】:2019-04-14 08:14:57
【问题描述】:
所以我看到谷歌计算中有一个选项(我假设其他云虚拟机供应商也存在相同的选项,所以问题不是专门针对谷歌计算,而是在底层技术上)无需重新启动机器即可调整磁盘大小,我问,这怎么可能?
即使它对磁盘使用某种抽象并且他们实际上并没有为虚拟机分配物理磁盘,而只是磁盘的一部分(或许多磁盘的一部分),一旦在客户机中创建磁盘虚拟机有一定的大小,如何在不需要重启的情况下改变它?它是否以某种方式利用 NFS?
【问题讨论】:
标签:
google-compute-engine
nfs
disk
【解决方案1】:
如今,这已直接内置于磁盘协议中。这种功能已经存在了一段时间,因为自 1990 年代后期以来磁盘已被虚拟化(通过 iSCSI / FibreChannel 等网络协议,或通过 VMware 等硬件的软件模拟版本)。
与 VMware 模型一样,GCE 不需要任何额外的网络跃点或协议来执行此操作;管理程序只是公开虚拟磁盘,就好像它是一个物理设备一样,来宾知道它的大小可以改变并处理它。 GCE 对其磁盘使用一种特定于虚拟化的驱动程序类型,称为 VirtIO SCSI,但此功能也在许多其他驱动程序类型(跨许多操作系统)中实现。
由于可以随时调整磁盘的大小,因此磁盘协议需要一种方法来告知客户机已发生更新。一般而言,这在大多数协议中的工作方式如下:
- 管理员通过管理程序 UI(或他们使用的任何存储虚拟化 UI)调整磁盘大小。
- 在客户机向磁盘发出 IO 之前,不会在客户机内部发生任何事情。
- 来宾操作系统通过来宾操作系统中的设备驱动程序向磁盘发出 IO 命令。
- Hypervisor 会模拟该 IO 命令,注意到磁盘已调整大小且访客尚未收到警报,并向访客返回响应,告知其更新其设备视图。
- 来宾操作系统识别此响应并通过其他命令重新查询设备大小和其他详细信息。
我不能 100% 确定,但我相信它的结构是这样的,传统上磁盘无法向操作系统发送更新,除非操作系统首先请求它们。这可能是因为磁盘无法知道可以写入哪些内存,即使知道,也无法将对该内存的访问与操作系统同步。然而,这些限制在启用超高吞吐量/超低延迟 SSD 和 NVRAM 方面变得不那么真实了,因此 NVMe 等新磁盘协议的执行方式可能略有不同(我不知道)。