hdparm的序列号是垃圾

我正在尝试使用“hdparm -I / dev / sda”从驱动器读取型号和序列号,而在某些系统(例如:VMware虚拟机)上发现,序列号和型号通常会返回垃圾(请参见下文)。 而当我重复命令时,垃圾似乎随时间而改变。 有没有办法告诉hdparm不输出这个垃圾? (即如果无法读取数据,则不显示任何内容)

/dev/sda: SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ATA device, with non-removable media        @     @     @:      Serial Number:     @     @     Firmware Revision:   O   Standards: Likely used: 2 Configuration: CHS addressing not supported LBA user addressable sectors: 116676416 Logical/Physical Sector size: 512 bytes device size with M = 1024*1024: 56970 MBytes device size with M = 1000*1000: 59738 MBytes (59 GB) cache/buffer size = unknown 

hdparm -I / dev / sdX

这个命令执行一个“识别设备”,这是一个特定的ATA协议,从设备的固件中请求识别信息。 在物理驱动器的情况下,例如,您可以在计算机的主机总线适配器和驱动器之间连接一个总线分析器,并查看识别请求是否穿越SATA接口以及驱动器的响应数据。

在虚拟机的情况下,libata正在与被模拟为虚拟设备的硬盘固件(通过虚拟HBA)通信。 识别从hdparm返回的设备信息取决于虚拟设备如何实现对该ATA命令的响应。 hdparm命令不知道它正在与虚拟设备通话。 它只知道如何通过libata执行命令,以及如何parsing返回的数据结构。

在这种情况下,查看是否有办法将虚拟设备的“垃圾”字段设置为您select的任何值,这或许更有意义。

如果您使用VirtualBox,请参阅: https : //www.virtualbox.org/manual/ch09.html#changevpd

或者,如果您只想从输出中删除二进制字符,则可以通过tr来pipe理它:

sudo hdparm -I / dev / sda | tr -cd'\ 11 \ 12 \ 15 \ 40- \ 176'