操作系统如何检测磁盘容量的实时大小调整?

How can operating system detect live resize of disk capacity?

看到下面的讨论,有一些疑问: live resize of a NVMe drive

如果 nvme 设备的物理容量发生变化(例如,从 10GB 到 20GB),操作系统如何在不重启的情况下检测到它?

上述link中,重新扫描pci总线即可解决

执行重新扫描时,操作系统是否要求nvme设备更新其元信息(例如,容量等)?

OS具体如何与磁盘交互? (如何从磁盘读取更改的设备参数,而不是内存中的旧设备参数?)

这可能是一个 AWS 虚拟机,所以磁盘实际上是一个虚拟磁盘。您不能像物理升级容量那样调整物理磁盘的大小(您需要更换磁盘)。

话虽如此,这台机器可能 运行 在类型 1 管理程序之上。我对这些的理解是,虚拟机 (VM) 运行 作为最小操作系统(管理程序)之上不同环上的进程。当虚拟机执行特权指令时,它会触发保护故障,管理程序因此可以检查实际触发故障的人(是来宾内核还是来宾内核中的用户模式进程?)。如果它是来宾内核,那么它​​可以代表来宾执行该指令。否则,它可能会做真正内核会做的事情(触发异常)。它可以分辨出不同之处,因为来宾内核 运行s 在与环 3(用户模式)不同的环中。

也就是说,NVME 设备不是 PCI,而是 NVME。 NVME 驱动器的主机控制器是 PCI。要重新扫描 NVME 驱动器,您将 read/write 到内存映射到 RAM 中的一些寄存器,并询问 NVME PCI 主机控制器找到的不同磁盘的大小是多少。众所周知,PCI 在某些情况下是可热插拔的(类似于 USB),但大多数情况下不适用于消费类主板。我不认为当 PCI 设备热插拔时你会得到任何中断,所以你只能重新扫描设备。

对于 NVME,当磁盘为 swapped/changes 大小时是否会出现中断取决于主机控制器。至于虚拟磁盘,它可能取决于很多不同的东西。您绝对可以在这里进行 PCI 重新扫描。我想这取决于管理程序、OS 和主机控制器配置。