m-vychytavky: linux raid (5) recovery

03.03.2006 09:41 | blackhole

1. klasika, odide jeden HDD
- kernel pise IO errory - nieco ako toto, kde sa objavili na danom disku (hde) badblocky:

Sep 16 15:52:57 junk kernel: hde: dma_intr: status=0x51 { DriveReady SeekComplete Error }
Sep 16 15:52:57 junk kernel: hde: dma_intr: error=0x40 { UncorrectableError }, LBAsect=193737502, high=11, low=9188126, sector
Sep 16 15:52:57 junk kernel: end_request: I/O error, dev hde, sector 193737464
Sep 16 15:52:57 junk kernel: raid5: Disk failure on hde5, disabling device. Operation continuing on 3 devices

Raid detekol ze su nejake problemy s jednym diskom a pekne sam napisal ze ho prestal pouzivat a ze bezi na zvysnych troch diskoch.
Za normalnych okolnosti masinu vypeneme, vyberieme disk, dame tam druhy (rovnaka velkost a vytvorene particie su ulhcenim, ale da sa aj inac samozrejme) po nabootovani dame raidhotadd /dev/md0 /dev/hde5 (v tomto pripade) a fici sa dalej.
Pozmaka - nebastrngujte moc s particiami ktore maju mat nieco spolocne s raidom (cize napr. menit particnu tabulku na disku ktory je v raide a pod.) treba to robit so stopnutym raidom a potom preistotu aj reboot. mozno az zbytocna opatrnost, ale su to skusenosti :)

2. kdeze klasika, naraz viac diskov v peetchi
..Co ale v pripade, ze hore uvedena hlaska je hlaska z raidu, kde jeden disk uz bol prave na reklamacii? A co dokonca vtedy ked ten disk bol prave vrateny z reklamacie a nanho prebiehal SYNC? Blbe... co? hmm...
Proste uplne novy disk z reklamacie (hdf) este nebol syncnuty a uz prdol hde.
Oh fuck. Badblock nasiel nastastie len 16 badblockov na hde.
Takze whats' next?
- spravit co najvernejsiu blokovu kopiu vadneho disku na druhy disk (v tomto pripade to bol hde (seagate 160.1GB) na hdf (maxtor 166GB) na oboch diskoch boli particie 9 a 15gb na zaciatku disku a potom logical particie presne 150GB az ku koncu disku. takze som na novucickom (nedosyncovanom) hdf vytvoril particnu tabulku aby logicka particia mala onych 150GB a nechal skopirovat image:

dd conv=noerror,sync if=/dev/hde5 of=/dev/hdf5 bs=512

noerror znamena, aby pokracoval aj ked dostane i/o error a sync znamena, aby do outputu naflusal prazdne bloky miesto blokov ktore nemohol precitat. blocksize som dal co najmensi, aby boli co najmensie straty..
- potom som este skopiroval prvu (systemovu) particiu: (kedze zrodjova bola mensia ako cielova tak poho)
dd if=/dev/hde1 of=/dev/hdf1
aby som nezabudol, tak aj MBR bolo treba skopirovat kedze som chcel z toho disku bootovat:
dd if=/dev/hde of=/dev/hdf bs=512 count=1

- vypnut stroj, odpojit dojebany disk a nasvitchovat novy miesto neho. (aby stroj bootol a raid nehaluskoval ze mu nesedi poradie diskov [nemal byt, ale..] - na mojej masine mam dosrany ps2 kontroler, takze nemozem v biose prestavit bootovaci disk ;(]

- takze stroj bootol, ale raid nespustil, preto hlasil nieco taketo:

Sep 17 12:07:33 junk kernel: md: kicking non-fresh hde5 from array!

fasa.. nebol by to problem ak by to bol jeden disk v raid5, ale toto je uz druhy.. mame na nom data (bez par vadnych blokov, ale raid nam ho nezere. tak mi to tomu raidu teda vysvetlime, co si onom myslime, lebo.!@#$! takze prislo spasenie:

mdadm --assemble --force /dev/md0

toto znova aktivuje pole a pokial bolo vsetko prevedene cisto, tak by nemal byt problem.. potom uz len fsck (ja som najprv pustil readonly aby som videl ci nebude chcet nejaku paseku narobit (najprv sa nechcel ani pustit, vraj vsetko O.K, male -f pomohlo) potom naostro

e2fsck -y -t -vv /dev/md0

nasiel zopar nealokovanych map a par dalsich bordelov a uspesne dobehol.
potom uz len mount... a viola ... fs mame spat.. ktore fajly to odniesli uz asi nezistim, nuzcouz

- v niektorych uplnezlych pripadoch treba vraj skusit nanovo vytvorit raidblocky, alu tu uz bacha, kto nevie co robi nech to racej ani nerobi..

mkraid --force

Pri tomto kroku treba mat 100% ok /etc/raidtab (poradie a nazvy diskov..) inac to pekne rozmlyncekuje secky data v poli and say bye bye to texas.

3. nejake fake pripady
menej komplikovany (ale zato dost annoying) pripad je, ked drbne elektrika a raid sa nesyncne na viacerych diskoch.. pri jednom disku sam zacne rekonstrukciu, pri viac treba tiez zopakovat mdadm --assemble --force /dev/md0 a potom pripadne raidhotadd

REPAIRING DEGRATATED AND DIRTY ARRAY - added 2005-10-17
vyrabal som nove raid5 pole, este bolo degradated (posledny disk ma prist coskoro), ale pri kopirovani dat zmrzol hw, takze tvrdy reset.. kernel ale hlasil hlasku ze pole je dirty a degradovane, takze ho nevie nastartovat. vsetky disky mali po checknuti s mdadm --examine /dev/menodisku status active, ale jedn bol clean. pouzil som tu istu fintu ako som uviedol hore s mkraid --force, ale tentokrat ide o degradovane pole, takze som pouzil postup z tadeto ,a to:
/mdadm --create /dev/md2 --level=5 --raid-devices=5 /dev/hd[hikl]1 missing

    • musim pochvalit clanok.....a 05.03.2006 | 15:07
      Avatar blackhole   Návštevník

      musim pochvalit clanok.....a maniacov styl..