在试图理解的同时这另一个问题,我遇到了/dev/sda0
被提及。
我在 Linux 方面有一些经验,并且习惯了这种方案,其中sda
, sdb
, ... 是设备,sda1
, sda2
, ... , sdb1
, sdb2
, ... 是分区(每个分区位于各自的设备内)。在此方案中sda0
,sdb0
, ... 不会出现。我不记得sda0
曾经见过。
仍然sda0
出现在 U&L SE 上,关于超级用户和其他地方。在它出现的地方,它几乎总是第一个分区,即我希望sda1
在我习惯的方案中出现的分区。
另一方面,在 Debian 10 中,我可以看到major,minor
数字8,1
for sda1
、8,2
forsda2
等。因此,如果有人问我sda0
可能是什么,我会说8,0
哪个已经分配给了sda
。这个推理相当于sda0
,sda
整个设备。我猜这些数字是 Linux 特有的,在非 Linux Unix(类似)操作系统中它们可能会有所不同,因此推理可能不适用于那里。
在互联网上我发现很少有sda0
作为整体设备使用的外观。但这些例子相当晦涩难懂,它们可能是由于拼写错误或某人错误造成的。
无论如何,问题是:是/曾经是/dev/sda0
标准的东西吗?如果是这样,那是什么? (它可以/可能是一个完整的设备吗?)。在什么情况下这是标准的事情? (例如特定操作系统、一些旧内核、特定驱动程序、虚拟机内部、一些过时的(?)udev 配置等)。
我希望得到的答案能够给我足够的洞察力,这样下次我看到的时候/dev/sda0
我就能告诉自己:“哦,这个家伙可能正在使用……”;或者也许:‘小心!前面的自定义配置'。
旁注:我还发现了 的提及/dev/hda0
和一个从 开始枚举的方案hda1
。我完全无法判断它是否与我观察到的密切相关(平行)/dev/sda*
或只是巧合。
答案1
我不知道它/dev/sda0
曾经是一个标准设备名称,即使在其他 Unix 系统上也是如此。据我所知,对 的引用sda0
可能是错误,而不是自定义设置的指示。
即使在输出中对设备进行命名的情况下,用户仍然会混淆这些数字。例如,这个论坛帖子在引用的输出中明确列出了sda1
,sda3
但标题提到了sda0
。相似地,为什么我的驱动器在 grub 中被称为“(hda0,msdos5)”等,而不是您通常看到的 (hda0,5)、(hda0,sda5) 等?指hda0
(据我所知,它也从来不是标准设备名称),即使 Grub 使用hd0
等。
Linux内核发布设备分配列表;这描述了如何处理分区:
对于分区,添加到整个磁盘设备号:
价值 设备 用法 0 /dev/hd?
整盘 1 /dev/hd?1
第一个分区 2 /dev/hd?2
第二分区 …… …… …… 63 /dev/hd?63
第63分区
SCSI 磁盘 ( /dev/sd?
) 的处理方式相同:
分区的处理方式与 IDE 磁盘相同(请参阅主编号 3),只不过分区的限制为 15。
正如您所看到的,没有提供 0 编号的分区; “第 0 个”设备是整个磁盘,不带数字后缀。
(请注意,“SCSI 磁盘”,又名sd?
,用于许多非 SCSI 设备;请参阅为什么CentOS将ATA总线转换为scsi总线?了解一些历史。)
答案2
我在一个没有 udev 的系统上看到了这一点,mknod 不会对你进行事后猜测(我使用过一个系统一段时间,其中放入错误的主要+次要由 makenod 以某种方式修复),并使用 2.0 内核; /dev/hda0 是整个磁盘设备。
我当时使用的系统是各种奇怪的基于软盘的发行版,即使您愿意,也无法从源代码构建;我当时主要使用 muLinux,但这不是那个,我很难再找到它。我参与社区一段时间了。所有这些的特点是它们都是手工制作的。没有标准化,没有升级,没有包管理器,什么都没有。 /dev/hda0 设备一定来自构建它的人,他相信它应该是这样的。
如果这种奇怪的命名约定出现在 udev 时代,我会感到惊讶。
答案3
目前尚不清楚您的问题是否特定于 Linux,但如果不是,FreeBSD 系统会将其视为/dev/da0
系统上的第一个磁盘驱动器,至少对于 SCSI(和 USB)驱动器,或许还有设备驱动程序所呈现的其他驱动器类型该设备作为类似 SCSI 的单元。 ATA/SATA(以及历史上的 ATAPI)驱动器将为/dev/adaN
,其中N
>= 0。
请注意,这/dev/da0
是一个完整驱动器设备,而不是分区设备。单元 0 的细分将/dev/da0sX
用于 MBR 切片 (X>=1),或/dev/da0pX
(X>=1) 用于 GPT 分区。
DA 是直接访问设备或随机访问的助记符,因为设备的任何块都是同等可寻址的。相反,FreeBSD 使用顺序访问设备(例如磁带驱动器sa
)形式的设备驱动程序节点/dev/saN
。
答案4
简短的答案是不。内核和用户空间之间的接口承诺不包括设备数字。它可以是任何数值,甚至在您重新启动到较新的内核时可能会有所不同。因此,您永远不应该依赖它们。