Aastal 2019 saabus meie laborisse ebatavaline kĂ”vaketas QUANTUM FIREBALL Plus KA, mille maht oli 9,1 GB. Ketta omanik ĂŒtles, et see lakkas töötamast 2004. aastal defektse toiteploki tĂ”ttu, mis tĂ”i kaasa kĂ”vaketta ja teiste PC komponentide rikke. SeejĂ€rel kĂ€idi erinevates teenindus kohtades, et ketast parandada ja andmeid taastada, kuid tulemuseta. MĂ”nes kohas lubati odavalt, kuid probleem jĂ€i lahendamata, teises aga oli hind liiga kĂ”rge ja klient ei otsustanud andmete taastamise kasuks. LĂ”puks lĂ€bis ketas mitmeid teeninduskeskusi, kaotades korduvalt oma tee, kuid kuna omanik oli eelnevalt hoolitsenud teavet erinevatelt kleebistelt salvestada, Ă”nnestus tal tagada, et just tema kĂ”vaketas saadeti tagasi mĂ”nest teeninduskeskusest. Need kĂ€igud ei olnud asjata, algsel kontrolleri plaadil olid mitmed joodetud jĂ€ljed ja visuaalselt tundus, et SMD komponente oli puudu (kiirelt öeldes on see selle ketta kĂ”ige vĂ€iksem probleem).

Joonis 1 HDD Quantum Fireball Plus KA 9,1 GB
Esimese asjana tuli leida doonorarkvist selle ketta analoog, millel oli korras kontrolleri plaat. Kui see ĂŒlesanne oli lahendatud, sai teostada pĂ”hjalikke diagnostilisi protseduure. Kontrollides mootori mĂ€histe lĂŒhist ja veendudes, et seda pole, paigaldame doonorplaadi patsiendi kettale. Toome voolu sisse ja kuuleme tavapĂ€rast pöörlemise heli, lĂ€bi kалОibrimise testi laadimise mikroprogrammi ja mĂ”ne sekundi pĂ€rast teatab kĂ”vaketas registeres, et on valmis kĂ€ske vastu vĂ”tma.
Joonis 2 DRD DSC indikaatorid tÀhendavad valmidust kÀskude vastuvÔtmiseks.
Kaitseme kĂ”ik mikroprogrammi moodulite koopiaid. Teeme mikroprogrammi moodulite vahetuse kontrolli. Moodulite lugemisega ei teki mingeid probleeme, kuid aruannete analĂŒĂŒs nĂ€itab, et on mĂ”ned veidrad asjad.

Joonis 3. Tsoonide tabel.
JÀtame tÀhelepanu tsoonide jaotustabelile, tÀhelepanelikud 13845 silindri hulga suhtes.

Joonis 4 P-list (peamine nimekiri - tootmisprotsessi kÀigus jÀetud vead).
JĂ€tame tĂ€helepanu vĂ€hesele arvu vigadele ja nende lokaliseerimisele. Vaadates tehase viga peitmismi mooduli (60h), avastame, et see on tĂŒhi ja ei sisalda ĂŒhtegi kirjet. Selle pĂ”hjal vĂ”ime arvata, et mĂ”nes varasemas teeninduspunktis vĂ”idi kettaga tegeleda ja tahtmatult salvestada kellegi teise moodul vĂ”i kustutada originaalis vigade nimekiri. Selle oletuse kontrollimiseks loome Data Extractoris ĂŒlesande, kus valime valikud "loomine sektorite koopia" ja "loomine virtuaalne translator".

Joonis 5 Ălesande parameetrid.
Ălesande loomise jĂ€rel vaatame tabelis sektori kirjeid null sektoris (LBA 0)

Joonis 6 Peamine laadimissektsioon ja tabeli registreerimine.
Asend 0x1BE on ainus kirje (16 bitti). FailisĂŒsteemi tĂŒĂŒp jaotises on NTFS, asend enne 0x3F (63) sektorit, jaotise suurus on 0x011309A3 (18 024 867) sektorit.
Avame sektoriredaktoris LBA 63.

Joonis 7 NTFS laadimissektor
NTFS laadimissektoris oleva teabe pÔhjal saab öelda jÀrgmist: sektori suurus, mis on mahus aktsepteeritud, on 512 bitti (asendis 0x0B on sÔna 0x0200 (512)), sektori number klastris on 8 (asendis 0x0D on 0x08 bait), klastrisuurus on 512x8=4096 bitti, esimene MFT kirje asub 6 291 519 sektoris kettast (asendis 0x30 on neljakordne sÔna 0x00 00 00 00 00 0C 00 00 (786 432) esimese klastrite MFT number. Sektori number arvutatakse valemiga: klastrite number * sektorite arv klastris + asend enne jaotist 786 432 * 8 + 63 = 6 291 519).
Liigume sektorisse 6 291 519.

