Záchrana dat z poškozeného flask disku
Poškozený souborový systém a následná ztráta dat jsou noční můrou mnoha uživatelů. Situace naštěstí v mnoha případech je řešitelná. Pomůže nám několik open source nástrojů.
Dostal se ke mně poškozený USB flash disk se zoufalou prosbou o záchránu dat na něm.
Jak v takovém případě postupovat?
Disk jsem nejdřív zkusil připojit a zobrazit. Mezi připojenými zařízeními se ale neukázal a po vypsání dmesg bylo jasno proč:
[96376.653503] blk_update_request: I/O error, dev sdb, sector 7807 [96376.653508] Buffer I/O error on dev sdb1, logical block 7744, async page read
Elektronika disku je tedy v pořádku, ale chip obsahuje vadné sektory.
Nejlepším postupem je v takovém případě obsah celého disku zkopírovat přes dd na disk počítače a dál pracovat tam. dd si ale neporadí s IO chybami, a proto je lepší použit ddrescue:
ddrescue /dev/sdb1 ~/broken-usb.img ~/broken-usb.log
Po několika hodinách (a několika opakovaných spuštěních) bylo konečně hotovo (zkopírováno 99,99%).
Výsledný obraz jsem zkusil opravit přes fsck:
# dosfsck -a -t -w ./broken-usb.img fsck.fat 4.0 (2016-05-06) Logical sector size (44880 bytes) is not a multiple of the physical sector size.
Ten si ale s obrazem nedokázal poradit, možná kvůli pokaženému superblocku?
Po chvíli hledání jsem narazil na nástroj TestDisk/PhotoRec, který si poradí téměř s čímkoliv.
PhotoRec hledá různé soubory přímo binárně podle obsahu, nehledí na souborové systémy. Dokáže najít a obnovit obrázky, dokumenty, videa a archivy.
TestDisk se zase snažit obnovit poškozené a smazané oddíly a poškozené a smazané soubory na nich.
Záchrana dat je pak díky nim jen otázkou pár kliknutí:
photorec broken-usb.img testdisk broken-usb.img