Monitorování disků a diskových polí - způsob jak odhalit většinu
problémů s disky dříve, než vás na ně upozorní vaši uživatelé.
27.5.2012 14:00 | Petr Bravenec | přečteno 7705×
Ve svém posledním článku zde na Linuxsoftu jsem se rozepsal o svých zkušenostech s opravami disků pomocí technologie smart. Možná vás při čtení onoho staršího článku napadlo, že pokud disk sám pozná, že je některá část media vadná, bylo by možné využít technologii smart i pro monitorování disků.
I když udělaly disky v loňském roce nepříjemný cenový skok směrem nahoru a ceny se dosud nedostaly na původní úroveň, je cena disků stále poměrně nízká ve srovnání s cenou dat vaší firmy. Zodpovědný správce serveru se proto asi bude snažit zabezpečit data ve svých serverech co nejlépe. Běžným a obvykle dostačujícím opatřením je umístění dat na diskové pole a samozřejmě každodenní, poctivé zálohování.
Data nestačí pouze uložit do diskového pole. Technika není ani všemocná, ani spolehlivá. Diskové pole i disky samotné je nutné neustále monitorovat a hlídat jejich fungování. Kterýkoliv disk může kdykoliv a zcela bez varování odejít do věčných lovišť. Ani diskové pole nemusí být zcela bezproblémové - i když je to celkem vyjímečná událost, může se vám stát, že disk vypadne z pole bez viditelných příčin (vibrace? špatně zasunutý kabel? disk se nestačí roztočit? kdo ví...) A v neposlední řadě jsou to chyby samotného správce serveru, které mohou vést k rozpadu diskového pole. Stačí, když zapomenete označit oblast na disku typem fd (raid autodetect) a zůstane vám tam defaultní 83 (linux). Z takto označené oblasti sice diskové pole poskládáte, ale pohromadě vydrží pouze do prvního restartu, který může přijít klidně až po několika měsících. A ruku na srdce, kontrolujete své servery po každém restartu opravdu tak pečlivě, abyste na podobnou závadu přišli, zvlášť pak v případě, že vše zdánlivě funguje zcela bez problémů? No a hádejte, který disk odejde, když přijde na lámání chleba - myslíte si, že to bude ten, který nebyl do diskového pole připojen a několik měsíců zahálel?
Diskové pole i disky je proto nutné neustále monitorovat a veškeré problémy co nejdříve hlásit.
Pro monitorování disků můžete v Linuxu využít program smartd z balíku smartmontools. Balík by měl být prakticky v libovolné distribuci, která připadá v úvahu na serveru. Program by se měl startovat automaticky při startu systému. Program smartd má velmi široké možnosti nastavení a umožňuje vám automaticky testovat a sledovat prakticky jakýkoliv parametr disku, problémy pak dokáže program nahlásit mailem (při napojení pošty na sms bránu se tak můžete o dozvědět o potenciálním problému v rámci několika minut).
I když disky dokáží o své činnosti reportovat poměrně široké množství parametrů, v praxi si pravděpodobně vystačíte s celkem jednoduchým nastavením. O discích vydal velmi rozsáhlou statistickou studii Google, v originále ji můžete najít zde:
http://research.google.com/archive/disk_failures.pdf
V češtině vyšlo na českém internetu množství různých rozborů této studie. Pokud si studii pročtete, pravděpodobně dospějete k názoru, že disk může umřít kdykoliv a bez varování. Stejně tak disk, který hlásí množství různých problémů, může vydržet běžet ještě dlouhá léta. Rozhodně je však ze studie patrné, že už první problém s diskem zvyšuje pravděpodobnost jeho kompletního selhání. Proto může být pro pečlivého správce serveru důležité vyměnit disk už při prvních projevech technických problémů, které by nechaly kohokoliv jiného chladným (pět realokovaných sektorů? to ještě vydrží...), a nečekat na celkové selhání disku.
Program smartd lze nastavit tak, že periodicky testuje disk a veškeré změny nahlásí. V článku se nehodlám zabývat podrobným popisem konfigurace, zájemci nechť si najdou detaily v manuálové stránce. Ukážu pouze na obvyklá, užitečná nastavení.
Konfigurační soubor najdete v /etc/smartd.conf.
Pokud chcete v serveru sledovat disky, musíte v prvé řadě programu smartd sdělit, jaké disky v systému máte. Každý konfigurační řádek v smartd.conf začíná označením disku, kterého se řádek týká. Pro každý disk v systému tedy musíte mít nejméně jeden řádek:
/dev/sdx -další-parametry
Místo konkrétního disku můžete napsat i slovo "DEVICESCAN". Potom se bude smartd starat o veškeré disky, které v systému objeví, a to včetně těch, které jsou připojené dodatečně. U serveru to nemusí být na závadu, protože disky se zde asi příliš často za provozu nemění, ale používáte-li například na zálohování disk připojený přes sběrnici ESATA, může docházet k nedorozuměním:
DEVICESCAN -další-parametry
Chyby si můžete nechat posílat mailem, slouží k tomu parametr -M
/dev/sdx -M komu@kam.cz
Patametrů, které si můžete nechat posílat, je celá řada. Základní kontrolou by mohl být status disku: dobrý/špatný. Přijde-li vám mail s varováním, měli byste okamžitě disk vyměnit, protože smart předpovídá kompletní havárii disku do 24 hodin:
/dev/sdx -M komu@kam.cz -H
Další kontrolou, kterou byste mohli prověřovat své disky, je zvýšení počtu chyb od poslední kontroly:
/dev/sdx -M komu@kam.cz -l error
Do této kontroly se však zahrnují veškeré parametry, takže disk by vám hlásil i zvýšení teploty o pouhý jeden stupeň. Proto je dobré teplotu ze sledování vyloučit:
/dev/sdx -M komu@kam.cz -l error -I 194
K parametrům můžeme přidat i sledování výsledků testování disku:
/dev/sdx -M komu@kam.cz -l error -l selftest -I 194
Různých testů existuje celá řada, zajemce mohu odkázat na manuálovou stránku smartd.conf. Chcete-li zapnout všechny vhodné kontroly, použijte přepínač -a. Vhodné je i doplnění kontroly realokovaných sektorů a jakoukoli změnu jejich počtu považovat za kritickou (parametr -R 5!):
/dev/sdx -a -R 5! -m komu@kam.cz
Sledování teploty u disků vyžaduje trochu složitější přístup. Studie Google překvapivě říká, že mírně vyšší teploty diskům neškodí, ba naopak se ukazuje, že škodlivé může být přílišné chlazení - setkal jsem se však na internetu s názorem, že vyšší chybovost disků při nižší teplotě je způsobená méně kvalitnější eletřinou (usilovně chladící klimatizace vytváří rušení), ale v originální studii jsem to nenašel. Takže i když jsme v předchozím příkladu teplotu ze sledování vyloučili, v každém případě je užitečné teplotu sledovat a hlásit, pokud vystoupá nad určitou mez, například 40 °C, případně hlásit i příliš rychlý vzestup teploty (může ukazovat na závadu klimatizace).
V následujícím příkladu se kromě ostatních hodnot kontroluje i teplota - hlášení se posílá při změně teploty o 5 °C, informační zpráva se posílá při teplotě 45 °C a za kritickou se považuje teplota 53 °C:
/dev/sdx -a -I 194 -W 5,45,53 -m komu@kam.cz
Disky se při běžné práci programu smartd kontrolují automaticky, bez spouštění rozsáhlejších testů. Pro podrobnější kontrolu můžete využít některý ze tří standardních testů, které technologie nabízí: short (zběžný test s trváním několika minut), long (podrobný test povrchu s trváním několika hodin) a conveyance test (určený pro vyhledávání škod způsobených transportem disku). Ručně můžete testy spustit z povelové řádky:
smartctl -t short /dev/sdx smartctl -t long /dev/sdx smartctl -t conveyance /dev/sdx
Úspěšně provedený test vás samozřejmě nezajímá, ale můžete si nechat posílat hlášení o testu neúspěšném, ať už byl spuštěn ručně, nebo automaticky (kontrola je samozřejmě obsažena i v parametru -a):
/dev/sdx -l selftest -M komu@kam.cz
Testy nemusíte spouštět pouze ručně, v konfiguračním souboru smartd.conf si můžete jejich provádění naplánovat například takto:
/dev/sdx -s L/../../7/08 -m komu@kam.cz
Parametry vyžadují trochu bližší komentář, detaily si můžete opět vyhledat v manuálové stránce smartd.conf. Pro naplánování slouží parametr -s. Jeho argumentem je regulární výraz - argumenty tedy můžete řadit takto: (PARAM1|PARAM2|PARAM3). Každý argument má pak tento tvar: T/MM/DD/d/HH a význam zkratek je tento:
V časových údajích lze uvést tečky (nahrazují jakoukoliv hodnotu).
I když vypadají výše uvedené parametry složitě, ve svých serverech mám uvedené pro každý disk pouhé dva řádky:
/dev/sdx -a -I 194 -R 5! -W 5,45,53 -m komu@kam.cz /dev/sdx -s (L/../../7/08|S/../.././07) -m komu@kam.cz
Pokud si chcete práci ještě více zjednodušit, uveďte místo výčtu konkrétních disků pouze slovo DEVICESCAN. Vystačíte si tak s pouhými dvěma řádky na celý server.
Moje zkušenosti s hardwarovými raid řadiči v linuxu nejsou příliš aktuální, ani příliš příznivé. V článku se proto budu věnovat pouze softwarovému raidu spravovanému utilitou mdadm.
Ve srovnání se smartd je program mdadm při sledování disků na parametry nenáročný a stačí mu zadat pouze adresu, na kterou má odesílat chybová hlášení, případně program, který se při chybě spouští.
Program hlásí poštou několik různých událostí:
Disková pole se často chovají jinak, než by nezkušený správce serveru očekával. Pokud se dostane některý disk v poli do problémů, zůstane v diskovém poli a snaží se před svým skonem vytvořit co nejvíce dalších problémů. Disk totiž obvykle neumře znenadání, v posledních chvílích se snaží číst nečitelné sektory a zapisovat na nezapisovatelná místa a celý server tak především neskutečně zdržuje. V tuto chvíli byste už ale měli obdržet zprávu od smartd. Na vás pak je, abyste disk označili jako špatný:
mdadm /dev/md1 --fail /dev/sdx1
nebo jej rovnou odpojili od sběrnice, což už je stav, se kterým se mdadm dovede vypořádat mnohem lépe, než s neochotně umírající bestií.
Teprve po odpojení disku vám diskové pole nahlásí problém. Což už je sice pozdě, ale s předstihem vám zahlásí potenciální problémy obvykle smartd.
Velmi užitečná je však zpráva, že pole nebylo nastartované kompletní. Někdy se totiž stává, že disk, který doposud se zaťatými zuby pracoval, vypnutí už nerozchodí a z pole vypadne. Podobnou situaci si můžete vyrobit snadno i sami, pokud zapomenete označit oblast na disku jako automaticky rozpoznatelný oddíl diskového pole.
Aby vám mdadm hlásil nalezené problémy poštou, musíte jej nastavit. To můžete udělat v zásadě dvěma způsoby: v konfiguračním souboru /etc/mdadm.conf nebo parametry na povelové řádce v init skriptu.
V konfiguračním souboru nastavte parametr MAILADDR:
MAILADDR komu@kam.cz
Nebo v init skriptu nastavte tyto parametry:
mdadm --monitor --scan --mail=kudy@kam.cz
Nastavení parametrů v init skriptech i umístění mdadm.conf se může lišit napříč distribucemi. V Gentoo nastavují mdadm v konfiguračním souboru /etc/mdadm.conf, ale mohu doplnit i jeden parametr navíc do /etc/conf.d/mdadm.conf:
MDADM_OPTS="--syslog --mail=komu@kam.cz"
Ostatní potřebné parametry doplní samotný startovací skript. Aby mdadm disková pole kontroloval, samozřejmě musí být init skript spouštěný při startu systému.
Co říci nakonec? Máte-li svá data rádi, rozhodně používejte disková pole a především zálohujte. Diskové pole je pouze prostředkem, který dokáže zkrátit případné výpadky v činnosti serveru, ale ani při sebelepším monitorování nemusí diskové pole zachránit ani bajt dat. Pomocí monitorování disků však můžete většinu závad odhalit dříve, než vaši uživatelé.