在阅读了《Understanding the Linux Kernel》一书中有关块设备驱动程序的章节后,我对次要数字的用法有点困惑。
我之前读过有关主要数字和次要数字及其用法的内容。因此,主编号标识用于处理物理硬盘 I/O 请求的驱动程序。次要编号仅由驱动程序本身用来识别多个硬盘和分区。我找到的几乎所有解释都是这样描述的。
在上述书籍的章节中,作者说,在初始化期间,驱动程序为每个现有硬盘创建一个 gendisk 结构,其中仅记录第一个可用的次要编号和可用次要编号的数量。
因此在访问硬盘之前,内核的通用块层会将某个分区内的相对扇区号转换为硬盘内的绝对扇区号。因此设备驱动程序不必关心任何分区。
我能想象的唯一目的是区分不同的硬盘而不是分区。我认为我错了,如果有人知道真相那就太好了。
答案1
我能想象的唯一目的是区分不同的硬盘而不是分区。
那是对的。
有许多块设备驱动程序和许多类型的分区。除了设置支持的分区数量之外,底层块设备驱动程序不需要实现任何分区处理。
使用异常的主要目的是不必费心支持 LVM 等设备上的分区,因为这些设备通常不需要它们。
(如果你做如果需要内核在 LVM 上提供子分区,您可以使用kpartx
它创建新的设备映射器设备,其设备名称可以方便地类似于正常的分区名称模式)。