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:
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.