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