Jdi na obsah Jdi na menu
 


Záchrana a obnova dat z poškozeného disku

20. 2. 2008

Článek je zápisek z blogu na abclinuxu.cz

Havárie disku? Naděje neumírá!

Zažil to snad skoro každý. Disk, který nějakou dobu spolehlivě pracoval, najednou stávkuje - a to přesto, že SMART žádný problém nehlásil. Prostě jednoho dne nejde nabootovat nebo systém suše hlásí, že z disku nelze číst. Nepříjemná situace, ovšem ještě není nic úplně ztraceno.

Když selže disk, je to nepříjemné pro každého. A kdo navíc nezálohoval, zažívá doslova peklo. Nejhorší je porucha typu "náhlá smrt", kdy disk funguje stále dobře, a najednou ani ťuk. Trvá-li umírání delší dobu (během které se sice třeba z disku ozývají podivné zvuky, ale disk stále pracuje), lze ještě data zachránit.

Častým druhem poruchy jsou vadné sektory. Data zde uložená se sice někdy dají pomocí speciální techniky obnovit, ale stojí to pořádné peníze. Jinak je nutno se smířit se ztrátou těchto dat. Horší situace nastane, když se poškodí sektory, kde jsou umístěna životně důležitá data filesystému. Samozřejmě hodně záleží na tom, o jaký souborový systém se jedná a která data jsou poškozena (např. superblok u ext2/3 je několikanásobně zálohován na různá místa disku). Je-li ale poškození větší, je to prostě smůla.

Ovšem ani tady není nic úplně ztraceno. Sice máme disk, kde nevíme nic o rozmístění souborů, ale ta data tam stále jsou a lze je tedy získat. Vydatným pomocníkem bude program magicrescue.

Magicrescue je schopen využít informace obsažené přímo v souborech a na základě toho získat data i bez filesystémových informací. Předpokládá to samozřejmě, aby daný soubor jednak nebyl fragmentovaný, a současně aby obsahoval (typicky v hlavičce) informaci o velikosti tohoto souboru.

Program funguje tak, že čte surová data a snaží se na začátku každého bloku najít informace o tom, o jaký soubor jde. Když ho identifikuje (např. ZIP archiv), získá z něho délku, případně (pokud to jde) se ho pokusí zvalidovat/opravit a následně ho uloží pod názvem podle umístění v surových datech. Soubory lze také kategorizovat podle typu (např. obrázky JPEG do jednoho adresáře, dokumenty Word do dalšího apod.).

Lze extrahovat i soubory, ve kterých není uvedena jejich délka (např. textové soubory, zdrojáky) - v takovém případě se prostě uloží data až do nastaveného limitu. Protože je nakládání se soubory řízené pomocí pravidel, lze si ho snadno upravit podle potřeby. Podobně i samotný proces validace a opravy je jednoduše modifikovatelný, z většiny se jedná o skripty v Perlu.

Často se stane, že je potřeba obnovit také soubory, které magicrescue nezná. Kdysi jsem takto musel obnovovat soubory programu CorelDraw a adresáře Outlook Express. Je to relativně snadné - stačí buď ze specifikace nebo (pokud není dostupná) zkoumáním souboru zjistit "magický řetězec" a způsob, jakým je (pokud je) v souboru uložena délka. Pak už se jen vytvoří příslušné pravidlo a případně také skript nebo program pro nakládání se souborem.

Samotná oprava probíhá ve třech krocích. Nejdřív se udělá obraz poškozeného disku (např. pomocí dd), pak se na něj pustí magicrescue a nakonec přichází ta nejhorší etapa, tedy zkoumání získaných souborů, jejich přejmenovávání a přesouvání. Není to jednoduché, ale pokud někdo zanedbává zálohování, může to považovat za poměrně mírný trest - a být rád, že to jde aspoň takto.