/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

글쎄, 아마도 그렇게 많은 디스크가 없을 것이고 시스템은 실제로 가지고 있는 장치에 필요한 노드만 생성하므로 sda.txt 및 해당 파티션 외에는 아무것도 표시되지 않습니다 /dev.


친구 의 경우 vcsaVirtual Console과 관련된 작업은 다음과 같습니다.

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

전공과 부전공이 어떻게 배정되는지 보여줍니다.

관련 정보