Linux 内核如何知道磁盘容量? (在启动时)

How does Linux Kernel know disk capacity? (at boot time)

我知道在linux环境下,我们可以通过dffdisk.

但是,据我所知,这样的命令似乎是“读取已加载到内存中的磁盘容量信息”。 (不直接向磁盘询问容量)

如果是这样,最早(可能是在启动时)如何计算磁盘容量?

linux 内核驱动程序是否在询问磁盘控制器(在磁盘内)?

或者,从Disk LBA 0开始一路扫描算出MAX LBA?

另外,不知道是不是每个存储接口的方法不一样。 (例如,SCSi、ATA、NVMe)

How does Linux Kernel know disk capacity? (at boot time)

这在很大程度上取决于光盘的连接方式。内核通过使用特定协议与磁盘上的控制器执行特定通信来查询磁盘容量。

例如,如果光盘是通过 ATA 连接的,我们可以查看 ATA/ATAPI 命令集,如 https://people.freebsd.org/~imp/asiabsdcon2015/works/d2161r5-ATAATAPI_Command_Set_-_3.pdf 。在对文档进行简短筛选后,我想我已经找到了 - 例如,您可以使用 [=13] 从 IDENTIFY DEVICE data log 中的 Capacity log page(第 431 页)的 Device Capacity 字段中获取光盘容量=](第 182 页)。 4.1.2 Capacity reporting 第 19 页和第 103 页的命令 IDENTIFY DEVICE - ECh, PIO Data-In 听起来也相关。