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