/proc/devices 中的所有“sd”设备是什么

/proc/devices 中的所有“sd”设备是什么

/proc/devices文件按主要修订号和名称列出设备。在我的系统上它显示(部分):

Block devices:
259 blkext
  7 loop
  8 sd
  9 md
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp

这些“sd”设备是什么?第一个(版本号 8)可能是,/dev/sda但其余的没有出现/dev- 没有具有这些主要版本号的设备。

查看设备列表:

crw-rw---- 1 root tty       7, 128 Jul 29 14:15 vcsa
crw-rw---- 1 root tty       7, 129 Jul 29 14:15 vcsa1
crw-rw---- 1 root tty       7, 130 Jul 29 14:15 vcsa2
crw-rw---- 1 root tty       7, 131 Jul 29 14:15 vcsa3
crw-rw---- 1 root tty       7, 132 Jul 29 14:15 vcsa4
crw-rw---- 1 root tty       7, 133 Jul 29 14:15 vcsa5
crw-rw---- 1 root tty       7, 134 Jul 29 14:15 vcsa6

哪里的次要的数字可能匹配 - /proc 会显示次要的修订号,以及为什么称为sd.不管怎样,我没有看到任何设备没有。135

有人可以向我解释一下吗?

答案1

第一个磁盘/dev/sda8:0(major:minor),但主编号 8 也包含接下来的 15 个磁盘 (Documentation/devices.txt在内核源代码中):

  8 block       SCSI disk devices (0-15)
                  0 = /dev/sda          First SCSI disk whole disk
                 16 = /dev/sdb          Second SCSI disk whole disk
                 32 = /dev/sdc          Third SCSI disk whole disk
                    ...
                240 = /dev/sdp          Sixteenth SCSI disk whole disk

                Partitions are handled in the same way as for IDE
                disks (see major number 3) except that the limit on
                partitions is 15.

其余的用于您的其余驱动器(主编号 66-71 和 128-134 相似,并且所有分区方案都相同):

 65 block       SCSI disk devices (16-31)
                  0 = /dev/sdq          17th SCSI disk whole disk
                 16 = /dev/sdr          18th SCSI disk whole disk
                    ...


135 block       SCSI disk devices (240-255)
                  0 = /dev/sdig         241st SCSI disk whole disk
                    ...
                240 = /dev/sdiv         256th SCSI disk whole disk

好吧,您可能没有那么多磁盘,并且系统仅生成您实际拥有的设备所需的节点,因此除了 .txtsda及其分区之外,您看不到任何内容/dev


至于vcsa朋友们,他们与虚拟控制台有关:

  7 char        Virtual console capture devices
                  0 = /dev/vcs          Current vc text contents
                  1 = /dev/vcs1         tty1 text contents
                    ...
                128 = /dev/vcsa         Current vc text/attribute contents
                129 = /dev/vcsa1        tty1 text/attribute contents
                    ...

另请注意,这/dev/vcs*是字符设备,而不是块设备。输出中的第一个字母ls表明它是哪个。

答案2

只是块sd设备最多可以有 16 * 1048576 个(当 dev_t 为 16 位时,块设备只有 16 * 256 个)。

代码有:

    for (i = 0; i < SD_MAJORS; i++) {
            if (register_blkdev(sd_major(i), "sd") != 0)
                    continue;
            majors++;
            blk_register_region(sd_major(i), SD_MINORS, NULL,
                                sd_default_probe, NULL, NULL);
    }

注册这 16 个主要号码。

和:

/*
 * More than enough for everybody ;)  The huge number of majors
 * is a leftover from 16bit dev_t days, we don't really need that
 * much numberspace.
 */
#define SD_MAJORS       16

在哪里:

/*
 * Device no to disk mapping:
 *
 *       major         disc2     disc  p1
 *   |............|.............|....|....| <- dev_t
 *    31        20 19          8 7  4 3  0
 *
 * Inside a major, we have 16k disks, however mapped non-
 * contiguously. The first 16 disks are for major0, the next
 * ones with major1, ... Disk 256 is for major0 again, disk 272
 * for major1, ...
 * As we stay compatible with our numbering scheme, we can reuse
 * the well-know SCSI majors 8, 65--71, 136--143.
 */
static int sd_major(int major_idx)
{
    switch (major_idx) {
    case 0:
        return SCSI_DISK0_MAJOR;
    case 1 ... 7:
        return SCSI_DISK1_MAJOR + major_idx - 1;
    case 8 ... 15:
        return SCSI_DISK8_MAJOR + major_idx - 8;
    default:
        BUG();
        return 0;       /* shut up gcc */
    }
}

其中显示了专业和辅修专业是如何分配的。

相关内容