O que são todos os dispositivos 'sd' em / proc / devices?

2

O arquivo /proc/devices lista os dispositivos pelo número e nome da revisão principal. No meu sistema mostra (parcialmente):

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

O que são todos esses dispositivos 'sd'? O primeiro (rev. Nº 8) provavelmente é /dev/sda , mas o restante deles não aparece em /dev - não há dispositivos com esses números de revisão maiores.

Eu faço ver uma lista de dispositivos:

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

em que o número menor pode ser uma correspondência - seria / proc mostrar números de revisão menores e por que eles são chamados de sd . De qualquer forma, não vejo nenhum dispositivo com nenhum. 135 .

Alguém poderia me explicar isso?

    
por afuna 04.08.2017 / 15:04

2 respostas

4

O primeiro disco /dev/sda é 8:0 (maior: menor), mas o maior número 8 contém os próximos 15 discos também ( Documentation/devices.txt no código-fonte do kernel):

  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.

O resto é para o resto de seus discos (números maiores 66-71 e 128-134 são similares, e o esquema de particionamento é o mesmo para todos eles):

 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

Bem, você provavelmente não tem muitos discos, e o sistema só gera os nós necessários para os dispositivos que você realmente tem, então você não vê nada além de sda e suas partições em /dev .

Quanto a vcsa e amigos, eles estão relacionados aos consoles virtuais:

  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
                    ...

Observe também que /dev/vcs* são dispositivos de caractere, não dispositivos de bloco. A primeira letra na saída ls informa qual é.

    
por 04.08.2017 / 15:26
1

É só que pode haver até 16 * 1048576 sd de dispositivos de bloco (o que teria sido ony 16 * 256 quando dev_t era de 16bits).

O código tem:

    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);
    }

Para registrar esses 16 números principais.

E:

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

Onde:

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

Que mostra como os maiores e menores são alocados.

    
por 04.08.2017 / 15:32