fdisk -l 等命令如何查找扇区大小?

fdisk -l 等命令如何查找扇区大小?

磁盘的 MBR 是否包含此信息,因此当我调用 fdisk 这样的命令时,内核级代码最终会运行并从 MBR 中的特定部分读取它?如果有,是哪一部分?什么偏移?

如果它不在MBR中,那么这些类型的命令如何找到它呢?考虑到他们需要计算该分区的起始地址并且需要扇区大小来执行此操作,他们无法从分区的开头读取它,不是吗?

如何fdisk执行类似的命令来查找此信息?他们从哪里读到的?

答案1

设备的扇区大小不存储在 MBR 中。

用户空间命令,例如fdiskuse theBLKBSZGETBLKSSZGET ioctls 从磁盘检索扇区大小。这些ioctl由内核中的驱动程序处理,内核从驱动器本身检索相关信息。

(有关相关的文档不多ioctl;您需要检查内核源代码.)

您可以使用其他直接查询驱动器的工具查看相关信息,例如hdparm。在小型 SSD 上,hdparm -I告诉我

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                   512 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 2.5 inch
Nominal Media Rotation Rate: Solid State Device
[...]

在具有 4K 扇区的大型旋转磁盘上,我得到的是

[...]
Logical  Sector size:                   512 bytes
Physical Sector size:                  4096 bytes
Logical Sector-0 offset:                  0 bytes
[...]
cache/buffer size  = unknown
Form Factor: 3.5 inch
Nominal Media Rotation Rate: 5400
[...]

答案2

那里有几个问题,我试图找到“fdisk 在哪里找到磁盘的扇区大小?”的答案。我发现的最好的一点是它从 获取信息ioctl

ioctl信息关于维基百科Linux 手册页

fdisk源代码链接

相关内容