Buďte S.M.A.R.T. a hlídejte si disky

28. 6. 2013
Doba čtení: 6 minut

Sdílet

Každý zkušený admin vám řekne, že data jsou důležitější než železo samotné. Stejný člověk vám pak také řekne, že dobrá záloha je základ spokojeného života. Je dobré také sledovat zdraví svého počítače a zejména pak jeho disku. Naštěstí k tomu existují výborné nástroje využívající technologii S.M.A.R.T.

S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) je monitorovací systém pro pevné disky. Pokud disk technologii SMART podporuje, zaznamenává si během provozu o sobě mnoho zajímavých údajů, ke kterým dovolí uživateli přístup. Pravidelná analýza zaznamenaných hodnot může pomoci odhalit a předejít mnoha problémům ještě dřív, než se opravdu vyskytnou.

Historie technologie S.M.A.R.T. se začala psát v roce 1995, kdy Compaq s podporou IBM, Seagate a Western Digital zahájil proces její standardizace. Oficiální technická specifikace standartu SMART pochází z roku 2004, a v dnešní době je nezbytnou součástí každého pevného disku.

Kromě logování SMART nabízí i možnost aktivního testování disku, takzvaný self-test. Kontrolu samotnou provádí opět firmware na zařízení, a to i za plného provozu bez znatelné ztráty výkonu. 

Je důležité zmínit, že výše uvedené funkce jsou součástí firmware disku jako takového a nejsou nijak závislé na operačním systému. Záznamy z logu i z předchozích testování zůstávají k dispozici i po naformátování či přemístění disku do jiného počítače, což ocení především uživatelé dedikovaných serverů – můžou si jednoduše zkontrolovat, jak zdravé disky do svého nového serveru dostali.

S.M.A.R.T. atributy

Výrobci pevných disků definují soubor sledovaných parametrů a k nim prahových hodnot, jež by při normálním provozu neměly být nikdy překročeny. Každý atribut má surovou (raw) hodnotu, která obvykle odpovídá fyzikální jednotce, například stupně celsia nebo vteřiny, a pak normalizovanou hodnotu v rozsahu od 1 do 253 (kde 1 znamená nejhorší a 253 nejlepší).

Jak ale tahle data z disku dostat? Pomůže nám k tomu utilita smartctl, která je součástí balíku smartmontools, případné GUI programy zmiňovat nebudeme. Základní report dostaneme při spuštění následujícího příkazu:

# smartctl -a /dev/sda

Má-li kdo zájem o trochu detailnější informace, použije místo přepínače -a přepínač  -x.

Důležité je také zmínit, jak se dostat ke SMART atributům na discích za hardwarovými RAID řadiči, jako je například 3ware, protože v případě jejich použití disk /dev/sda nemusí být vůbec fyzickým diskem jako takovým, ale například dvojicí zrcadlených disků. Dotazovat se na atributy /dev/sda by tudíž nemuselo vždy dávat smysl. Z toho důvodu je pak nutno dotazované zařízení adresovat zvláštním způsobem, který je popsaný v man smartctl a je různý pro různé raid řadiče.

Jako příklad uvedeme výpis SMART dat z prvních tří disků za 3ware řadičem:

# smartctl -a -d 3ware,0 /dev/twa0
# smartctl -a -d 3ware,1 /dev/twa0
# smartctl -a -d 3ware,2 /dev/twa0

V následující tabulce uzříte zredukovaný přehled atributů na jednom starším disku. Tato tabulka je součástí výpisu ze smartctl, nemá smysl ho zde uvádět celý:

ID# ATTRIBUTE_NAME          VALUE WORST THRESH WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     100   100   016    -           0
  2 Throughput_Performance  134   134   054    -           87
  3 Spin_Up_Time            134   134   024    -           540 (Average 615)
  4 Start_Stop_Count        100   100   000    -           230
  5 Reallocated_Sector_Ct   100   100   005    -           0
  7 Seek_Error_Rate         100   100   067    -           0
  8 Seek_Time_Performance   133   133   020    -           27
  9 Power_On_Hours          099   099   000    -           10312
 10 Spin_Retry_Count        100   100   060    -           0
 12 Power_Cycle_Count       100   100   000    -           23
192 Power-Off_Retract_Count 100   100   000    -           25
193 Load_Cycle_Count        100   100   000    -           25
194 Temperature_Celsius     130   130   000    -           46 (Min/Max 25/75)
196 Reallocated_Event_Count 100   100   000    -           0
197 Current_Pending_Sector  100   100   000    -           0
198 Offline_Uncorrectable   100   100   000    -           0
199 UDMA_CRC_Error_Count    200   200   000    -           1

