Kdy a proč?
Už se mi několikrát stalo, že mi některý šikovný známý vytrhl z počítače flashku bez odpojení. Uživatelé MS Windows obvykle ani netuší, že by měli něco takového dělat. Pokud ještě systém nedokončil zápis a nedostal souborový systém do konzistentního stavu, problém byl na světě.
Totéž se vám může stát i s paměťovou kartou, pokud je vytažena příliš brzy. I samotný fotoaparát může způsobit problém, pokud se například vybije v nesprávnou chvíli, kdy zrovna mění soubory na kartě.
Nemusí však dojít jen k softwarové chybě či selhání lidského faktoru, ale může dojít k poškození samotné karty v místě zápisu důležitých dat v souborovém systému – například FAT tabulky.
V každém případě se ovšem jedná o velký problém, který vám znemožní kartu připojit a získat z ní data. Přestože je většina softwarových potíží řešitelná vytvořením nového souborového systému, uživatele obvykle více zajímají data než samotná karta za pár stovek.
Co s tím?
Pokud opravdu už dojde k vážnému poškození souborového systému, nepodaří se obvykle kartu připojit. Ačkoliv je v systému fyzicky viditelná, jádro neumí pracovat s daty, která nemají předepsanou strukturu.
Obvykle dochází k poškození systémových částí karty jako je zmíněná FAT tabulka. Ačkoliv samotná data poškozená nejsou, jádro se k nim neumí dostat. Dodatečným „manuálním“ rozborem dat jsme ale schopni zachránit alespoň něco.
Samozřejmě bychom takovou akci mohli provést ručně sami, ale existují nástroje, které to udělají docela pohodlně za nás. Svou práci odvedou rychle, bez problému a ani nepotřebujeme mít potřebné znalosti.
Nejprve záloha
Než začnete s kartou pracovat, nejprve proveďte zálohu všech dat. Ideální je vytvořit kompletní obraz celé karty a s ním (na disku) pak pracovat. Jednak je to rychlejší, ale hlavně zabráníte zničení dat, pokud se něco nepovede.
Stačí tedy zavolat
$ dd if=/dev/sda of=karta.img
A ve zvoleném souboru (tedy karta.img
) naleznete kompletní obsah vaší karty. Nad tím (respektive raději ještě jeho kopií) teď budeme pracovat.
Program photorec
Na samotnou obnovu použijeme program photorec
. Ten je součástí balíku testdisk
, který byste měli najít ve své distribuci (v Debianu je). Samotný balíček má několik set kilo a má jen málo závislostí.
Pokud jej v distribuci nenaleznete, chcete statickou verzi nebo verzi pro jiný systém, navštivte domovské stránky aplikace. Tam získáte balík pro DOS, MS Windows 9×, NT4/2000/XP/2003, Linux, FreeBSD, NetBSD, OpenBSD, Solaris, Mac OS X a samozřejmě také zdrojové kódy, které zkompilujete podle autorů téměř kdekoliv.
Jak to funguje
Program pracuje nad daty získanými z paměťové karty a vychází z toho, že je souborový systém poškozený. Proto jej rovnou ignoruje a v obrazu hledá hlavičky samotných souborů. Soubory JPEG mají na začátku sekvenci „JFIF“, v hlavičce PNG nalezneme znaky „PNG“ a podobně.
Photorec ovšem nezvládá jen obrázky, ale detekuje na 130 různých formátů. Jsou mezi nimi například kompresní archívy (gz, rar, tar, bz2, zip,…), multimediální soubory (mp3, avi, ogg, jpeg, png, gif,…), dokumenty (pdf, od*, doc, xls, rtf,…) a další (exe, html, py, rb,…). Kompletní seznam naleznete na domovské stránce.
Program při svém běhu počítá s tím, že data na kartě nejsou nijak fragmentována a nijak proto neřeší jejich strukturu. Fragmentace na běžné paměťové kartě z fotoaparátu není příliš běžná, většinou fotíme a pak jednorázově kartu zase smažeme. Program tedy jednoduše začne obraz disku prohledávat a pokud narazí na známou hlavičku, uloží obsah za ní do samostatného souboru.
Díky tomu není aplikace příliš závislá na použitém souborovém systému. Přestože budete zřejmě na paměťové kartě používat FAT, photorec si poradí i s Ext2/3, HFS+ a skrze knihovnu libntfs9
čte také NTFS.
Pouštíme photorec
Práce s programem je velmi jednoduchá. Pokud hodláme pracovat přímo s kartou, budeme potřebovat práva nejvyššího (tedy roota) a bude nám samozřejmě stačit sudo
. Můžeme photorec buď spustit bez parametrů, kdy nám vyhledá dostupná zařízení a interaktivně nabídne jejich obnovu, nebo mu rovnou řekneme, kde má hledat.
Spustíme proto
$ photorec karta.img
Okamžitě dojde ke spuštění programu. Ten nám nabídne jednotlivé disky k obnově. V tomto případě je na výběr jen jedna položka. Vidíme cestu k ní a její celkovou velikost.
Nyní můžeme pokračovat stiskem klávesy Enter. Program se dále ptá, jaký systém rozdělení disků karta používá.
Pokud se jedná o klasickou paměťovou kartu, zřejmě zvolíte možnost Intel
. Pokud byste měli uložený už konkrétní oddíl, třeba /dev/sda1
, zvolte None
. Pozor! I pokud máte na kartě jen jeden oddíl, obsahuje karta tabulku oddílů.
Následuje nalezení jednotlivých oddílů a vy máte možnost jeden z nich zvolit. V mém případě byl samozřejmě oddíl jen jeden.
Protože se v mém případě jednalo o skutečně hodně poškozenou kartu, program nezjistil, jaký souborový systém obsahuje. Proto se ještě dotázal, zda náhodou neobsahuje Ext2/3. Odpověděl jsem, že ne, protože na kartě byl původně FAT.
Poslední otázka směřuje na použitý adresář. Stačí stisknout Y a program začne svou činnost v aktuálním adresáři. V něm vytvoří podadresář recup_dir
, do kterého bude ukládat soubory. Podle autorů nedochází k zásahům do originálních dat.
Výsledek? Vynikající!
Práce trvají v závislosti na velikosti obrazu i několik minut a aplikace sama vypisuje, jak dlouho pracuje, jak dlouho přibližně ještě pracovat bude a kolik souborů už obnovila.
Použil jsem relativně malý (16 MB) testovací souborový systém s FAT, na který jsem nejprve nahrál 71 fotografií a pak nechal přepsat prvních několik kilobajtů náhodnými daty.
Program pracoval zcela bezchybně a obnovil všechny soubory. Kontrola MD5 součtů pak ukázala, že jsou všechny naprosto kompletní a ve zcela původním stavu. Z tohoto hlediska tedy photorec dostává jedničku.
Samozřejmě nedošlo k obnovení názvů souborů, které jsou součástí poškozeného souborového systému. Photorec tedy jednotlivé soubory pojmenuje čísly a dokonce jim přiřadí správnou příponu.
Závěrem
Výsledek byl v tomto případě stoprocentní, ale u konkrétních obnov samozřejmě záleží, co přesně bylo zasaženo. V každém případě máte šanci získat zpět alespoň podstatnou část dat, o která byste jinak přišli úplně. Přijdete tak o část svých šedivých vlasů a ještě budete mít veselou historku při prohlížení fotografií z dovolené.