Chyba cteni disku

Dan Lukes dan at obluda.cz
Tue Sep 2 01:02:10 CEST 2014


On 1.9.2014 21:17, Zbyněk Burget:
> Muj vadny sektor musi byt nekde v datech, protoze mi na konzole skacou
> chyby cteni. kdyby byla chyba ve volnem miste, tak by to, predpokladam,
> nic nechtelo cist.

Nejsem si jisty, co se presne stane, kdyz "jen" posunes konec souboru. 
Obzvlast pokud ho posunes jen v ramci fragmentu, ktery uz stejne pro 
dany soubor naalokovany je.

> co kdyz je vadny sektor v adresarove strukture? Kdy mi takhle nahlasi chybu cteni?

Kdyby nic jinyho, adresar lze precist jako by to byl obycejny soubor. 
Jen zapisovat je timto zpusobem zakazano. No a pak by ti samozrejme mel 
nahlasit chybu pokud prochazis zapisy v adresari - ale to nemusi platit 
vzdy. Pokud mel kdysi adresar hodne souboru tak se "natahne", ale uz se 
nikdy nezmensi. Pokud ma dnes zaznamu jen par, tak pri prochazeni do te 
"vadne" casti zabrousit nemusis.

>> Takze nakonec jsem si napsal vlastni utilitu, ktera cte cely disk po
>> relativne velkych blocich (takze pomerne rychle) a kdyz se konkretni
>> blok nepovede, tak to pulenim intervalu upresni az na uroven jednoho
>> sektoru - a prepise jen ten. Navic za "problem" nepovazuju jen to, ze se
>> dany blok nepodarilo precist vubec, ale i to, ze jeho cteni trvalo
>> "nejak podezrele dlouho". V takovem pripad predpokladam, ze blok
>> obsahuje sektor s "mekkou vadou", ktery sel precist jen zasluhou L2
>> samoopravnych mechanismu (ktere ale trvaji dele) - a pro jistotu ho
>> prepisu taky (dokud z nej jeste mam kompletni a spravna data). Nic
>> horsiho, nez to, ze jsem ho prepsal zbytecne se nestane.
>
> Zeptam se dost netaktne - nedala by se ta utilita nejak nekde najit /
> ziskat / upiratit ;-) ?

No, jestli ti pomuzou zdrojaky, tak s tim ja jsem nikdy velky cavyky 
nedelal. Nemam to v podobe "uzivatelsky blbuvzdorneho" binaru. Napriklad 
ta logika "neprimerene dlouho" je proste natvrdo nastavena v kodu pro 
aktualni disk na ktery to spoustim (a kdyz ji chci zmenit, tak to proste 
znova prelozim).

Dokonce ani ty zdrojaky nebyly vytvarene s umyslem je publikovat, takze 
to neni uplen cisty programovani.

A samozrejme, zadna garance, ze ti to nekdy nejaky data neznici.

Treba se bude hodit i Mirkovi - ze si ji nedokaze napsat neznamena, ze 
nedokaze prelozit ci pripadne drobne poupravit dodany zdrojaky.

> Je mozne ji pustit za chodu systemu nebo musi pri jejim behu byt system
> mimo provoz?

Teoreticky by samozrejme slo rozdelit "detekcni" a "opravnou" fazi. Ale 
cteni na pouzivanem disku by znacne komplikovalo onu zminenou logiku 
"vadny je i kdyz cteni trva dlouho". Kazdopadne, napsany to tak neni, 
pocita se, ze disk se nepouziva.

Kazdopadne, zdrojaky lezi tady:
> http://www.freebsd.cz/~dan/disktest.c

Kazdy si to pouziva na vlastni nebezpeci. Option '-f' zpusobi, ze to 
proste prepise vsechny sektory, bez pokusu o nejakou detekci. Option 
'-i' rika offset odkud se ma test delat, pokud nema bezet defaultne od 
nuly (napriklad proto, ze byl nedokonceny predchozi beh prerusen).

Hranice "cteni trva prilis dlouho" je momentalne hard-coded na 0.5sec

> ...a dozvim se pri pouziti tehle utility ktery soubor / adresarova
> struktura byla zasazena?

O nic takoveho se nepokousim. Vypise jake sektory prepsal, takze o 
analyzu tohoto druhu se pak muzes pokusit sam.

> Mimochodem - porad nejak proste nechapu, ze muze byt takovy problem
> zjistit, ktery sektor patri kteremu souboru.

Uvedom si, ze kdyz chces ziskat obsah souboru, tak ten dotaz prochazi 
pres pomerne mnoho nezavislych vrstev - zacina to filesystemem (a mame 
ruzne), pres ruzne vrstvy jako je sprava partition a slice, nez se 
dostaneme k fyzickemu disku tak tam muze byt po ceste i nejake to 
sifrovani nebo RAID.

Pres vsechny tyhle vrstvy dotaz projde a zpatky se dostane obsah. 
Naspodu vubec nemusi byt vzdycky neco, co vubec ma sektory. Nazpet 
kazdopadne jdou jen data, nikoli identifikace toho, odkud presne 
pochazeji. Vzhledem k tomu, ze data mohou obecne pochazet z cehokoliv 
nebyla by ani takova identifikace jednoduse mozna. Dokonce ani 
bezprostredne nasledujici vrstva uz nemusi byt schopna obecne rozumet 
identifikaci vrstvy predchazejici, natozpak kdyz to prejde pres spoustu 
vrstev ...

I procfs je filesystem ...

A to odpovida nejen na to, proc je prakticky nemozne napsat nejake 
"obecne" reverzni resolveni schopne odpovedet na otazku "ke kterymu 
souboru patri tenhle sektor", ale dokonce i na to, proc nenapises ani 
"dopredne" resolveni, kdy bys proste vytvoril kompletni mapu sekvencnim 
prochazenim adresaru a souboru v nich ...

Dan





More information about the Users-l mailing list