ddrescue: bitová kopie umírajícího disku, mapfile a proč se nesmí začít od začátku

Odpověď hned: Z disku, který hlásí chyby čtení, se nekopírují soubory a nepouští se na něj obyčejné dd — obojí čte sekvenčně a při každé chybě se zasekne přesně tam, kde disk trpí nejvíc. GNU ddrescue postupuje obráceně: nejdřív velkými bloky posbírá vše, co jde přečíst rychle, vadné a pomalé oblasti přeskočí a vrací se k nim až nakonec po jednotlivých sektorech. Stav práce si vede v mapfile, takže po přerušení naváže, kde skončil, místo aby disk projížděl znovu od nuly. Platí to jen pro disk s vadnými sektory: disk, který cvaká, mizí ze systému nebo s každým průchodem přidává chyby, ddrescue dorazí — ten patří do laboratoře s hardwarovým imagerem.

Obecný postup pro poškozený HDD (vypnout, neformátovat, neopravovat) máme v článku Jak dostat data z poškozeného HDD. Tenhle text je jeho technický doplněk pro čtenáře s Linuxem po ruce: co přesně ddrescue s diskem dělá, proč mu pořadí čtení prodlužuje život a kde je hranice, za kterou je každý další příkaz škoda. Tvrzení o chování programu jsou ověřená proti manuálu GNU ddrescue verze 1.30 z 1. ledna 2026.

Proč se z vadného disku nekopírují soubory ani nepouští dd

Kopírování přes průzkumník nebo cp nechává pořadí čtení na souborovém systému: skáče po plotně tam, kde leží další fragment souboru, na prvním nečitelném sektoru se zasekne, systém čtení mnohokrát opakuje a vy nevíte, kolik z disku už máte. Každý pokus je práce hlav přesně na místě, které disk zvládá nejhůř.

dd je na tom jinak, ale ne lépe. Manuál ddrescue to říká bez obalu: dd čte sekvenčně, a pokud jsou chyby na začátku disku, může ho opotřebovat, aniž by cokoli zachránilo. Programy, které při chybě přepnou na malé bloky a zůstanou v chybové oblasti, jsou podle manuálu ještě horší — tráví nejvíc času tam, kde se poškozuje povrch, hlavy i mechanika.

ddrescue s dd nesdílí kód, jen účel. Jeho princip: dobré části nejdřív, čtení uvnitř vadných nebo pomalých oblastí odložit. Verze před 1.19 používaly strategii „rozděl a panuj”, která znamenala hodně pohybu hlav; novější verze ho záměrně minimalizují, protože každý přejezd nad poškozeným místem disk ubírá. A dvě vlastnosti, na kterých stojí použitelnost výsledku: na místa vadných sektorů ddrescue nic nezapisuje (v nově vytvořeném souboru zůstanou nuly) a výstup nezkracuje — každé další spuštění nad stejným obrazem jen doplňuje mezery a nikdy nemaže, co už bylo zachráněno.

Pět fází ddrescue: co dělá a proč v tomhle pořadí

Aktuální verze pracuje v pěti fázích (starší popisy, včetně našeho článku o vadných sektorech, mluví o dvou — zjednodušení). Sektory postupně dostávají stavy non-tried → non-trimmed → non-scraped → bad-sector, dokud nejsou přečteny a označeny jako hotové.

FázeCo děláProč právě takhle
1. Copying (až 4 průchody)Čte nezkoušené oblasti velkými bloky; při chybě nebo pomalém čtení skočí dál, směr po každém průchodu obrátí. Průchody 3 a 4 se vracejí k oblastem přeskočeným pro pomalost.Rychle vymezit velké vady, sebrat nejslibnější data první a připravit výchozí body pro další fáze.
2. TrimmingPo sektorech čte od okrajů neúspěšných bloků dovnitř, dokud nenarazí na vadný sektor.Okraje vad mají vysokou šanci na čitelná data; manuál nedoporučuje fázi vypínat.
3. SweepingBez přeskakování projde oblasti, které copying vynechal kvůli chybám.U dobře ohraničených vad má malou šanci, proto běží až po trimmingu. -N ji vypne (disk s mrtvou hlavou).
4. ScrapingSektor po sektoru seškrabává zbytek.Nejpomalejší a pro disk nejtěžší práce jde nakonec; -n ji přeskočí.
5. RetryingZnovu zkouší vadné sektory; počet průchodů udává -r, směr se střídá.ddrescue neumí poznat, zda je vadný sektor nenávratný, nebo se po pár pokusech přečte.

