S.M.A.R.T. a zdraví pevných disků

Správa linuxového serveru: S.M.A.R.T. a zdraví pevných disků

Pevné disky obsahují obvykle to nejcennější - vaše data. Ať už využíváte linuxového softwarového RAIDu nebo ne, hlídat zdraví disků je určitě velmi důležité, stejně jako mít možnost odhadnout, v jakém stavu je disk, který se vám zrovna dostal pod ruku. A tomu se budu věnovat v tomto a v následujících dílech.

Pevné disky jsou v dnešní době relativně uzavřené systémy s vlastní vnitřní logikou, ale také vnitřním monitorováním a diagnostikou, a to je právě S.M.A.R.T. (Self Monitoring, Analysis and Reporting Technology). Původní myšlenkou této technologie byla schopnost předpovědět selhání disku a varovat uživatele ještě před tím, než k tomu dojde.

Realita je taková, že S.M.A.R.T. dokáže předpovědět blížící se selhání pevného disku jen v některých případech. Přesné procento případů udávají různé zdroje různě (Wikipedie udává 64 %, ale zdroj, ze kterého byla tato informace převzata, udává 30 %). Je jasné, že už jen z podstaty věci může S.M.A.R.T. předpovědět jenom takové typy poruch, které se projevují časem, pozvolna, nikoliv poruchy, které nastanou okamžitě a bez varování. To ale neznamená, že nemá cenu tuto technologii využít, naopak - i když není dokonalá, dokáže nám v řadě případů pomoci.

Fungování S.M.A.R.T.

S.M.A.R.T. dělá tři věci. Jednak shromažďuje řadu údajů, které mají větší či menší vypovídací hodnotu o možném budoucím selhání. Pokud zjistí nějakou chybu při práci s diskem, pak ji zaznamená do svého vnitřního logu. Poslední věc, kterou S.M.A.R.T. umí, je testování disků na povel, tedy jakási vnitřní samodiagnostika.

smartmontools

Balíček, který umožňuje využívat technologii S.M.A.R.T. v GNU/Linuxu se nazývá smartmontools. Naleznete ho v repositářích Debianu, ale i mnoha jiných distribucí.

To nejjednodušší, co můžete udělat, je přečíst údaje z konkrétního pevného disku, což provedete příkazem:

smartctl -a /dev/sda | less

Výpis vás asi na první pohled odradí, protože bude velmi dlouhý (proto také doporučuji použít less nebomore). Výpis nemusíte číst celý, stačí se zaměřit na ty nejpodstatnější části. První takovou částí je výpis hodnot atributů, které S.M.A.R.T. měří:

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate     0x000f   200   200   051    Pre-fail  Always       -       0
3 Spin_Up_Time            0x0003   187   186   021    Pre-fail  Always       -       1616
4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       577
5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
7 Seek_Error_Rate         0x000e   100   253   051    Old_age   Always       -       0
9 Power_On_Hours          0x0032   097   097   000    Old_age   Always       -       2716
10 Spin_Retry_Count        0x0013   100   100   051    Pre-fail  Always       -       0
11 Calibration_Retry_Count 0x0012   100   100   051    Old_age   Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       514
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       146
193 Load_Cycle_Count        0x0032   199   199   000    Old_age   Always       -       4787
194 Temperature_Celsius     0x0022   112   098   000    Old_age   Always       -       35
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0010   100   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0009   200   200   051    Pre-fail  Offline      -       0

Tento výpis vypadá sice na první pohled značně komplikovaně, ale jeho čtení není až tak těžké. Vlevo je název atributu, ten je ve většině případů samovysvětlující. Konkrétní hodnota daného atributu je zobrazena ve sloupci RAW_VALUE ("surová" hodnota). Surová hodnota není u některých atributů vždy zcela reprezentativní, protože disky od různých výrobců mohou zaznamenávat trošku jiná čísla (bohužel, technologie S.M.A.R.T. není standardizována, takže z části platí "každý pes, jiná ves").