Výpis obsahuje hodnoty sledované diskem /dev/sda. Jiný disk od jiného výrobce může sledovat hodnoty obecně jiné, ovšem v praxi jsou ty zde uvedené více méně běžné. Ve sloupcích VALUE, WORST a TRESH jsou normalizované hodnoty sledovaného parametru, VALUE udává aktuální stav, WORST nejvyšší hodnotu zaznamenanou za celou životnost disku, a TRESH je výrobcem stanovená mez, která by neměla být překročena. Pokud je 000, tak se referenční mez neuvádí.

Zajímavé jsou také hodnoty ve sloupci RAW_VALUE. Tento konkrétní disk už byl spuštěný 10312 hodin, což je něco přes jeden rok nepřetržitého provozu. Momentálně má disk teplotu 46 stupňů Celsia, nejvyšší naměřená teplota je 75 stupňů, zřejmě se někdy v minulosti vinou nedostatečného větrání serveru dost přehříval, což mohlo vést k jeho rychlejšímu poškození. Tento konkrétní kus už je sktečně vyřazen pro špatnou funkčnost.

Na otázku, které z parametrů použít pro odhadnutí, zda je disk blízko svého konce, neexistuje univerzální odpověď. To že je disk již víc než rok v provozu ( Power_On_Hours), nebo že byl 230× zapnut a vypnut ( Start_Stop_Count), ještě nemusí nutně znamenat problém, na druhou stranu čím je disk starší a používanější, tím větší je šance, že se projeví nějaké mechanické opotřebení. Záleží tedy na hodnotách všech parametrů, které pro disk posoudíme jako celek. Příliš vysoké hodnoty Reallocated_Event_Count by mohly naznačovat konkrétnější problém, protože ty udávají počet realokací způsobených vadnými sektory, ale zde je zase nutné sledovat spíš změnu v čase než aktuální surovou hodnotu, která může vypadat relativně vysoká i u nového a nepoužitého disku. Navíc některé disky jako je tento je patrně ani nepočítají.

Kromě logování naměřených nebo napočítaných parametrů jsou na disku zaznamenávány ještě informace o chybách při čtení či zápisu. U funkčního disku bez žádných takových záznamů smartctl nic navíc nevypíše, ovšem pokud na disku někdy k nějaké chybě někdy došlo, nachází se výpis těchto chyb hned pod tabulkou s atributy. Příklad následuje:

Error 32 occurred at disk power-on lifetime: 7755 hours (323 days + 3 hours)
  When the command that caused the error occurred, the device was active or idle.

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 00 ff ff ff 0f  Error: UNC at LBA = 0x0fffffff = 268435455

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  25 00 00 ff ff ff ef 00   3d+06:24:52.346  READ DMA EXT
  27 00 00 00 00 00 e0 00   3d+06:24:52.345  READ NATIVE MAX ADDRESS EXT
  ec 00 00 00 00 00 a0 00   3d+06:24:52.343  IDENTIFY DEVICE
  ef 03 46 00 00 00 a0 00   3d+06:24:52.343  SET FEATURES [Set transfer mode]
  27 00 00 00 00 00 e0 00   3d+06:24:52.318  READ NATIVE MAX ADDRESS EXT

Detaily z tohoto výpisu jsou smysluplné především pro výrobce zařízení, pro běžného uživatele stačí jen informace, že k nějaké chybě došlo (zde je vypsaná již třicátá osmá chyba, takovýto disk je lepší co nejdříve vyměnit).

Self-test aneb samovyšetření

Jak již bylo naznačeno v úvodu, kromě logování S.M.A.R.T. nabízí i možnost aktivního testování disku, takzvaný self-test. Test disku provádí firmware na zařízení bez jakékoli součinnosti operačního systému, a to i za plného provozu bez znatelné ztráty výkonu (samozřejmě jen pokud je disk nějak normálně vytížen). Existuje několik typů testů, z těch nejpoužívanějších SHORT a LONG. Krátký ( SHORT) test je obvykle dokončen do desíti minut, dlouhý ( LONG) test může trvat několik hodin. Spuštění testu provedeme příkazem:

# smartctl -t short /dev/sda

Výsledky testu nebo stav jeho průběhu opět nalezneme ve výpisu z

# smartctl -a /dev/sda

Výpis o výsledcích testu může vypadat takto:

bitcoin školení listopad 24

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     10313         -
# 2  Short offline       Completed without error       00%      5212         -

V případě nalezení chyb je ve sloupci LBA_of_first_error uvedena adresa sektoru první z nich.

Démon smartd

Součástí balíku smartmontools je i smart daemon smartd. Ten ve výchozím nastavení analyzuje SMART data každých 30 minut a loguje do syslogu případné nalezené chyby či problémy. Zároveň podporuje odeslání emailu na zadanou adresu v okamžiku, kdy uživatelem sledované hodnoty překročí mez. Konfigurace démona se provádí obvykle v /etc/smartd.conf, detailněji viz man smartd.conf.

Autor článku

Tomáš Matějíček je autorem několika více či méně známých projektů jak z oblasti operačních systémů, tak internetu. V současnosti samozvaný expert na Linux, Bash, PHP a MySQL.