Detail důležitý pro šetření disku: bez -r zkouší ddrescue každý sektor nejvýš dvakrát — jednou v rámci velkého bloku (copying, sweeping), podruhé samostatně (trimming, scraping). Další pokusy přidává až retrying, jeden na průchod. Mlácení do jednoho sektoru nastane jen tehdy, když si ho sami vyžádáte.

Mapfile: proč se nesmí začít od začátku

Mapfile je textový soubor (do verze 1.20 se jmenoval logfile): hlavička s příkazem a časem, stavový řádek s aktuální pozicí, fází a číslem průchodu, a seznam bloků se stavem ? nezkoušený, * neořezaný, / neseškrábaný, - vadný sektor, + hotový. ddrescue ho ukládá průběžně — podle jeho velikosti každých 30 sekund až 5 minut (--mapfile-interval), při ukončení i při přerušení Ctrl-C — a vedle něj drží zálohu .bak.

Bez mapfile ddrescue neumí v záchraně pokračovat, jen ji začít znovu. To je jádro titulku: po každém přerušení, výpadku USB nebo restartu se disk čte znovu od nuly, hlavy znovu projíždějí už zachráněné oblasti a všechny přeskočené vady se hledají podruhé. Manuál k tomu dodává: pokaždé, když se fyzicky poškozený disk roztočí a ještě něco vydá, může to být naposledy. Se stavovým řádkem naopak ddrescue naváže uvnitř rozdělané fáze — neopakuje ani první průchod copyingu.

Tři pravidla:

  • Mapfile patří na třetí médium — ne na zachraňovaný disk, ne na přepisovaný cíl; manuál žádá běžný soubor v existujícím adresáři. Dojde-li místo, ddrescue nabídne nouzové uložení do ddrescue.map v aktuálním nebo domovském adresáři.
  • Nikdy nepodstrkujte mapfile z jiné záchrany — ddrescue by věřil, že části disku už má.
  • Jeden mapfile snese víc příkazů nad různými oblastmi téhož disku: začátek disku, pak vybrané oblasti, nakonec zbytek. Nic hotového se nečte dvakrát.

Kam kopírovat: obraz .img, nebo disk na disk

Obraz do souboru je bezpečnější pro většinu případů. Cílový souborový systém musí unést soubor o velikosti celého disku (FAT32 končí na 4 GiB; NTFS, exFAT ani ext4 problém nemají) a mít tolik místa; -p ho předalokuje, aby záchrana neskončila v půlce. Z obrazu se dělá pracovní kopie — manuál radí první kopii držet jako master a opravovat až druhou.

Disk na disk má smysl, když obraz nemá kam se vejít nebo chcete zachráněný disk rovnou používat. Cíl musí být aspoň tak velký jako zdroj a cokoli na něm bude přepsáno; proto ddrescue u zařízení vyžaduje -f jako pojistku proti překlepu. Méně známé: v místech vadných sektorů zůstane na cíli to, co tam bylo předtím — u použitého disku cizí data. Chcete-li čistou kopii, cíl předem vynulujte.

Příkazy krok za krokem

Na Debianu a Ubuntu se balíček jmenuje gddrescue, protože jméno ddrescue měl dřív obsazené jiný program (dd_rescue Kurta Garloffa); spustitelný soubor je ddrescue. Bez instalace ho najdete na live médiu SystemRescue.

Nejdřív ověřte zdroj a cíl. Zachraňovaný disk nesmí být připojený — manuál výslovně říká ani pro čtení. Po restartu se /dev/sdX může přehodit; --ask před startem ukáže model, sériové číslo a velikost obou zařízení.

# ZDROJ a CÍL určujte podle sériového čísla, ne podle písmene; LOG-SEC = logický sektor
lsblk -o NAME,SIZE,MODEL,SERIAL,LOG-SEC
sudo smartctl -i /dev/sdX   # totéž z identifikace SMART (manuál doporučuje jako kontrolu)

Vlastní záchrana ve dvou průchodech, přesně jako v manuálu. ZDROJ je vadný disk /dev/sdX, CÍL obraz na zdravém disku. Záměna pořadí argumentů přepíše zdravý disk obsahem vadného — proto --ask.

# 1. průchod: rychle vše čitelné, bez scrapingu (-n), s potvrzením zařízení (--ask)
# ZDROJ /dev/sdX (vadný disk) -> CÍL /mnt/zdravy/disk.img, mapfile na zdravém disku
sudo ddrescue -n --ask /dev/sdX /mnt/zdravy/disk.img /mnt/zdravy/disk.map

# 2. průchod: přímý přístup mimo cache jádra (-d), tři průchody retryingu (-r3);
# čte se jen to, co mapfile eviduje jako nehotové
sudo ddrescue -d -r3 /dev/sdX /mnt/zdravy/disk.img /mnt/zdravy/disk.map

