
[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
1時間の発掘の終わりにこれを見つけました。
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