Kupříkladu, výše uvedený výpis pochází z disku od firmy Western Digital. Povšimněte si, že první atribut (raw read error rate) má nulovou "surovou" hodnotu. Naopak jiný disk od firmy Seagate mi hlásí hodnotu177587740, která je nepoměrně vyšší, což ale neznačí, že by disk měl nějakou poruchu - pro disky od tohoto výrobce je to běžné a neznamená to nic znepokojivého. Podobně vysoká hodnota je u Seagatu běžná i u atributu hardware ECC recovered (jak je patrné z výpisu, tento disk od Western Digital tento atribut nemá). Samsungy hlásí podobně vysoké hodnoty u hardware ECC recovered, ale už ne u raw read error rate. Řada důležitých údajů má však reprezentativní a porovnatelnou hodnotu napříč disky od různých výrobců.

V některých případech se může hodit pro referenci použít interpretované hodnoty (value, worst, treshold). Interpretovaná hodnota funguje následovně: Firmware disku umí každý atribut přepočítat do reprezentativní, normalizované hodnoty. Pro každý atribut je určen práh (treshold), jehož přetečení indikuje vážný problém. Tento problém může být dvojího rázu, a to podle typu atributu - jedná-li se o atribut pre-fail, pak překročení daného prahu značí hrozící akutní selhání disku. Jedná-li se o atribut old age, pak přetečení prahu značí, že disk je již příliš starý a opotřebovaný.

Aktuální interpretovaná hodnota se nachází ve sloupci "value", ve sloupci "worst" naleznete nejhorší dosaženou hodnotu (nejblíže prahu) za celý život pevného disku, a samotný práh naleznete ve sloupci "tresh" (jako treshold - práh).

Klíčové údaje

Mezi ty nejdůležitější údaje, na které byste se měli zaměřit, patří:

Read error rate indikuje počet hardwarových chyb při čtení z disku (pro některé výrobce je typická extrémně vysoká hodnota, která ovšem neznamená problém - viz výše).

Reallocated sector count udává počet realokovaných sektorů. Moderní pevné disky již nenechávají správu špatných sektorů na operačním systému, řeší si ho sami. Mají totiž zásobu rezervních sektorů, takže jakmile firmware pevného disku zjistí, že se zápisem do nějakého sektoru je problém, označí jej jako vadný a přesune data do rezervní oblasti. Disk se tak nadále pro operační systém chová jako disk bez špatných sektorů. Zvyšující se počet realokovaných sektorů značí problém s povrchem disku.

Reallocation event count je počet úspěšných i neúspěšných pokusů přesunout data do rezervní oblasti.

Current pending sector count označuje počet "problémových" sektorů, kde došlo k chybě čtení (takový sektor není přemapován, neboť se následné čtení ještě může podařit). Pokud se následný zápis nebo čtení tohoto sektoru podaří, tato hodnota se sníží.

Uncorrectable sector count je počet neopravitelných chyb při čtení nebo zápisu. Zvýšení této hodnoty indikuje problém s povrchem disku.

Spin retry count je počet neúspěšných pokusů o náběh disku na provozní otáčky - zvyšující se hodnota značí problém s mechanikou disku.

Další atributy jsou popsány podrobně v anglické Wikipedii, nicméně výše uvedené mají obvykle dostatečnou vypovídací schopnost.

Hodnoty jednotlivých atributů je třeba vhodně interpretovat, a k tomu vám bohužel přímé vodítko neposkytnu. Zvyšující se hodnoty klíčových atributů uvedených výše značí možný problém, tedy možné selhání disku v blízké budoucnosti, ale pouze s jistou pravděpodobností. To, že máte na disku třeba jeden realokovaný sektor, ještě nemusí vylučovat možnost, že disk bude spolehlivě fungovat ještě roky. Stejně tak fakt, že veškeré "klíčové" atributy mají nulové hodnoty, neznamená, že disk nemůže během hodiny katastrofálně selhat.

Mohu vás nicméně odkázat na studii o poruchovosti disků (PDF), kterou provedl Google, a která zohledňuje některé S.M.A.R.T. atributy a jejich vztah k pravděpodobnosti selhání disku. Tato studie je poměrně komplexní a zahrnuje i další faktory, jako je například teplota.

Tím bych tento díl ukončil. Příště se budu věnovat S.M.A.R.T. logům a jejich interpretaci v kontextu hodnot S.M.A.R.T. atributů.