ddrescue

ddrescue

ddrescue je program na kopírování dat. Jeho výhodou je, že je optimalizovaný na čtení dat z poškozených nebo jinak nečitelných médií, u kterých ostatní nástroje oznámí chybu a končí.

Instalace

Spuštění

Program se spouští z terminálu např. pomocí příkazu

sudo ddrescue /dev/sda1 sda1.img sda1.log

pokud chci kopírovat oddíl /dev/sda1 do jeho obrazu (souboru) sda1.img, průběžné výsledky se ukládají do pomocného souboru (logu) sda1.log.

Jak to funguje

Pokud zjistíme, že je datové médium poškozené, je prvním krokem pro záchranu pokus získat co nejvíce původních dat. Klasické způsoby kopírování zde obvykle nefungují, protože pokud se narazí na chybu, dojde k ukončení kopírování, nebo nekonečným pokusům číst z poškozeného místa. V takovém případě můžeme získat jen zlomek dat, nebo přetěžováním média situaci ještě zhoršit.

ddrescue je nastaveno tak, že v prvním běhu (pass) zkopíruje nejdřív data, která jsou lehce dostupná, a pokud narazí na chybu, zaznamená ji do logu, a daný úsek velkým obloukem přeskočí. Vynechanou část při dalších bězích postupně dělí na menší a menší úseky a snaží se tak zachránit co se dá.

Důležité zásady

  • nikdy neukládejte obraz a logy na poškozený disk, oddíl apod.
  • zdrojový i cílový disk před kopírováním vždy odpojte
  • v příkazu vždy uvádějte .log soubor - uložené informace podstatně zrychlují běh programu a odstraňují zbytečné namáhání disku
  • pokud se snažíte zachraňovat data, použijte příkaz ddrescue jako první a další pokusy již provádějte na vytvořené kopii, ne na poškozeném disku

Příklady

sudo ddrescue -n /dev/sda sda.img sda.log
sudo ddrescue -r3 /dev/sda sda.img sda.log

Poškozen je disk označen jako /dev/sda. Kopie disku uložená jako image (obraz) je v aktuálním adresáři, který by měl být na jiném disku než sda.

První příkaz čte z disku ve velkých blocích a nevrací se na místa, kde narazil na problémy (volba -n - no-trimming). Výsledný obraz sda.img je stejně velký jako původní disk - vynechaná místa jsou vyplněna nulami.

Druhý příkaz přečte záznam prvního běhu uložený v sda.log a soustředí se jen na nezkopírované části. Ty rozděluje na menší a menší bloky až narazí na hardwarový strop (sektor, obvykle 512 bytů). V případě chyby zkouší číst z bloku maximálně 3x (volba -r3).

Výsledný obraz je možné archivovat, použít jako zálohu, opravit pomocí dalších nástrojů. Bližší informace najdete na Záchrana dat.

Kopírovat je možné i přímo na jiný disk odpovídající velikosti (zde /dev/sdb), případně oddíl na jiný oddíl, oddíl do souboru atd.

sudo ddrescue -f -n /dev/sda /dev/sdb sda.log
sudo ddrescue -f -r3 /dev/sda /dev/sdb sda.log
ddrescue -b2048 -r -1 /dev/cdrom backup.iso cd.log

Uloží obraz disku z poškozeného CD (nelze použít na Audio CD!). Velikost sektoru 2048 (typická pro CD). Zkouší číst poškozené sektory donekonečna (volba -r -1), program se ukončuje stisknutím Ctrl - c. Výsledný obraz je možné otevřít kliknutím v Nautilu nebo vypálit na nové CD.

Pokus o záchranu dat z poškozeného CD. V prvním běhu vynecháno 165kB dat (errsize). V druhém běhu už jen 31kB. Úměrně tomu se zvedl počet úspěšně zkopírovaných bytů (rescued) z 184 242 na 184 377.

arrange@arrange-desktop:~/tmp$ ddrescue -n -b2048 /dev/cdrom backup.iso b.log


Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:   184242 kB,  errsize:    165 kB,  current rate:    36864 B/s
   ipos:     1226 kB,   errors:       4,    average rate:     856 kB/s
   opos:     1226 kB,     time from last successful read:       0 s
Finished
arrange@arrange-desktop:~/tmp$ ddrescue -b2048 /dev/cdrom backup.iso b.log


Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   184242 kB,  errsize:    165 kB,  errors:       4
Current status
rescued:   184377 kB,  errsize:   30720 B,  current rate:    45056 B/s
   ipos:   184403 kB,   errors:       8,    average rate:    12288 B/s
   opos:   184403 kB,     time from last successful read:       0 s
Finished

Vzniklý soubor logu b.log:

# Rescue Logfile. Created by GNU ddrescue version 1.11
# current_pos  current_status
0x0AFDD000     +
#      pos        size  status
0x00000000  0x0012B000  +
0x0012B000  0x00001000  -
0x0012C000  0x00D2E000  +
0x00E5A000  0x00001000  -
0x00E5B000  0x008C9000  +
0x01724000  0x00002000  -
0x01726000  0x098B6000  +
0x0AFDC000  0x00001800  -

První sloupec označuje pozici v souboru od začátku. Druhý velikost bloku. Třetí stav bloku (+ - vše zkopírováno; - - vynecháno).

Alternativy

Odstranění

Odeberte balík gddrescue.

Odkazy

  • Poslední úprava: 2019/02/25 18:21
  • autor: 127.0.0.1