Linux 是根据什么算法分配硬盘号的?

Kon*_*ert 4 automounting mount devices

我观察到在同一系统的重复启动之间,设备名称/dev/sda/dev/sdb/...和物理硬盘驱动器之间的映射保持不变。

但是,如果我将硬盘驱动器插入主板上的不同插槽或添加/删除驱动器,我不确定它是否保持不变。

Linux 对设备名称到物理硬盘驱动器的映射做出了哪些保证?

它使用哪些规则将物理硬盘驱动器映射到 /dev/ 中的文件?

Chr*_*own 17

驱动器名称(在典型的 Linux 系统上)由内核决定(因为必须首先在那里检测到设备),并且稍后可以由 udev 修改。它如何决定哪个硬件映射到哪个块特殊文件是一个实现细节,这将取决于您的 udev 配置、内核配置、模块设置和许多其他事情(包括运气)。

即使具有相同的硬件和配置,设备到驱动器号的映射也不能保证始终相同(有些系统特别容易由于竞争条件而交换设备名称,例如并行模块加载中的那些) .

要回答您没有问过的问题,请不要将其/dev/sd*用作任何标识符,除非您事先确定要安装的设备(例如,您在检查fdisk和/或之后手动安装blkid)。相反,使用文件系统标签、文件系统 UUID 或磁盘 ID 来确保您通过其属性而不是其检测顺序指向正确的设备、分区或文件系统。您可以在 中找到磁盘 ID /dev/disk/by-id,这是一个方便的安装位置,并保证您始终使用同一个磁盘。

例如,要查找可用于当前分区的磁盘 ID /dev/sda1,您可以使用find

$ find -L /dev/disk/by-id -samefile /dev/sda1
/dev/disk/by-id/wwn-0x5000cca22dd9fc29-part1
/dev/disk/by-id/ata-HGST_HUS724020ALA640_PN1181P6HV51ZW-part1
Run Code Online (Sandbox Code Playgroud)

  • 很高兴您回答了,因为我从未注意到可以真正简化许多情况的解决方案。 (4认同)