pseudo-fs에서 블록 장치 모델 이름 및 제조업체 가져오기

pseudo-fs에서 블록 장치 모델 이름 및 제조업체 가져오기
[gala@arch ~]$ sudo !!
sudo hdparm -i /dev/sda

/dev/sda:

 Model=KINGSTON SHFS37A120G, FwRev=603ABBF0, SerialNo=50026B725B0A1515
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=unknown, MaxMultSect=1, MultSect=1
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

hdparm은 이 필드를 어디에서 읽습니까 Model? 어딘가에서 sysfs? 그거 어디서 났어?

답변1

# strace hdparm -i /dev/sda
ioctl(3, HDIO_GET_IDENTITY, 0x7fffa930c320) = 0
brk(0)                                  = 0x1c42000
brk(0x1c63000)                          = 0x1c63000
write(1, "\n", 1
)                       = 1
write(1, " Model=…

그래서 hdparm부터HDIO_GET_IDENTITY I/W 제어, sysfs가 아닙니다. 물론 이것이 sysfs에서 정보에 접근할 수 없다는 의미는 아닙니다.

HDIO_GET_IDENTITY다음으로 커널 소스 코드를 검색할 수 있습니다.LX이것에 매우 편리합니다. 관련 클릭 표시에게 전화 해ata_get_identity. 이 기능모델 찾기장치 설명의 오프셋에서 ATA_ID_PROD.

다른 곳에서 사용법을 살펴보면 ATA_ID_PRODsysfs를 고려하여 인기 있는 곳을 찾았습니다.ide-sysfs.c, 라는 함수에서 model_show. 함수는 다음 매크로 호출에 의해 참조됩니다.DEVICE_ATTR_RO(model), 따라서 ata 드라이버가 IDE 인터페이스를 노출하는 경우 model이 정보가 포함된 파일이 장치의 sysfs 디렉터리에서 호출됩니다.

ata 드라이버가 SCSI 인터페이스를 노출하는 경우 코드는 하드웨어에서 정보를 추출하기 위해 다양한 방법을 사용하므로 커널 소스 코드를 추적하는 것이 훨씬 더 복잡합니다. 하지만 아직 남아있는 것으로 밝혀졌습니다.들판model장치의 sysfs 디렉터리에 있습니다.

장치의 sysfs 디렉토리가 어디에 있는지에 대해서는 여러 가지 방법으로 액세스할 수 있습니다. 이것sysfs.txt커널 문서의 파일이것을 문서화하는 것은 그리 좋지 않습니다. 액세스하는 가장 쉬운 방법은 /sys/block각 블록 장치에 대한 항목을 이용하는 것입니다.

$ cat /sys/block/sda/device/model

에는 많은 심볼릭 링크가 있습니다 /sys. 이 디렉터리의 "물리적" 위치는 디스크가 시스템에 연결된 방식에 따라 달라집니다. 예를 들어 /sys/devices/pci…/…/ata…/host…/target…/…PCI 버스에 연결된 SCSI 인터페이스가 있는 ATA 장치의 형태를 취합니다.

답변2

한 시간 동안의 발굴 끝에 이것을 발견했습니다.

gala@arch /sys/bus/scsi/devices/2:0:0:0 % pwd
/sys/bus/scsi/devices/2:0:0:0
gala@arch /sys/bus/scsi/devices/2:0:0:0 % cat model
KINGSTON SHFS37A

따라서 모델의 경우:

/sys/bus/scsi/devices/<device>/model

공급업체:

/sys/bus/scsi/devices/<device>/vendor

관련 정보