smartd 需要数据库吗?
或者
smartctl需要数据库吗?
我看到智能工具github不断更新数据库:
https://github.com/smartmontools/smartmontools/labels/drivedb
根据我的理解,smartd 会扫描所有磁盘,那么为什么它需要数据库呢? smartd/smartctl 中使用数据库的功能/目的是什么?
答案1
这smartmontools
可以看到驱动这里。其目的是为默认设置(本身在数据库中定义)不够的驱动器提供额外的命令行标志,和/或提供有关驱动器的smartctl
警告。smartd
许多驱动器都有特定的计数器,或者需要以特定方式解释的计数器;参见例如第一个非默认条目在数据库中。
某些驱动器存在重要的错误功能,应告知用户;参见例如m4 SSD 及其计数器错误。
USB 驱动器需要指定访问方法,请参阅从这里开始的条目。
数据库不是需要的,因为它定义的所有设置都可以使用命令行参数指定;有了它,每个用户就不必自己确定这些命令行参数。
答案2
与 lspci 和 lsusb 一样,这些工具接收的是短数字(通常是十六进制数字),然后将其映射到字符串。监视器 EDID 还发送一个非常短的二进制块,其中包含许多此类短数字,然后使用某种匹配表将其转换为字符串。
https://pci-ids.ucw.cz/v2.2/pci.ids- 这是 lspci 使用的物理匹配列表,以及将供应商 4 十六进制数字 id 和产品 4 十六进制数字 id 转换为字符串值的其他工具。当某个项目不在该匹配表中时,它将仅显示产品和供应商 ID。
Smartctl 明显更复杂,但大量字段需要此类匹配表来创建字符串值,以及其他类型的值和范围,否则它们只是工具读取的随机字符和数字。
我不知道驱动器可以发送到 smartctl 的块有多大,但我知道映射的块比其他 nix 磁盘工具通常访问的块要多,这几乎肯定至少部分是由于那些匹配的表、一些二进制值映射到特定的字符串值。
硬件实际告诉系统的信息与这些工具以人类可读的字符串形式向最终用户报告的信息有很大不同。我至少制作了其中一个工具,我不记得以非常聪明的方式使用了多少二进制位来高度压缩这些唯一标识符,有时还压缩字符串值,但这就是为什么您需要匹配表,完成设备发送的原始二进制或十六进制数据。
无论如何,粗略地说。我不知道 smartctl 到底是如何做到这一点的,但是每当你看到这些工具之一使用匹配的表(又名数据库)时,这就是原因。
例如,驱动器不太可能发送字符串:Samsung Electronics Corporation,但很可能发送:CE00h 作为十六进制 4 字符 ID,然后将其映射到 Samsung 的字符串 ID。当然,smartctl 的功能远不止这些,但这只是粗略的想法。驱动器通过智能发送的其他值本身并没有任何意义,必须映射到特定的供应商,有时是特定的产品,然后才能知道它们所指的内容,例如写入的单位,其中单位不是常数,并且取决于供应商和驱动器。
CPU 也会发出一个小块,其中包含单个十六进制扩展系列、扩展型号、系列、型号和步进 ID,然后必须将其映射回 cpu 供应商和其他已知信息以确定它是什么。
值得注意的是,如果匹配表错误或不完整,smartctl 将显示特定字段的不正确值,可能会使用错误的单位,例如,我见过很多次,有时这些东西仅在 NDA 下发布,或者完全不是,所以 smartctl 必须尝试找出正确的匹配值,但并不总是成功。也就是说,该工具显示的不是纯粹的原始数据,而是经过解释和处理的数据。