Что представляют собой все эти устройства 'sd' в / proc / devices

Рассматриваемый fork является частью механизма, запускающего strace; он завершился к моменту начала трассировки.

3
06.08.2017, 02:24
2 ответа

Первый диск /dev/sdaявляется8:0(основным :второстепенным ), но старший номер 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

Что ж, у вас, вероятно, не так много дисков, и система генерирует только те узлы, которые необходимы для устройств, которые у вас есть на самом деле, так что вы не видите ничего, кроме sdaи его разделов в /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указывает, какой именно.

6
27.01.2020, 21:12

Просто может быть до 16 *1048576 sdблочных устройств (, которых было бы всего 16 *256, когда dev _t был 16-битным ).

Код имеет:

    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 */
    }
}

Который показывает, как распределяются основные и второстепенные.

1
27.01.2020, 21:12

Теги

Похожие вопросы