我尝试使用“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
答案1
hdparm -I /dev/sdX
此命令执行“识别设备”,这是一项特定的 ATA 协议,用于从设备固件请求识别信息。例如,对于物理驱动器,您可以在计算机的主机总线适配器和驱动器本身之间连接总线分析器,然后查看识别请求如何遍历 SATA 接口以及驱动器的响应数据。
对于虚拟机,libata 正在与被模拟为虚拟设备的硬盘固件(通过虚拟 HBA)通信。hdparm 返回的识别设备信息取决于虚拟设备如何实现对该 ATA 命令的响应。hdparm 命令不知道它正在与虚拟设备通信。它只知道如何通过 libata 执行命令以及如何解析返回的数据结构。
在这种情况下,看看是否有办法将虚拟设备的“垃圾”字段设置为您选择的任何值可能更有意义。
如果你正在使用 VirtualBox,请参见: https://www.virtualbox.org/manual/ch09.html#changevpd
或者,如果您只想从输出中删除二进制字符,则可以通过 tr 管道传输它:
sudo hdparm -I /dev/sda | tr-cd'\11\12\15\40-\176'