基於S.M.A.R.T.的磁盤健康監控

基於S.M.A.R.T.的磁盤健康監控

PlatformDev 360雲計算linux

女主宣言

磁盤是數據的重要載體之一,若是磁盤失效,則可能下降線上業務承載的容量,致使線上業務不穩定甚至出現宕機。要保證線上服務的穩定和高效,除了作好集羣,異地容災等措施外,磁盤健康狀態的監控和預測也是重要的一個環節。本文主要介紹怎樣對磁盤健康情況進行監控和預警。
PS:豐富的一線技術、多元化的表現形式,盡在「HULK一線技術雜談」,點關注哦!正則表達式

背景介紹

磁盤是數據的重要載體之一,若是磁盤失效,則可能下降線上業務承載的容量,致使線上業務不穩定甚至出現宕機。要保證線上服務的穩定和高效,除了作好集羣,異地容災等措施外,磁盤健康狀態的監控和預測也是重要的一個環節。 數據庫

S.M.A.R.T.,全稱爲「Self-Monitoring Analysis and Reporting Technology」,即「自我監測、分析及報告技術」,是一種自動的硬盤狀態檢測與預警系統和規範。經過在硬盤硬件內的檢測指令對硬盤的硬件如磁頭、盤片、馬達、電路的運行狀況進行監控、記錄並與廠商所設定的預設安全值進行比較,若監控狀況將或已超出預設安全值的安全範圍,就能夠經過主機的監控硬件或軟件自動向用戶做出警告並進行輕微的自動修復,以提早保障硬盤數據的安全。除一些出廠時間極早的硬盤外,如今大部分硬盤均配備該項技術。 安全

能夠經過對S.M.A.R.T.信息的抓取監控和分析,監測磁盤健康狀態,估測磁盤故障時間,隨時對即將故障的磁盤採起相應替換措施,保證線上服務的穩定運行。服務器

smartctl

smartctl是linux下查看磁盤S.M.A.R.T.信息的工具。它實際上是smartmontools的一部分,默認並不會安裝,對於CentOS,能夠執行yum install smartmontools進行安裝。 app

安裝後,就能夠經過smartctl查看磁盤的各類信息了,值得一提的是,smartmontools也支持查看鏈接在主流RAID方案下的磁盤信息,新版本(6.5及以上版本)也實驗性地支持NVMe和一些其餘PCI-E磁盤的S.M.A.R.T.信息查看。 運維

smartmontools還包括smartd,它能夠通過配置,自動、間隔時間執行smart信息的監控和收集,而且能夠在執行後或發現異常等狀況下,以郵件形式發送通知。 ide

其實還能夠經過 smartctl -t等對磁盤進行檢測。但業務上線後,應該避免對磁盤進行長時間的檢測。工具

1

發現磁盤

通常能夠經過fdisk -l 來列出機器上的磁盤,然而服務器上通常不多有磁盤不經過RAID卡直接鏈接到控制器上,經過fdisk -l看到的諸如/dev/sdX的磁盤,直接經過smartctl -a /dev/sdX 並不能查看到磁盤的S.M.A.R.T.信息,而通常只有幾行冷冰冰的文字 測試

告訴你改磁盤不支持S.M.A.R.T.不過值得慶幸的是smartctl也支持對raid卡下磁盤S.M.A.R.T.信息的讀取。並且幾乎市面上主流的RAID卡也都涵蓋了。經過smartctl -h 能夠看到:

-d TYPE, --device=TYPE
Specify device type to one of: ata, scsi, sat[,auto][,N][+TYPE], usbcypress[,X], usbjmicron[,p][,x][,N], usbsunplus, marvell, areca,N/E, 3ware,N, hpt,L/M/N, megaraid,N, cciss,N, auto, test

例如對接在DELL PERC H710(實際上解決方案是LSI MegaRAID)上的磁盤,能夠經過以下方式獲取到S.M.A.R.T.信息:

smartctl -? /dev/sda -d sat+megaraid,0

其中 ? 能夠替換成smartctl 支持的參數選項,而megaraid後面對應的磁盤ID 0,能夠經過megacli工具經過-PDList -aALL獲取到。

在實際系統運維中,能夠經過腳本處理megacli的輸出,再經過smartcli監控磁盤的狀態。

而對於NVMe磁盤,smartcli已經支持S.M.A.R.T.信息的讀取和分析,但有些品牌的磁盤,可能還要依賴廠商的工具來進行讀取和分析。

2

smartctl參數

-h                      顯示幫助
-i                      顯示磁盤的基礎信息
-a                      顯示磁盤的全部S.M.A.R.T.信息
-x                      顯示磁盤的全部信息,這個內容是至關的全
-d                      設置磁盤設備的類型(ata設備,仍是某些raid卡型號)
-s                      設置開啓/關閉S.M.A.R.T.

其餘諸如容錯級別,測試等等功能,對於通常監控來講用不到,同時smartctl -h後列出的幫助信息能夠說是很是良心,基本已經涵蓋了基礎使用的樣例。