Joonis 8
Kuid selle sektori andmed ei sarnane sugugi MFT kirjele. Kuigi see osutab vÔimalikele valele tÔlkele vale defektide nimekirja tÔttu, ei tÔenda see fakti. JÀtkamiseks teeme ketta lugemise 10 000 sektoriga mÔlemas suunas, arvestades sektori 6 291 519. PÀrast seda teeme regulaarsete vÀljendite otsingu loetuks.

Joonis 9 Esimene MFT kirje
Seerias 6 291 551 avastame esimese MFT kirje. Selle asukoht erineb arvutuslikust 32 sektori vĂ”rra ja sellele jĂ€rgneb pidev 16 kirje grupp (0â15). Kirjutame nihketabelisse sektori 6 291 519 asukoha edasi 32 sektorit.

Joon. 10
Kirje #16 koht peaks olema nihkega 12 551 431, kuid seal avastame nullid, mitte MFT kirje. Teeme sarnase otsingu ĂŒmbruskonnas.

Joon. 11 MFT kirje 0x00000011 (17)
Avastame suure MFT fragmendi, mis algab kirje numbriga 17 ja sisaldab 53 646 kirjet) koos nihkega 17 sektori vÔrra. Positiivne 12 155 431 jaoks paneme nihke +17 sektorit nihketabelisse.
MFT fragmentide asukoha mÀÀramisel saame jÀreldada, et see ei nÀe vÀlja nagu juhuslik tÔrge ja MFT fragmentide kirje vale nihkega. Versioon vale tÔlkijaga vÔib pidada tÔestatud.
Edasi liikudes nihketega paikade lokaliseerimiseks mÀÀrame maksimaalse lubatud nihke. Selleks mÀÀrame, kui palju on lĂ”ppmĂ€rker NTFS jaotises nihutatud (kĂ€ivitussektori koopia). Joonisel 7 nihkega 0x28 on neli sĂ”na â see on jaotuse suuruse vÀÀrtus 0x00 00 00 00 01 13 09 A2 (18 024 866) sektorit. Liidame jaotuse nihke ketta algusest tema pikkusele ja saame NTFS lĂ”ppmĂ€rkeri nihke 18 024 866 + 63 = 18 024 929. Oodatavalt ei olnud seal vajalikku kĂ€ivitussektori koopiat. Ămbruskonnas otsimise kĂ€igus avastati see kasvava nihkega +12 sektorit viimase MFT fragmendi suhtes.

Joon. 12 NTFS kÀivitussektori koopia
Teise kĂ€ivitussektori koopia nihkega 18 041 006 ignoreeritakse, kuna see ei ole seotud meie jaotisega. Eelnevate tegevuste pĂ”hjal on kindlaks tehtud, et jaotises on âvĂ€ljaulatuvaidâ 61 sektori andmete lisandeid, mis on andmeid nihutanud.
Teeme tĂ€islugemise andmekandjast, mille tulemuseks on 34 lugemata sektori. Kahjuks ei saa garanteerida, et kĂ”ik need on defektid, mis on eemaldatud P-listist, kuid edasise analĂŒĂŒsi kĂ€igus on soovitatav arvesse vĂ”tta nende asukohta, kuna mĂ”nel juhul suudame tĂ€pselt mÀÀrata nihke punktid sektori tĂ€psusega, mitte faili tĂ€psusega.

Joon. 13 Ketta lugemise statistika.
Meie jĂ€rgmine ĂŒlesanne on mÀÀrata orienteeruvalt nihke kohad (faili tĂ€psusega, milles need tekkisid). Selleks teeme skaneerimise kĂ”igist MFT kirjete ja ehitame failide asukohtade (failifragmentide) ahelad.

Joon. 14 Failide asukohtade ahelad vÔi nende fragmendid.
SeejĂ€rel liikudes failist faili otsime, millal oodatud faili pealkirja asemel on teised andmed, ja vajaliku pealkirja avastame mingi positiivse nihkega. Ning nihke punktide tĂ€psustamise kĂ€igus tĂ€idame tabelit. Tabeli tĂ€itmise tulemusena on ĂŒle 99% failidest vigadeta.

Joon. 15 Klientide failide loend (klient on andnud nÔusoleku selle ekraanipildi avaldamiseks)
Ăksikute failide punktide nihkede mÀÀramiseks vĂ”ib teha tĂ€iendavaid töid ja failistruktuuri teadmise korral leida andmete lisandeid, mis ei kuuluks sellele. Kuid selles ĂŒlesandes ei olnud see majanduslikult mĂ”istlik.
P.S. Sooviksin pöörduda ka kolleegide poole, kelle kĂ€es see ketas varem oli. Palun olge seadmete mikrotarkvara töötamisel ettevaatlikud ning varundage teenindusandmed enne, kui midagi muuta, samuti Ă€rge sĂŒvendage probleemi tahtlikult, kui te ei ole saanud kliendiga kokku leppida, et töid teostatakse.
Allikas: habr.com