-d vyžaduje správnou velikost sektoru: výchozí je 512 bajtů, u disku se 4KiB logickým sektorem přidejte -b 4096, jinak může ddrescue skončit chybou nezarovnaného čtení. -c mění, kolik sektorů se čte najednou (výchozí 64 KiB); menší hodnoty pomáhají u pomalých disků.

# Disk na disk: ZDROJ /dev/sdX -> CÍL /dev/sdY, který bude celý PŘEPSÁN; -f je u zařízení nutné
sudo ddrescue -f -n --ask /dev/sdX /dev/sdY /root/disk.map
sudo ddrescue -f -d -r3 /dev/sdX /dev/sdY /root/disk.map

Když disk na určitém místě zamrzá, manuál radí nezůstávat tam: spustit znovu od bezpečné vzdálenosti za problémem (-i) a pak se -R vrátit pozpátku. Obrácený směr platí pro všechny fáze, velikost bloků nemění.

# Disk zamrzl kolem 12,3 GB: pokračovat kus za tím místem, zbytek dojet pozpátku (stejný ZDROJ, CÍL i mapfile)
sudo ddrescue -f -i 12350MB /dev/sdX /dev/sdY /root/disk.map
sudo ddrescue -f -R /dev/sdX /dev/sdY /root/disk.map

Brzdy pro běh bez dozoru: -T 5m skončí, když pět minut nepřijde úspěšné čtení, -e +50 po padesáti nových vadných oblastech, --max-slow-reads spolu s -a reaguje na propad rychlosti — hodnoty jsou příklad, nastavte je podle toho, kolik chyb disku dovolíte. --log-rates zapisuje rychlost každou sekundu a z grafu je vidět slabá zóna disku.

Na obrazovce sledujte rescued a pct rescued, bad areas a time since last successful read. Odhad zbývajícího času je podle manuálu nepřesný z principu: na konci prvního průchodu ukáže sekundy, pak vyroste na hodiny nebo dny. Dobré části jdou rychle, zbytek dlouho.

Z obrazu ven: připojit jen pro čtení

# Obraz celého disku přes loop zařízení: --read-only brání zápisu, --partscan vytvoří /dev/loop0p1, p2 …
sudo losetup --find --show --read-only --partscan /mnt/zdravy/disk.img
sudo mount -o ro /dev/loop0p1 /mnt/obraz

Obraz jednoho oddílu stačí připojit přímo: mount -o loop,ro oddil.img /mnt/obraz. Když se souborový systém nepřipojí, opravujte ho na pracovní kopii obrazu (e2fsck, ntfsfix, chkdsk nad kopií ve Windows), nikdy na originálu. Tabulku oddílů řeší TestDisk, ztracenou strukturu složek PhotoRec — oba nad obrazem. ddrescuelog -l- -b4096 oddil.map vypíše čísla bloků, které se nepovedlo přečíst (velikost bloku podle souborového systému); u ext4 je e2fsck -L načte jako seznam vadných bloků. Rozložení vad graficky ukáže ddrescueview, prohlížeč mapfile pro Linux i Windows.

Kdy ddrescue nepomůže a škodí

ddrescue je nástroj na disk s vadnými sektory, ne s vadnými hlavami. Neumí vypnout vadnou hlavu, neřídí napájení, nepotlačí vlastní opakované pokusy firmwaru disku ani jeho údržbu na pozadí a čte přes běžný SATA nebo USB řadič s jeho časovými limity. Hardwarový imager, se kterým pracuje laboratoř (třída DeepSpar Disk Imager nebo PC-3000), tohle umí: limit na čtení sektoru v milisekundách, při zaseknutí odpojení a znovuzapnutí napájení zdrojového disku bez restartu počítače, mapu hlav a čtení nejdřív jen ze stabilních, servisní příkazy obcházející firmware. U disku se slábnoucí hlavou, poškozeným firmwarem nebo servisní oblastí ddrescue podle Rossmann Group selhání urychluje, protože nutí degradující hlavy přejíždět každou stopu.

