Bit Rot - Rohadt adatok

Közel 20 év számítógép bütykölés alatt, úgy tűnik most először sikerült élesben elcsípnem egy random átbillent adatbitet egy adathordozón. Valószínűleg van/volt több is, csak nem szúrtam ki.
Bit-rot, vagyis adatrohadás alatt azt kell érteni, mikor valamilyen adathordozón (mindegy hogy mágneses, optikai vagy bármi, ideértve a RAM-ot is) valahol egy bit, egyetlen bit, átbillen 1-ről 0-ra. Az adott terület elveszíti a mágnesességét, elektromos töltését, vagy simán csak "elfárad". A lényeg hogy az ott tárolt információ elveszik. Ha ez az esemény kép, hang, videó, vagy hasonló jellegű fájlok adatterületén történik, a hiba jó eséllyel felfedezetlen marad az idők végezetéig. A lenti két kép közt is 1 bit a különbség.


Futtatható fájlok, dll-ek és társaik esetében, még mindig megvan az esély hogy minden rendben marad, de itt már jóval nagyobb a valószínűsége hogy az adott fájlra keresztet vethetünk. Elég sok horror-forgatókönyvet meg lehetne tölteni azzal mi minden történhet meg legrosszabb esetben, de ezzel fölösleges foglalkozni mert az egyetlen biztos megoldás az lenne ha nem használunk számítógépet :).Amivel viszont érdemes foglalkozni az a fontos, pótolhatatlan adatok védelme, mint például az én esetemben, a digitális fényképalbumom.

A sztori

Rendezgettem épp a fényképeim, mikor az egyik hamburgban készült fotó megtekintésekor a következő hiba fogadott:

Megpróbáltam a windows beépített nézegetőjével... szintén semmi. Gyorsan megnéztem a többi képet, azzal minden rendben. Nagyon nem pánikoltam, mert tudtam hogy egyrészt van 2 komplett mentésem a teljes fényképalbumról, másrészt használok paritásfájlokat is, adatkorrupció esetére, illetve ha sikerülne eleve sérülten elmenteni a backupokat. Az ilyen jellegű hibák kiszűrhetők lennének sima checksum számítással is, de az csak a hiba tényéről informál, megfelelő backup nélkül az adatokat nem lehet visszaállítani. Paritásfájlokkal viszont igen. Most erről lesz szó.

Paritás

Egy adott album mappája nálam így néz ki

Amint látható, a szokványos JPG fájlokon kívül ott sorakozik egy rakás furcsa nevű, par2 kiterjesztésű fájl is. Ezek tartalmazzák a paritás adatokat. Röviden fogalmazva a következőről van szó. A védendő fájlok fel vannak osztva adatblokkokra (2000 blokk). A paritás létrehozásakor a beállításoknak megfelelő mennyiségű (én 10%-ot szokok használni) paritásblokk jön létre, amelyek a par2 kiterjesztésű fájlokban kerülnek. Ezek a fájlok egy matematikai számítás eredményeként jönnek létre, és messze túlmutatnak rajtam, elég volt egyszer ránéznem hogy rájöjjek, a mögötte lévő matekkal nekem nem kell foglalkoznom. Szóval ennek a matek csodának az eredménye, hogy a 2000 blokkból ha bárhol, bármelyik fájlban megsérül maximum 200 blokknyi adat, akkor az helyreállítható ugyanazzal a matematikai művelettel, csak visszafelé. A blokkok mérete mindig más, a védendő fájlok összméretétől függ, de az esetek többségében komplett fájlok is visszaállíthatók, illetve anno mikor ismerkedtem a dologgal kipróbáltam, hogy egy cd adatterületére ütöttem egy lyukat és úgy is sikerült visszaállítanom mindent.

Adatmentés

Az ellenőrzési procedúra kimenete a következő képen látható:

Egyértelműen látható, hogy 1 adatblokk sérült a 1287-es jpg fájlban, és 199-cel több paritásblokkunk van mint amire az adatmentéshez szükség van. Akkor mentsünk adatot:

A képet visszanyertük, és immár megtekinthető (na nem mintha akkora veszteség lett volna :D):

Az a bizonyos bit

A hibás és a visszaállított fájlt összehasonlítva kiderült hogy közvetlenül a fájl elején, a legeslegelső bájt egyik bitje esett vissza nullára, és ez tette olvashatatlanná a fájlt. Hogy ez a hiba hogy került a fájlba, hogy tényleg bit rot volt-e vagy valamelyik másolásnál esetleg átviteli hiba, azt már soha nem tudom meg. Az biztos hogy az utóbbi 1 évben keletkezett, mert a másfél éves backup lemezen ez a fájl még tökéletesen olvasható. A lényeg hogy elcsíptem.

Programok

Habár a képek a par2 linuxos verziójával készültek (mert azt jobban szeretem), az egész megoldható windows alatt is, ráadásul ahogy látom elég pofásan.
A program neve MultiPar: