Estis 2019. Nia laboratorio ricevis sufiĉe nekutiman 9.1GB QUANTUM FIREBALL Plus KA diskon. Laŭ la posedanto, la paneo de la disko okazis en 2004 pro paneo de la elektroprovizo, kiu kunportis la diskon kaj aliajn komputilajn komponantojn. Poste, multaj riparejoj provis ripari la diskon kaj reakiri la datumojn, sed vane. Kelkaj promesis malmultekostan riparon, sed neniam solvis la problemon; aliaj estis tro multekostaj, kaj la kliento rifuzis reakiri la datumojn. Fine, la disko trairis multajn riparcentrojn. Ĝi perdiĝis plurfoje, sed danke al la iniciatemaj klopodoj de la posedanto registri informojn de diversaj glumarkoj sur la disko, li sukcesis redoni sian diskon al li fare de pluraj riparcentroj. La perdoj ne restis nerimarkitaj; multaj spuroj de lutado restis sur la originala regilo, kaj ankaŭ videbla manko de SMD-elementoj estis rimarkebla (antaŭenrigardante, mi diros, ke ĉi tio estas la malplej grava problemo kun ĉi tiu disko).

Rizo. 1 HDD Quantum Fireball Plus KA 9,1GB
La unua paŝo estis serĉi en la donaca arkivo la antikvan ĝemelon de ĉi tiu disko kun funkcianta regilplato. Post kiam ĉi tiu serĉado estis finita, fariĝis eble fari ampleksajn diagnozojn. Post kontrolado de la motoraj volvaĵoj por kurtaj cirkvitoj kaj konfirmo, ke ne estis, ni instalis la platon de la donaca disko sur la paciencan diskon. Ni aplikis potencon kaj aŭdis la normalan sonon de la ŝafto turniĝanta supren, pasis la kalibran teston kun ŝargado de firmvaro, kaj post kelkaj sekundoj, la disko raportis per siaj registroj, ke ĝi estis preta respondi al komandoj de la interfaco.
Fig. 2 DRD DSC-indikiloj indikas pretecon akcepti komandojn.
Ni faras sekurkopion de ĉiuj kopioj de firmvaraj moduloj. Ni faras kontrolon de la integreco de firmvaraj moduloj. Ne estas problemoj legi la modulojn, sed analizo de la raportoj malkaŝas kelkajn strangaĵojn.

Fig. 3. Tabelo de zonoj.
Ni atentas la tabelon de zonaj distribuoj kaj rimarkas, ke la nombro de cilindroj estas 13845.

Fig. 4 P-listo (primara listo - listo de difektoj enkondukitaj dum la produktadciklo).
Ni rimarkas la ekstreme malaltan nombron da difektoj kaj iliajn lokojn. Ni revizias la protokolon pri kaŝado de fabrikaj difektoj (60h) kaj trovas ĝin malplena, sen enskriboj. Ĉi tio sugestas, ke iu antaŭa servocentro eble mistraktis la servareon de la disko, hazarde aŭ intence anstataŭigante malsaman modulon, aŭ forviŝante la difektoliston de la originalo. Por kontroli ĉi tion, ni kreas taskon en Data Extractor kun la opcioj "krei sektoro-laŭ-sektora kopio" kaj "krei virtualan tradukilon" ebligitaj.

Fig. 5 Taskoparametroj.
Kreinte la taskon, ni rigardas la enirojn en la sekciotabelo en la nula sektoro (LBA 0)

Fig. 6 Ĉefa startregistro kaj subdiskotabelo.
Ekzistas ununura eniro (16 bajtoj) ĉe deŝovo 0x1BE. La dosiersistema tipo sur la subdisko estas NTFS, la deŝovo al la komenco estas 0x3F (63) de la sektoro, kaj la grandeco de la subdisko estas 0x011309A3 (18,024,867) sektoroj.
En la sektora redaktilo, malfermu LBA 63.

Fig. 7 NTFS-startiga sektoro
Laŭ la informoj en la startsektoro de la NTFS-disko, oni povas diri jenon: la sektora grandeco adoptita en la volumo estas 512 bajtoj (vorto 0x0200 (512) estas skribita ĉe delokigo 0x0B), la nombro de sektoroj en areto estas 8 (bajto 0x08 estas skribita ĉe delokigo 0x0D), la areta grandeco estas 512x8 = 4096 bajtoj, la unua MFT-rekordo troviĝas ĉe delokigo 6.291.519 sektorojn de la komenco de la disko (ĉe delokigo 0x30 la kvarobla vorto 0x00 00 00 00 00 0C 00 00 (786.432) estas la numero de la unua MFT-areto. La sektora numero estas kalkulata per la formulo: Areta numero * nombro de sektoroj en areto + delokigo al la komenco de la disko 786.432 * 8 + 63 = 6.291.519).
Transirante al sektoro 6 291 519.

Fig. Xnumx
Tamen, la datumoj enhavitaj en ĉi tiu sektoro estas tute malsamaj ol la MFT-registro. Kvankam tio indikas eblan malĝustan tradukon pro malĝusta listo de difektoj, ĝi ne pruvas ĝin. Por plue kontroli tion, ni legos la diskon po 10 000 sektoroj samtempe en ambaŭ direktoj, relative al sektoro 6 291 519. Poste, ni serĉos regulajn esprimojn en la legitaj datumoj.

Fig. 9 Unua MFT-registro
En sektoro 6.291.551, ni trovas la unuan MFT-rekordon. Ĝia pozicio diferencas de la kalkulita je 32 sektoroj, kaj poste sekvas kontinua grupo de 16 rekordoj (de 0 ĝis 15). Ni enigas la pozicion de sektoro 6.291.519 en la ŝovtabelon, ŝovante ĝin antaŭen je 32 sektoroj.

Fig. Xnumx
Rekordo n-ro 16 devus esti ĉe deŝovo 12.551.431, sed ni trovas nulojn tie anstataŭ MFT-rekordon. Ni faru similan serĉon en la ĉirkaŭa areo.

Fig. 11 MFT-eniro 0x00000011 (17)
Granda MFT-fragmento estas detektita, komencante per rekordnumero 17 (53 646 rekordoj longa) kun delokiĝo de 17 sektoroj. Por pozicio 12 155 431, ni enigas delokiĝon de +17 sektoroj en la delokaĵtabelon.
Determininte la spacajn poziciojn de la MFT-fragmentoj, ni povas konkludi, ke ĉi tio ne ŝajnas esti hazarda fiasko aŭ MFT-fragmentoj skribitaj ĉe malĝustaj delokigoj. La teorio implikanta malĝustan tradukilon povas esti konsiderata konfirmita.
Por plue lokalizi la ŝovpunktojn, ni establos la maksimuman eblan delokigon. Por fari tion, ni determinos la ŝovon de la fina markilo de la NTFS-disko (la kopio de la startsektora). En Figuro 7, ĉe delokigo 0x28, la kvarvorto estas la valoro de la grandeco de la disko: 0x00 00 00 00 01 13 09 A2 (18,024,866) sektoroj. Aldonante la delokigon de la disko de la komenco de la disko al ĝia longo, oni ricevas la delokigon de la fina markilo de NTFS de 18,024,866 + 63 = 18,024,929. Kiel atendite, la bezonata kopio de la startsektora ne estis trovita tie. Serĉo en la ĉirkaŭa areo rivelis ĝin kun kreskanta ŝovo de +12 sektoroj relative al la lasta MFT-fragmento.

Fig. 12 Kopio de la NTFS-startiga sektoro
Ni ignoras la alian kopion de la startsektoro ĉe deŝovo 18,041,006, ĉar ĝi estas senrilata al nia subdisko. Surbaze de antaŭaj esploroj, oni determinis, ke la subdisko enhavas inkluzivaĵojn el sektoroj 61, kiuj "aperis" dum la traduko, kaj kiuj delokigis la datumojn.
Ni faras plenan legadon de la disko, kiu lasas 34 nelegitajn sektorojn. Bedaŭrinde, ne eblas fidinde garantii, ke ĉiuj el ili estas difektoj forigitaj de la P-listo, sed estas konsilinde konsideri iliajn poziciojn dum plia analizo, ĉar en iuj kazoj eblos fidinde determini ŝovpunktojn kun sektornivela precizeco, anstataŭ dosiernivela precizeco.

Fig. 13 Statistikoj pri diskolegado.
Nia sekva tasko estas determini la proksimumajn lokojn de la ŝoviĝoj (ĝis la dosiero en kiu ili okazis). Por fari tion, ni skanos ĉiujn MFT-rekordojn kaj konstruos dosierfragmentajn lokĉenojn.

Fig. 14. Ĉenoj de dosierlokoj aŭ iliaj fragmentoj.
Poste, moviĝante de dosiero al dosiero, ni serĉas la punkton kie la atendata dosierkapo ŝanĝiĝas al io alia, kaj la dezirata kapo aperas kun pozitiva delokiĝo. Dum ni rafinas ĉi tiujn delokiĝojn, ni plenigas la tabelon. Post plenigado, pli ol 99% de la dosieroj estos nedifektitaj.

Fig. 15. Listo de uzantodosieroj (la kliento konsentis publikigi ĉi tiun ekranfoton)
Por identigi specifajn ŝanĝojn en individuaj dosieroj, oni povus fari plian laboron kaj, konsiderante la dosierstrukturon, oni povus trovi inkluzivaĵojn de datumoj senrilataj al la dosiero. Tamen, por ĉi tiu tasko, tio ne estis kostefika.
P.S. Mi ankaŭ ŝatus alparoli miajn kolegojn, kiuj antaŭe pritraktis ĉi tiun diskon. Bonvolu esti singardaj dum laborado kun aparata firmvaro kaj faru sekurkopion de servaj datumoj antaŭ ol fari iujn ajn ŝanĝojn. Ankaŭ, bonvolu eviti intence plimalbonigi la problemon se vi ne sukcesis atingi interkonsenton kun la kliento pri la laboro farata.
fonto: www.habr.com