Příznakddrescue domaLaboratoř
SMART hlásí pár pending nebo reallocated sektorů, disk čte plynule, občas chybaAno — dva průchody podle postupu výše, dál pracujte z obrazu.Není potřeba, dokud obraz vzniká.
Disk cvaká, pípá, roztočí se a zastaví, hlásí nulovou kapacituNe. Vypnout a nezapínat; každý start posouvá hlavy po plotně. Viz disk cvaká a spadené hlavy.Ano — mechanika, čistý box, imager.
Rychlost padá k nule, bad areas rostou s každým průchodem, time since last successful read se prodlužujePřestat. Hlavy degradují, každá minuta ubírá; nepřidávat -r.Ano — limity v milisekundách, mapa hlav.
Reallocated a pending během kopírování skokově rostouPřestat a nechat disk stát. Význam hodnot v článku o SMART.Ano.
Disk mizí z /dev, potřebuje odpojit a zapojitManuál má postup pro jednorázový výpadek (-A, -O); opakované mizení je hranice.Ano — imager řídí napájení.
Externí WD nebo Seagate 2,5” s USB můstkem na desce diskuPřes funkční můstek ano; disk z boxu nevyndávat, můstek šifruje. Viz WD a Seagate.Ano, i s původní deskou můstku.
SMR disk s rozpadlým překladem, poškozený firmwareNe — chyba není v sektorech. Viz CMR vs. SMR.Ano — práce s firmwarem.
SSD bez odezvy nebo s nulovou kapacitouNe; ddrescue je nezávislý na rozhraní, ale závada je v řadiči. Viz záchrana dat z SSD.Ano.

Co nedělat

  • chkdsk, fsck ani „oprava jednotky” na originálu. Manuál: nikdy neopravujte souborový systém na disku s I/O chybami, přijdete o další data. Opravy patří na kopii obrazu — podrobně v článku o CHKDSK.
  • Diagnostické a opravné utility výrobce. Zápisové testy, „oprava” sektorů nebo mazací příkazy u SSD do disku zapisují.
  • Opakované restarty a přepojování. Každé roztočení disku s vadou je pohyb hlav navíc a podle manuálu může být poslední. Jeden běh s mapfile, ne deset pokusů „jestli naskočí”.
  • Mrazák. Přinese kondenzaci na plotně a nic neopraví.
  • Otevírání disku. Mimo čistý box znamená prach na plotně — viz mikrovýbrusy plotny.
  • Obnovovací programy rovnou nad vadným diskem. Hodiny čtení z umírajícího média, často se zápisem výsledků na tentýž disk. Nejdřív obraz, pak obnova nad obrazem.
  • ddrescue bez mapfile, nad připojeným oddílem nebo pod Cygwinem. Manuál varuje před všemi třemi: první ničí možnost navázat, druhé dá nepoužitelnou kopii, třetí hlásí matoucí chyby oprávnění.

Často se ptáte

Jde ddrescue spustit ve Windows?

Prakticky ne. Manuál doporučuje POSIXový systém a u Cygwinu popisuje chyby „Permission denied”, ze kterých ddrescue nepozná, co selhalo. Nabootujte live Linux — SystemRescue má ddrescue i TestDisk — a vadný disk připojte až do něj.

Jak dlouho bitová kopie trvá?

Dobré části jdou rychlostí disku, zbytek podle počtu vad; manuál počítá s tím, že obtížná záchrana může trvat dny. Odhad zbývajícího času je nespolehlivý z principu, protože po rychlém prvním průchodu přijdou pomalé fáze po sektorech. Každý průchod retryingu navíc stojí disk víc než předchozí.

Co znamená, že ddrescue skončil s nenulovým „bad areas”?

Část sektorů zůstala nepřečtená. V novém obrazu jsou tam nuly, v mapfile jsou přesně zapsané; ddrescuelog z něj vypíše čísla bloků a vy zjistíte, které soubory jsou zasažené. Zvýšit -r má smysl jen u disku, který během kopírování nezhoršoval stav.

Můžu záchranu přerušit a pokračovat další den?

Ano, přesně na to mapfile je. Ctrl-C ho aktualizuje, stejný příkaz příště naváže uvnitř rozdělané fáze. Po restartu ověřte přes --ask, že se /dev/sdX nepřehodilo, a částečně zkopírovaný cíl nenechte žádný systém „opravit”, než záchranu dokončíte.

Hodí se ddrescue i na disky z RAID nebo NAS?

Ano — na každý člen zvlášť, každý do vlastního obrazu s vlastním mapfile; pole se skládá až z obrazů, nikdy rebuildem na vadných discích. Proč rebuild degradované pole dorazí, popisuje článek o RAID.

Pokud první průchod ukáže cvakání, desítky procent nečitelných dat nebo rychlost padající k nule, nechte disk stát a ozvěte se: v brněnské laboratoři ho posoudíme a řekneme, jestli má smysl pokračovat hardwarovým imagerem. Podrobnosti k záchraně dat z HDD, kontakt, telefon +420 775 556 063 nebo e-mail zachranadat@ithope.cz. Mapfile a obraz, které už máte, vezměte s sebou — ušetří další čtení z disku.

Zdroje