對於通常監控,比較常見的策略是執行smartctl -a /dev/sdX並通收集數據,落盤,分析各指標是否有異常,是否已經接近臨界值,從而針對性的發送警報或彙總。

3

S.M.A.R.T.指標

以一塊Intel 520爲例,執行smartctl -a,得到相似以下的輸出:
基於S.M.A.R.T.的磁盤健康監控
smartctl在執行以後會有一個整體的斷定 PASSED 或者 FAILED,即有沒有經過S.M.A.R.T.檢測。即:

SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.

同時,也會告知你,這個PASSED 仍是 FAILED,是根據S.M.A.R.T.特定屬性的斷定得出的。

言外之意具體怎麼樣,您還須要再過目。
但通常來講,若是這個都FAILED了,這快盤八成是快要掛了。因此一旦出現FAILED,是很嚴重的問題,儘量的備份數據,換盤。

對於不一樣廠商的不一樣磁盤,S.M.A.R.T.具體信息可能都不相同,甚至有些指標的編號都不相同。但大多數通用指標,你們是相同的。

Compaq於1995早期將S.M.A.R.T.的前身技術方案提交到SFF委員會進行標準化,後續獲得各大硬盤廠商的支持,你們約定了一份全部製造商都必須遵照共同的規則

同時,各製造商也會根據本身須要添加一些本身專有的檢測屬性。

例以下面的典型屬性:
基於S.M.A.R.T.的磁盤健康監控
更多指標能夠在這裏找到: https://zh.wikipedia.org/wiki/S.M.A.R.T.

4

SMART的值:

  • VALUE: 當前值
    這是表格中最重要的信息之一,表明給定屬性的標準化值,在1到253之間。253一般意味着最好狀況,1意味着最壞狀況。
    取決於屬性和製造商,初始化VALUE能夠被設置成100或200,但有些諸如溫度等狀態指標除外。

  • HRESH: 臨界值
    臨界值是硬盤廠商指定的表示某一項目可靠性的門限值,也稱閾值,它經過特定公式計算而得。
    若是某個參數的當前值接近了臨界值,就意味着硬盤將變得不可靠,可能致使數據丟失或者硬盤故障。

  • WORST: 最差值
    最差值是硬盤運行時各ID項當前值曾出現過的最壞值。
    最差值是對硬盤運行中某項數據變劣的峯值統計,該數值也會不斷刷新。一般,
    最差值與當前值是相等的,若是最差值出現較大的波動(小於當前值),代表硬盤曾出現錯誤或曾經歷過惡劣的工做環境(如溫度)

  • RAW_VALUE: 數據值
    數據值是硬盤運行時各項參數的實測值,大部分SMART工具以十進制顯示數據。
  • 數據值表明的意義隨參數而定,大體能夠分爲三類:
  • 數據值並不直接反映硬盤狀態,必須通過硬盤內置的計算公式換算成當前值才能得出結果
  • 數據值是直接累計的,如Start/Stop Count(啓動/中止計數)
  • 有些參數的數據是即時數,如Temperature(溫度)
  • 硬盤的每項SMART信息中都有一個臨界值(閾值),不一樣硬盤的臨界值是不一樣的,SMART針對各項的當前值、最差值和臨界值的比較結果以及數據值進行分析後,提供硬盤當前的評估狀態,也是咱們直觀判斷硬盤健康狀態的重要信息。

根據SMART的規定,狀態通常有正常、警告、故障或錯誤三種狀態。

SMART斷定這三個狀態與SMART的 Pre-failure/advisory BIT(預測錯誤/發現位)參數的賦值密切相關:

  • 當Pre-failure/advisory BIT=0,而且當前值、最差值遠大於臨界值的狀況下,爲正常標誌
  • 當Pre-failure/advisory BIT=0,而且當前值、最差值大於但接近臨界值時,爲警告標誌
  • 當Pre-failure/advisory BIT=1,而且當前值、最差值小於臨界值時,爲故障或錯誤標誌
    於是日常監控項目中的 pre-fail值就是重點關注對象。

對於Old_age類型,通常來講,是一些統計情況值,並不能直接反映磁盤是否或即將出現失效。

但有些數據項,也能夠間接的反映出磁盤是否臨近失效,例如249 NAND Writes GB,雖然磁盤出現了重映射,但NAND Writes GB還富裕好多的時候,能夠考慮忽略重映射,

亦或NAND Writes GB已經接近NAND白皮書提供的壽命,但磁盤依舊堅挺,這時候也應該考慮更換磁盤了。

信息收集和監控報警

1

磁盤信息數據庫

每一個廠家的 S.M.A.R.T.信息都不盡相同,尤爲是在SSD成爲標配的今天,S.M.A.R.T.更成爲監控磁盤剩餘壽命的最重要的指標。

因爲磁盤的多樣性,磁盤S.M.A.R.T.信息也不盡相同,相似的指標,在不一樣型號的磁盤上可能對應到不一樣的ID,這就致使收集S.M.A.R.T.信息須要對磁盤品牌,型號,甚至固件版本進行適配。

