有人能告诉我 Linux 下硬盘的 hdX 和 sdX 命名约定背后是什么吗?我知道这是一个“约定”,但这意味着什么?例如,这是否意味着必须将SCSI 驱动器称为 sdX 否则它将无法工作?
背景是我正在使用基于 linux 的自定义操作系统和 vmware,因此我可以随心所欲地调用驱动器。我知道这个约定对用户来说很好,我只是想知道内核是否需要它。
内核处理两种类型的驱动器:
SATA、SAS 和 USB 驱动器都使用 SCSI 子系统,因为它具有旧 IDE 驱动程序所没有的某些优势。因此,这些控制器设备被抽象为主机计算机的 SCSI 控制器,包含 SCSI 设备。
对于 IDE 驱动器,命名约定非常严格:
...等等。(是的,可能有两个以上的 IDE 总线。)因此,当您在 IDE 总线上有一个 CD 或 DVD 驱动器时,看到这些驱动器挂在第二个 IDE 总线上的情况并不少见(因为它一直都是这样)已经完成 - 但这是另一个讨论)。所以很可能有hdc而没有hda和hdb。
了解这一点很重要,因为 SCSI 子系统是不同的。驱动器按照检测到的顺序进行标记。
假设您有一个老式的 SCSI 总线,并在 SCSI ID 0、3 和 5 处挂起磁盘。这些驱动器将分别被检测为 sda、sdb 和 sdc。
现在假设您购买了第四个驱动器,并且由于只有您自己知道的原因,您将其分配给 SCSI ID 4。这个新驱动器现在被检测为 sdc,而 SCSI ID 5 上的先前存在的驱动器现在是 sdd。如果您按绝对名称引用分区,这可能会引起各种欢呼——在使用插入的新驱动器启动后,/dev/sdc1 不是以前的样子,您现在的意思是 /dev/sdd1。
这就是为什么 RedHat(和其他人)喜欢 e2label 功能的原因之一,您可以在其中为分区分配一个唯一的标签并通过引用该标签来安装它。
我不知道为什么 Linux 是这样构建的。像 Solaris 这样的老式操作系统强制您通过 SCSI 地址来引用磁盘——所以 /dev/dsk/c0t0d0s0(控制器 0、目标(或 ID)0、磁盘 0(传统,不要问)、切片(或partition) 0) 将是绝对的,无论总线上有什么其他磁盘。如果您插入一个新的 scsi 控制器,引入一个新的总线 ID,它确实会遇到同样的问题,但这种情况相对较少,而且大多数计算机都知道比以后添加的控制器更喜欢它们的内部控制器。linux 方式可以更简单——您不需要知道或关心您的控制器/ID 信息。您只知道它是第一个或第二个磁盘。对于大多数用户来说,这是真的,您最多只有几个驱动器要处理,因此只要您能找到它,您就不必真正关心它的名称。
分区号又是另一回事。PC 上使用的标准 MS (DOS) 分区表中有四个主分区。不多也不少。它们可以是 0 长度,并且不需要从定义分区 1 开始。如果需要,您可以从分区 3 开始。我认为它们甚至不必在磁盘上是连续的——您可以将分区 3 定义为从块 0 开始,并将分区 1 定义为在此之后的某个位置开始。大多数 linux 分区工具会写入从分区 1 开始的分区表,依此类推。大多数 linux 内核会将长度为 0 的分区视为空分区或不存在的分区,并且不会宣布它的存在。
如果您需要更多分区,则必须将其中一个主分区标记为“扩展”分区的容器。然后,您可以将其细分为任意数量的扩展分区(受限于我不知道的某些限制)。不同之处在于内核总是从分区号 5 开始枚举扩展分区。因此,如果您的磁盘 hda 具有两个主分区和两个扩展分区(无论出于何种原因),它们将被枚举为 hda1、hda2、hda5,和hda6。分区 3 将被标记为包含扩展分区并且不会被枚举。
所以这是解释设备名称的很多词。它实际上只是告诉您设备是 IDE 或 SCSI 控制的设备,并让您了解设备是如何分区的。
除非有令人信服的理由不这样做,否则我不会惹他们。更改它们只会让那些认为自己知道自己在做什么的用户感到困惑。
| 归档时间: |
|
| 查看次数: |
4208 次 |
| 最近记录: |