為什麼 smartd 需要數據庫?
smartd需要數據庫嗎?
或者
smartctl 需要數據庫嗎?
我看到智能工具github不斷更新數據庫:
https://github.com/smartmontools/smartmontools/labels/drivedb
據我了解,smartd 會掃描所有磁碟,那它為什麼需要數據庫呢?在 smartd/smartctl 中使用數據庫的功能/目的是什麼?
smartmontools
驅動器數據庫可以在這裡看到。其目的是為預設設置(它們本身在數據庫中定義)不足的驅動器提供額外的命令行標誌,smartctl
和/或提供有關驅動器的警告。smartd
許多驅動器都有特定的計數器,或者需要以特定方式解釋的計數器;例如,參見數據庫中的第一個非預設條目。
一些驅動器具有重要的錯誤功能,應告知使用者;例如,查看帶有計數器錯誤的 m4 SSD。
USB 驅動器需要指定訪問方法,請參閱此處開始的條目。
不需要數據庫,因為它定義的所有設置都可以使用命令行參數指定;擁有它可以使每個使用者不必自己確定那些命令行參數。
與 lspci 和 lsusb 一樣,這些工具接收的是短數字,通常是十六進制數字,然後映射到字元串。Monitor 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,然後映射到三星的字元串 ID。當然,smartctl 的功能遠不止這些,但這是粗略的想法。驅動器通過 smart 發送的其他值並不意味著任何單獨的東西,並且必須映射到特定的供應商,有時是特定的產品,然後才能知道它們指的是什麼,比如寫入的單位,其中單位不是常數,以及取決於供應商和驅動器。
CPU 還發送一個小塊,其中包含一個十六進制擴展系列、擴展型號、系列、型號和步進 ID,然後必須將其映射回 cpu 供應商和其他已知事物以確定它是什麼。
值得注意的是,如果匹配表錯誤或不完整,smartctl 將顯示特定欄位的錯誤值,例如可能使用了錯誤的單位,我見過很多次,有時這些東西只在 NDA 下發布,或者一點也不,所以 smartctl 必須嘗試找出正確的匹配值是什麼,它並不總是成功。也就是說,這不是工具顯示的純原始數據,而是經過解釋和處理的數據。