[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_PROD
sysfs를 고려하여 인기 있는 곳을 찾았습니다.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