首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从伪fs获取块设备模型名称和制造商。

从伪fs获取块设备模型名称和制造商。
EN

Unix & Linux用户
提问于 2016-05-08 19:32:00
回答 2查看 1.9K关注 0票数 4
代码语言:javascript
复制
[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的地方?从哪来的?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2016-05-08 21:54:49

代码语言:javascript
复制
# 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=…

所以hdparmHDIO_GET_IDENTITY 伊奥克特获取信息,而不是从sysfs获取信息。当然,这并不意味着不能从sysfs访问信息。

接下来,我们可以在内核源代码中查找HDIO_GET_IDENTITYLXR在这方面很方便。相关的点击显示了一个打给ata_get_identity。此函数查找模型在设备描述中的偏移量ATA_ID_PROD在设备描述中。

看看其他使用ATA_ID_PROD的地方,并且考虑到sysfs,我们在ide-sysfs.c中找到了一个热门,在一个叫做model_show的函数中。这个函数是由DEVICE_ATTR_RO(model)下面的宏调用引用的,所以如果ata驱动程序公开了IDE接口,那么在设备的sysfs目录中有一个名为model的文件,其中包含了这些信息。

如果ata驱动程序公开了SCSI接口,那么跟踪内核源要复杂得多,因为代码使用不同的方式从硬件中提取信息。但是事实证明,设备的sysfs目录中也有一个model字段

至于设备的sysfs目录在哪里,有几种方法可以访问它。sysfs.txt在内核文档中的记录了这一点,但不是很好。访问它的最简单方法是通过/sys/block,它包含每个块设备的一个条目:

代码语言:javascript
复制
$ cat /sys/block/sda/device/model

/sys中有很多符号链接。该目录的“物理”位置取决于磁盘如何连接到系统;例如,它有一个带有连接到PCI总线的SCSI接口的ATA设备的表单/sys/devices/pci…/…/ata…/host…/target…/…

票数 8
EN

Unix & Linux用户

发布于 2016-05-08 21:01:01

经过一小时的挖掘后发现的:

代码语言:javascript
复制
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

因此,对于模型:

代码语言:javascript
复制
/sys/bus/scsi/devices/<device>/model

和供应商:

代码语言:javascript
复制
/sys/bus/scsi/devices/<device>/vendor
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/281880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档