Linux
fdisk -l 之類的命令如何找到扇區大小?
磁碟的 MBR 是否包含此資訊,因此當我呼叫 fdisk 之類的命令時,核心級程式碼最終會執行並從 MBR 中的特定部分讀取它?如果有,是哪一部分?什麼抵消?
如果它不在 MBR 中,那麼這些類型的命令如何找到它呢?考慮到他們需要計算該分區的起始地址並且他們需要扇區大小來這樣做,他們不能從分區的開頭讀取它,不是嗎?
如何
fdisk
執行命令來查找這些資訊?他們從哪裡讀到的?
設備的扇區大小不儲存在 MBR 中。
使用者空間命令(例如
fdisk
使用BLKBSZGET
和BLKSSZGET
ioctl
s)從磁碟檢索扇區大小。這些ioctl
s 由核心中的驅動程序處理,它們從驅動器本身檢索相關資訊。(相關的文件不多
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 [...]