Rozpadly mirror s vadnym diskem
Miroslav Lachman
000.fbsd at quip.cz
Tue Sep 11 12:28:40 CEST 2012
Miroslav Prýmek wrote:
> Zdravim,
>
> mam dost neprijemny problem a chtel bych vas pozadat o konzultaci, nez
> se pustim do reseni.
>
> U zakaznika doslo k neocekavanemu vypadku proudu a UPSka server
> neudrzela. Bohuzel doslo k nestastne shode nahod, fakta:
>
> 1. server ma dva disky v gmirroru (ad4,ad6)
> 2. na disku ad6 se objevily SMART chyby
> 3. disk ad4 je podle SMART v poradku, ale z mirroru vypadl (nejspis
> vlivem toho vypadku se tam neco nezapsalo)
Tuhle situaci dobre znam z praxe
> Problem je v tom, ze mirror nejde obnovit, protoze z disku ad6 nejdou
> nektere sektory precist:
> # gmirror status
> Name Status Components
> mirror/gm0 DEGRADED ad6
> ad4 (99%)
Zustane to zaseknute na tech 99% procentech? Co se stane pak?
Me to asi dvakrat v zivote zustalo takhle viset na 99% nebo dokonce 100%
Vetsinou to v tehle situaci ale po par hodinach uplne vytuhne
> Z logu:
> ad6: FAILURE - READ_DMA48 status=51<READY,DSC,ERROR>
> error=40<UNCORRECTABLE> LBA=488381440
> GEOM_MIRROR: Synchronization request failed (error=5).
> mirror/gm0[READ(offset=250051297280, length=131072)]
> FAILURE - READ_DMA48 status=51<READY,DSC,ERROR>
> error=40<UNCORRECTABLE> LBA=488395008
> GEOM_MIRROR: Synchronization request failed (error=5).
> mirror/gm0[READ(offset=250058244096, length=131072)]
>
> Zalohu mam, ale kompletni obnove bych se rad vyhnul - nechal ji az
> jako uplne nejzazsi moznost, protoze
> od te posledni zalohy uzivatele pracovali (zaloha je ze dneska 4:30).
> Uzivatelu je hodne a vsem vysvetlit, ze o dnesni
> praci prisli, neni moc pruchodne...
>
> Predpokladam, ze mirror zadnym zpusobem obnovit nejde (neco jako
> "obnov mirror a ignoruj sektory, ktere se nepodarilo
> zesynchronizovat").
Tuhle moznost tam bohuzel gmirror nema. Duvody jsou docela pochopitelne,
ale nekdy by se to jako footshooting option hodilo.
> Zasadni otazka zni:
> 1. kdyz gmirror vypsal dve oblasti, ktery se nepodarilo
> zesynchronizovat, znamena to, ze zbytek je v poradku? Nebo kdyz se
> vyskytnou
> dve chyby, tak dalsi pokusy vzda (takze chybi vsechno od offsetu
> 250058244096 do konce disku)?
Zaznamenal jsem dva zpusoby chovani v teto situaci. Nekdy na tom miste
uplne zatuhne, nepokracuje v synchronizaci a system pak po case (nekdy
minuty, nekdy hodiny) uplne zatuhne a musi dojit k restartu natvrdo.
Po takovem restartu nekdy synchronizace pokracuje od posledniho znameho
mista, nekdy zacne znovu od zacatku.
Ale jeste nikdy se mi nestalo, ze by to nakonec (treba na druhy, nebo
treti pokus) nedojelo uspesne az do konce.
A nikdy se mi nestalo, ze by to od pozice prvni chyby ignorovalo zbytek
disku - overeno na pripadech, kdy chyba byla hned na zacatku disku.
> 2. da se nejak zjistit, jake soubory jsou v te poskozene oblasti ulozene?
Tohle jsem tu uz parkrat resil, ale je to neskutecna alchymie a jeji
vysledek podle mych praktickych zkusenosti neni 100%.
Ty prepocty offsetu, velikosti FS bloku a diskovych bloku atd. jsou
hrozna pakarna a neni to nikde poradne zdokumentovane (nebo aspon ne v
takove podobe, aby to chapal i muj mozek). Castecne mi tu s tim tehdy
radil Dan, ktery to cetl ze zdrojaku.
Jako pouzite nastroje k tomu slouzi fsdb a tam se musis dopracovat k
tomu, abys mu predhodil spravna cisla v ramci filesystemu (tzn.
prepocitat absolutni LBA disku na cisla bloku v ramci konkretniho
oddilu). Z fsdb pak musis vydolovat cislo inode a pak treba pouzit find
/path/to -inum 12345
Tzn. prohledat cely ten oddil, ktery obsahuje vadny sektor a najit
soubor podle jeho inode cisla.
Kdyby nedoslo jeste k prepisu toho sektoru na "zdravem" disku v mirroru,
tak si muzes nechat vypsat obsah toho sektoru (pokud na tom oddilu jsou
prevazne textove soubory) a podle obsahu tipnout, co je to za soubor.
Nevyhoda je, ze muzes dostat data treba uz davno smazaneho souboru -
tzn. sektor je ve skutecnosti "prazdny" a o zadna data jsi neprisel, ale
ty z neho prectes nejaka data - a pak zase nevis.
Pripadne kdyz mas takhle dva disky, muzes pomoci dd precist ten jeden
sektor ze zdraveho, zkusit ho zapsat na ten nemocny a pak vetsinou dojde
k realokaci toho vadneho sektoru.
Ale tohle hrani (misto "h" si zkus dosadit i jine pismenko) zabira
hrozne moc casu, takze to nema asi smyl pokouset u produkcniho stroje a
uz vubec ne v pripade, ze sis s tim jeste nikdy nehral. Ja uz nad timhle
ztratil nekolik dnu zivota...
> Nebo je lepsi na tohle se vykaslat a situaci vyresit jednoduse tak, ze
> do serveru zapojim novy disk, vytvorim na nem novy mirror a data tam
> prekopiruju tarem, takze presne uvidim, ktere soubory neslo precist, a
> ty obnovit ze zalohy?
>
> Nebo mate nejakou jinou radu, jak postupovat?
Opet zalezi na tom, kolik na to mas casu, jak dulezita data tam jsou,
jak dobre mas zalohy. Kolik mozkovych bunek na tom hodlas nechat.
Ja jsem to nekolikrat zkousel vyse popsanym zpusobem, protoze me to
zajimalo, co a jak tam funguje a jak se to da napravit (nebo jeste vic
pokazit)
Ale jestli mas malo casu, nechces se s tim trapit a chces jit na
jistotu, tak vezmi novy disk, v jinem stroji na nem udelej gmirror
label, gm0 rozdel na oddilu, naformatuj, zkopiruj data tarem, rsyncem,
nebo cimkoliv co uznas za vhodne a z ceho zjistis pokusy o kopirovani
poskozenych souboru...
Budes to mit s jistotou a bez nejakych nepredvidatelnych komplikaci.
Mirek
More information about the Users-l
mailing list