但絕大多數時候不會容許咱們直接登陸線上機器收集S.M.A.R.T.信息,但咱們的腳本又要精確的對各個屬性進行匹配。好消息是smartctl 提供了一個S.M.A.R.T.信息的數據庫。

裏面包含了各類磁盤型號,固件的 S.M.A.R.T. ID對應的指標含義。而且用戶能夠看到,閱讀,甚至編輯。

smartctl 也容許用戶在執行的時候手工指定這個數據庫文件。只要是符合smartctl可以讀取的數據庫格式便可。

能夠經過 smartctl -h 看到系統默認的數據庫文件位置。

例如:
/var/lib/smartmontools/drivedb/drivedb.h

drivedb.h 以以下結構保存相應的信息:

struct drive_settings {
 const char * modelfamily;
 const char * modelregexp;
 const char * firmwareregexp;
 const char * warningmsg;
 const char * presets;};

ModelFamily: 磁盤型號族,例如上面的 Intel 520,若是設置爲$開頭,忽略。
ModelRegexp: 匹配型號的正則表達式,不能爲空。
FirmwareRegexp: 固件匹配正則表達式,能夠爲空,爲空時不進行固件匹配。不然進行固件匹配以縮小適配的磁盤集合。
WarningMsg: 警告信息,當用戶的磁盤恰好在匹配的結果內,顯示此信息。
presets: S.M.A.R.T. 含義定義,以-v開頭。

截取其中的一段:

{ "Intel 520 Series SSDs", // tested with INTEL SSDSC2CW120A3/400i, SSDSC2BW480A3F/400i
 "INTEL SSDSC2[BC]W(060|120|180|240|480)A3F?",
 "", "",
//"-v 5,raw16(raw16),Reallocated_Sector_Ct "
 "-v 9,msec24hour32,Power_On_Hours_and_Msec "
//"-v 12,raw48,Power_Cycle_Count "
 "-v 170,raw48,Available_Reservd_Space "
 "-v 171,raw48,Program_Fail_Count "
 "-v 172,raw48,Erase_Fail_Count "
 "-v 174,raw48,Unexpect_Power_Loss_Ct "
//"-v 184,raw48,End-to-End_Error "
 "-v 187,raw48,Uncorrectable_Error_Cnt "
//"-v 192,raw48,Power-Off_Retract_Count "
 "-v 225,raw48,Host_Writes_32MiB "
 "-v 226,raw48,Workld_Media_Wear_Indic "
 "-v 227,raw48,Workld_Host_Reads_Perc "
 "-v 228,raw48,Workload_Minutes "
//"-v 232,raw48,Available_Reservd_Space "
//"-v 233,raw48,Media_Wearout_Indicator "
 "-v 241,raw48,Host_Writes_32MiB "
 "-v 242,raw48,Host_Reads_32MiB "
 "-v 249,raw48,NAND_Writes_1GiB"},

除了通用值以外,Intel 520系列的特殊值都已經在這裏了。若是用戶在執行smartctl的時候手工再指定 -v 參數,對應的數據會覆蓋drivedb.h中的含義設定。
這些信息還能夠在實際執行smartctl收集到數據以前,就可以編寫相應的收集腳本。

2

自動化收集,分析和預測

能夠經過smartd進行自動的數據收集,檢測到數據異常後給相關運維人員發送郵件提醒。但smartd可定製性不高,於是線上並無採用smartd。

依託命令執行系統qcmd,能夠在全量機器上分時,分批,執行單個命令或多個腳本,並將執行結果統一進行收集,分析。相對計劃的數據採集,這種方式更爲靈活。而且能夠在腳本進行流程控制,數據處理等。

總體流程並不複雜:

  • 目標腳本包含對磁盤設備的枚舉,根據特徵斷定機器是不是 RAID,NVMe,對應執行megacli或其餘廠商工具,並根據返回結果最終獲取全部磁盤的S.M.A.R.T.信息。入庫,落盤,進行後續的數據處理。
  • 對於普通磁盤,在出現重映射/重映射增長/Pending sectors/WARNING/FAILED等異常狀態時對應發送app、郵件、短信、等各類等級的報警信息。
  • 對於SSD,收集磁盤磨損信息,並在達到特定級別的時候發送通知或報警。
  • 根據磁盤類型,工做時常,寫入量,是否有重映射等指標,得出磁盤是否已經失效或臨近失效。當已經即將/已經失效,發送郵件到OPS,並確認報修,儘量避免能夠預見的故障。
    基於S.M.A.R.T.的磁盤健康監控

    總結

    存儲做爲最重要的硬件設施之一,直接關係到業務的質量,經過SMART技術,能夠有效的避免非突發的磁盤故障。減小運維壓力, 在大規模的部署條件下,還能夠收集磁盤故障率、壽命等相關信息,優化採購流程。 同時,收集到的SMART信息,還能夠結合線上服務壓力,質量,來評估磁盤是否可靠,爲預估和下降成本提供第一手數據,積累運維經驗。 服務質量保障不只僅是高可用和故障及時切換,隨着技術的創新,消滅能夠預見的故障已經成爲可能。

相關文章
相關標籤/搜索