磁盘的 MBR 是否包含此信息,因此当我调用 fdisk 这样的命令时,内核级代码最终会运行并从 MBR 中的特定部分读取它?如果有,是哪一部分?什么偏移?
如果它不在MBR中,那么这些类型的命令如何找到它呢?考虑到他们需要计算该分区的起始地址并且需要扇区大小来执行此操作,他们无法从分区的开头读取它,不是吗?
如何fdisk
执行类似的命令来查找此信息?他们从哪里读到的?
答案1
设备的扇区大小不存储在 MBR 中。
用户空间命令,例如fdisk
use theBLKBSZGET
和BLKSSZGET
ioctl
s 从磁盘检索扇区大小。这些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
[...]