Руководство для GNU ddrescue (версия 1.22-pre3, 29 июня 2016).

Это руководство - свободный документ: можете без ограничений копировать, распространять и изменять его.

This manual was translated by Joe Kickman.

1 Вступление

GNU ddrescue - это инструмент восстановления данных. Копирует данные из одного файла или блочного устройства (жёсткий диск, оптический диск, твёрдотельный носитель) на другое, а в случае ошибок чтения - сначала считывать хорошие части.

Основные действия в программе автоматизированы. То есть, от Вас не требуется ждать до появления ошибки, останавливать программу, перезапускать копирование с новой позиции и т.п.

При использовании возможности mapfile (журналирования), данные считываются очень эффективно (только требуемые участки). В любой момент можно прервать восстановление - и продолжить позже с того же или с любого другого места. Mapfile (журнал) - важная часть эффективности ddrescue. Рекомендуется обязательно использовать журнал (кроме случаев, когда Вы точно знаете, что сможете работать без него).

Ddrescue, найдя нечитаемый сектор на входе, не пишет нули на выходе, и без запроса не сбрасывает содержимое выходного файла. Поэтому, каждый раз, при запуске на одном и том же выходном файле, программа старается заполнить пропущенные места, без стирания того, что уже скопировано.

Автоматическое объединение резервных копий. Если есть две или больше повреждённые копии одного файла (на CD, DVD и т.п.) - и запустить ddrescue на них по очереди с указанием одного и того же выходного файла, то, возможно, удастся получить целостный файл, без ошибок - потому что вероятность повреждения одних и тех же участков во всех копиях очень низка (если ошибки размещены случайным образом). С использованием mapfile (журнала) программа будет считывать только не скопированные ранее блоки из второй и следующих копий источника.

Ddrescue рекомендует сжимать резервные копии с помощью lzip, потому что формат lzip предназначен для долговременного архивирования и предоставляет возможности восстановления данных, отлично дополняющие возможности ddrescue. (Ddrescue заполняет нечитаемые секторы данными из других копий, а lziprecover исправляет повреждённые секторы с помощью данных других копий). В случае повреждения файла или носителя, сочетание ddrescue + lziprecover является наилучшим для восстановления данных из множества повреждённых копий. См. пример-lziprecover.

Ddrescue требуется произвольный доступ для работы с носителем, поэтому работа с устройствами последовательного, а не произвольного доступа - невозможна.

Ddrescue может использовать для чтения источника прямой доступ, в обход кэша ядра - если Ваша система поддерживает такую возможность.

У ddrescue есть ещё «режим заполнения», в котором можно выборочно перезаписывать части выходного файла. Несколько интересных применений: стирание данных, выявление и пометка плохих участков, а в некоторых случаях, «восстановление» «плохих» секторов.

Одна из сильных сторон ddrescue - безразличие к интерфейсу передачи данных, поэтому программа может работать с любым носителем, который поддерживает Ваше ядро: P-ATA, S-ATA, SCSI, старые MFM-диски, дискеты, твёрдотельные носители, карты памяти (например SD).

2 Основные понятия

Блок
Любое количество данных. Описывается адресом начала и размером. Адрес начала - это минимальный адрес в блоке. Адрес конца блока - это адрес его начала + размер.
Кластер
Группа последовательных секторов, считываемых или записываемых за одну операцию.
Устройство
Часть аппаратуры, содержащая данные: жёсткие диски, оптические приводы, USB-носители. /dev/hda, /dev/sdb - это имена устройств.
Файл
Файлы - поименованные единицы данных, хранимые Вашей операционной системой, с возможностью считывания по известному имени файла. Доступ к устройствам и разделам происходит по ассоциированным с ними файловым именам.
Раздел
Каждая часть, на которые распределён объём устройства. Обычно раздел содержит файловую систему. /dev/hda1, /dev/sdb3 - имена разделов.
Восстановимые форматы носителей
Поскольку ddrescue использует стандартные функции чтения данных с устройства, то это возможно только для тех форматов устройств, которые можно монтировать. CD-ROM и DVD-диски считывать можно, а AudioCD нет. "VideoCD" - возможно. http://ru.wikipedia.org/wiki/Video_CD
Рабочая область
Блок или набор блоков, над которыми работает программа (выполняет их копирование, перечисление и т.п. действия). Можно задать с помощью параметров '--input-position', '--size' и '--domain-mapfile' в любых сочетаниях. По умолчанию используется область, равная полному размеру источника или файла журнала (mapfile). Если ddrescue не может определить размер источника, то рабочая область по умолчанию принимает максимально возможный размер блока (2^63 -1 байт, или 8 эксабайт минус 1 байт).

Ddrescue никогда не станет читать данные за пределами заданной рабочей области, кроме запросов на прямой доступ к диску, не выровненных по границам секторов (см. Прямой доступ). А если станет - сообщайте об ошибке.

Объём скопированных данных, число ошибок и т.п. сведения, отображаемые программой, могут меняться, даже стать = 0, если Вы ограничили заданную рабочую область. Спокойствие! Ничего не пропало, просто часть сведений выходит за пределы заданной рабочей области. На полной увидите всё.

Сектор
Аппаратный блок данных. Минимально доступный объём данных при доступе к устройству.

3 Безопасное использование ddrescue

Ddrescue является одним из мощнейших инструментов. Чтобы применять её безопасно, следует понимать, что она делает, и ещё понимать кое-что о машинах, с которыми она работает.

Никогда не пытайтесь копировать раздел, смонтированный в режиме чтения-записи, т.к. результат может оказаться безполезным. Наилучший вариант копирования устройства или раздела - когда они не примонтированы даже в режиме «только для чтения».

Никогда не пытайтесь восстанавливать файловую систему на устройстве с ошибками ввода-вывода, т.к. это может привести к ещё бОльшим потерям.

Если в качестве назначения используется целое устройство или любой его раздел, то там будут перезаписаны все данные.

Некоторые системы могут менять имена устройств при перезагрузках (например, системы на основе udev). После перезагрузки системы или обновления списка устройств хранения данных проверяйте имена устройств перед каждым новым запуском ddrescue.

Если копирование прервано, то перед перезагрузкой следует скрыть от ОС частично скопированные разделы, чтобы ОС не смогла их увидеть, примонтировать и автоматически применить «исправления».

4 Алгоритм

GNU ddrescue не является производной от dd, и ни в какой степени не связана с ней - кроме, разве что, возможности копировать данные с одного устройства на другое. Ключевое отличие в том, что ddrescue использует разветвлённый алгоритм для копирования с повреждённых носителей, причиняя им как можно меньше вреда.

Ddrescue эффективно обрабатывает состояние текущего процесса копирования и старается сначала считывать хорошие части, откладывая чтение областей с задержками и ошибками. Это увеличивает объём данных, которые в итоге можно скопировать с повреждённого устройства.

Стандартную утилиту dd можно использовать для копирования данных с повреждённого носителя, но она читает данные последовательно, что может привести к износу/повреждению носителя и вообще не дать результата, если ошибки находятся в самом начале.

Другие программы считывают данные последовательно, но при ошибках чтения уменьшают размеры читаемых блоков. Это не есть хорошо, так как приводит к тратам времени на чтение областей с ошибками и задержками, к повреждению поверхности, головок и механики, вместо того, чтобы как можно скорее пропустить эти участки. Такое поведение снижает шансы на успешное копирование данных, оставшихся в хороших областях.

Алгоритм работы ddrescue следующий (можно прервать процесс в любой момент, нажав CTRL+C, но имейте в виду, что повреждённый носитель может надолго задержать отмену и выход, пока ядро не сообщит об ошибке):

1) (Необязательно) считывает mapfile (журнал), описывающий состояние остановленного процесса или multi-part rescue. Если журнал не указан, пуст или отсутствует, вся рабочая область будет помечена как непроверенная.

2) (Первая фаза; Копирование). Чтение всех непроверенных областей исходного файла, пометка несчитанных из-за ошибок блоков как "non-trimmed" и их пропуск. Пропуск медленных областей. (Пропущенные области будут прочитаны позже, в 4 дополнительных прохода (до зачистки), меняя направление чтения каждого прохода, до конца рабочей области.)

Второй проход разграничивает блоки, пропущенные первым проходом. Третий и четвёртый проходы читают блоки, пропущенные из-за медленного чтения (если таковые были) в том же направлении, в котором блоки были пропущены. Эти три прохода пропускают остаток блока при первой же ошибке. Последний проход - зачистка, проходит без пропусков. Цель многопроходности - сначала выделить большие ошибочные зоны для считывания в первую очередь хороших, ограничить размер журнала и предоставить адреса точек для уточнения границ ошибок (trimming).

Только непроверенные области считываются большими блоками. Trimming (уточнение границ), scraping (вычитывание) и retrying (перечитывание) выполняются по одному сектору. Каждый сектор считывается максимум 2 раза; сначала в этой фазе, как часть большого блока, а повторно в одной из следующих фаз - чтение одного сектора.

3) (Вторая фаза; Уточнение границ) Происходит в один проход. Для каждого необрезанного блока читает по одному сектору от начала вперёд до первой ошибки (bad sector). Затем читает по одному сектору обратно от конца блока до нахождения ошибки (bad sector). При нахождении плохих секторов помечает их как плохие, а всю область между ними как невычитанную, не пытаясь её читать. Если на границе уже находится bad sector, то участок признаётся уже уточнённым, далее не уточняется.

4) (Третья фаза; Вычитывание) Вычитывает все данные, не прочитанные при копировании или уточнении. Происходит в один проход. Каждый невычитанный блок читается вперёд, по одному сектору. Все найденные ошибки будут помечены как плохие сектора (bad sector).

5) (Чётвёртая фаза; Повторные попытки) Необязательно пробует заново считывать плохие секторы до достижения заданного числа повторов чтения. Направление чтения меняется при каждом следующем проходе. Каждый плохой сектор программа пробует читать только один раз за проход. Ddrescue не знает, сектор необратимо испорчен, или же он может быть случайно считан с нескольких попыток.

6) Необязательно ведёт журнал (mapfile) для использования позже.

Общий размер ошибок (errsize) - это сумма размеров всех блоков с плохими секторами. Увеличивается в фазах уточнения границ и вычитывания, и может уменьшаться в фазе повторных попыток. Не уточнённые и не вычитанные блоки ошибками не считаются. Ddrescue перечитывает блоки с ошибками, и успешно считанные данные могут разделить ошибочные блоки на меньшие части, уменьшая общий размер ошибок, но увеличивая их число.

«Оставшееся время» вычисляется по средней за последние 30 секунд скорости и не учитывает, что некоторые участки могут быть исключены из работы (например, параметром ‘--no-trim’), а некоторые области, возможно, невосстановимы. Поэтому оценка может быть очень неточной, значительно меняться во время работы и быть больше нуля в конце работы. В частности, может показать несколько секунд в начале работы и вырасти до часов и дней в следующих проходах. Такова природа ddrescue; хорошие части обычно считываются быстро, а остаток может занять долгое время.

Журнал периодически сохраняется на диске, сохраняется он и при завершении или прерывании работы ddrescue. Поэтому при сбоях можно продолжить копирование, считав минимум заново. По умолчанию, интервал сохранения меняется от 30 секунд до 5 минут в зависимости от размера файла журнала (большие сохраняются реже), но может быть задан прямо параметром '--mapfile-interval'.

Также, один и тот же журнал можно использовать для нескольких команд копирования разных участков с одного источника и для многих попыток копирования с разных участков. Смотрите вот этот пример:

Сначала прочитать наиболее важную область диска.
     ddrescue -i0 -s50MiB /dev/hdc hdimage mapfile
     ddrescue -i0 -s1MiB -d -r3 /dev/hdc hdimage mapfile
Затем прочитать некоторые ключевые участки диска.
     ddrescue -i30GiB -s10GiB /dev/hdc hdimage mapfile
     ddrescue -i230GiB -s5GiB /dev/hdc hdimage mapfile
И прочитать остальное (не читает заново всё то, что уже прочитано).
     ddrescue /dev/hdc hdimage mapfile
     ddrescue -d -r3 /dev/hdc hdimage mapfile

5 Запуск ddrescue

Формат запуска программы следующий:

ddrescue [параметры] INFILE OUTFILE [MAPFILE]

INFILE и OUTFILE могут быть файлами, устройствами или разделами. MAPFILE - это обычный файл, который должен находиться в существующей директории. Если файла нет, программа создаст его.

Всегда используйте MAPFILE (журнал копирования), кроме тех случаев, когда он Вам ТОЧНО не понадобится. Без него ddrescue не сможет продолжать прерванное / завершённое частично копирование, но сможет только лишь начать его заново.

ddrescue поддерживает работу со следующими параметрами:

'-h'
'--help' справка
Выдаёт информативное сообщение с описанием параметров - и выходит.
'-V'
'--version' версия
Выдаёт на стандартный вывод номер версии ddrescue - и выходит.
'-a BYTES'
'--min-read-rate=BYTES' минимальная скорость чтения=БАЙТ
Минимальная скорость чтения хороших непроверенных участков, в байтах в секунду. При скорости ниже заданной ddrescue пропустит участок (размер пропуска зависит от историй скорости чтения и ошибок. Пропущенные участки читаются следующими проходами (перед TRIM).

Если BYTES = 0 (авто), минимальная скорость чтения пересчитывается для каждого блока как (средняя_скорость / 10). Значения за пределами возможностей устройства игнорируются.

'-A'
'--try-again' попробовать заново
Перед началом чтения пометить все неуточнённые и невычитанные (non-trimmed and non-scraped) блоки в заданной рабочей области как неопробованные (non-tried). Может помочь, если носитель перестал отвечать («завис» или отключился) и ddrescue после этого события помечает все непроверенные блоки как ошибочные. Если одновременно задан параметр '--retrim' - то пометить и «плохие» блоки в рабочей области как неопробованные.
'-b BYTES'
'--sector-size=BYTES' размер сектора=БАЙТ
Размер сектора (физического блока) для входного устройства (обычно 512 байт для жёстких дисков и 3,5" дискет, 1024 для 5,25" дискет, 2048 для оптических дисков, 4096 для Advanced Format HDD). По умолчанию = 512.
'-B'
'--binary-prefixes' двоичные приставки
Показать префиксы единиц измерения двоичные (степени от 1024).
По умолчанию используются префиксы СИ (степени от 1000). Ниже списка всех параметров приведена таблица.
'-c SECTORS'
'--cluster-size=SECTORS' размер блока=СЕКТОРОВ
Число секторов, копируемых одним запросом. По умолчанию = (65536 байт / размер_сектора). Для медленных устройств пробуйте меньшие значения. Для дискет удобно указать число секторов на дорожке (9 или 18).
'-C'
'--complete-only' только завершённые
Ограничить рабочую область списком блоков из журнала, не читать данные за пределами блоков, перечисленных в журнале. Это удобно для чтения с устройств неизвестного размера (как RAW-устройства), или когда устройство неверно сообщает размер, или для чтения из неполной копии. Может использоваться только после первой попытки считывания, возможно ограниченной параметром '--size', если ею создан полный файл журнала.
'-d'
'--idirect' прямой доступ для входного
Использовать прямой доступ к диску (см. Прямой доступ) для чтения из входного файла, минуя кэш ядра. (Открывает файл с флагом O_DIRECT). Чтобы сработало, нужно верно указать размер сектора. Поддерживается не всеми системами.

Если Ваша система не поддерживает прямой доступ к диску, ddrescue предупредит об этом. Если размер сектора указан неверно, то программа выдаст ошибку "unaligned read error" и выйдёт с кодом завершения = 1.

'-D'
'--odirect' прямой доступ для выходного
Использовать прямой доступ к диску для записи выходного файла, минуя кэш ядра. (Открывает файл с флагом O_DIRECT). Чтобы сработало, нужно верно указать размер сектора. Поддерживается не всеми системами.

Если Ваша система не поддерживает прямой доступ к диску, ddrescue предупредит об этом. Если размер сектора указан неверно, то программа выдаст ошибку записи, при этом не скопировав нисколько данных. В некоторых ОС есть ошибка, которая мешает им (верно или даже вообще) распознавать ошибки записи на некоторых устройствах, если не указан данный параметр.

'-e [+]N'
'--max-errors=[+]N' максимум ошибок=[+]ЧИСЛО
Максимально разрешённое число участков с ошибками, до выхода из программы. По умолчанию безконечно. Если перед параметром указан ‘+’, то счёт ошибок идёт только по данному запуску, без учёта ошибок, накопленных ранее в журнале (MAPFILE).
'-E BYTES'
'--max-error-rate=BYTES' максимальная скорость чтения с ошибками=БАЙТ
Максимальная разрешённая скорость чтения с ошибками, в байтах в секунду, после которой будет выход из программы. По умолчанию безконечна. Это отражает размер считанных с ошибками участков за период работы, поэтому копирование может завершиться из-за превышения значения данного параметра, даже если общий размер частей с ошибками чтения не меняется из-за того, что читаемые части отмечаются как non-trimmed или non-scraped, или уже помечены как ошибочные.
'-f'
'--force' принудительно
Принудительная перезапись выходного файла. Требуется для случаев, когда запись идёт не в файл, а в раздел или прямо на устройство. Этот параметр - предосторожность для защиты разделов от случайной перезаписи. Игнорируется для обычных выходных файлов.
'-F TYPES'
'--fill-mode=TYPES' режим заполнения=ТИПЫ
Заполняет в указанном выходном файле OUTFILE блоки по адресам, взятым из журнала, имеющие указанные типы TYPES - данными из файла INFILE. Типы TYPES содержат один или несколько кодов состояния, описанных в главе «Структура файла журнала» и возможное 'l' для записи номеров секторов. См. главу «Режим заполнения» для полного описания данного режима.
'-G'
'--generate-mode' режим создания журнала
Создаёт приблизительный файл журнала из входного файла INFILE и выходного файла OUTFILE, после копирования. Следует сохранять такое же смещение между '--input-position' и '--output-position', какое оно было при копировании. См. главу «Режим создания журнала» для полного описания данного режима.
'-H FILE'
'--test-mode=FILE' режим проверки=ФАЙЛ
Строит карту хороших (читаемых) и плохих (нечитаемых) блоков с использованием файла FILE и использует её для симуляции ошибок чтения входного файла INFILE. Блоки, помеченные в FILE как завершённые - будут считаны нормально, как обычно. Все другие типы блоков будут рассматриваться как ошибки чтения даже без попыток чтения их из исходного файла INFILE. Этот режим нужен для помощи в улучшении алгоритма работы ddrescue, и ещё полезен для проверки того, что ddrescue даёт ожидаемый результат в случае ошибок чтения. Используйте '-' в качестве файла FILE для чтения со стандартного ввода.
'-i BYTES'
'--input-position=BYTES' стартовый адрес=БАЙТ
Начальный адрес рабочей области для входного файла, в байтах. По умолчанию = 0. Это не точка, с которой ddrescue начинает копирование (например, при указании параметра '--reverse', ddrescue начнёт копировать с конца рабочей области). В режиме заполнения этот параметр касается позиции во входном файле изначального прохода копирования. См. "Режим заполнения".
'-I'
'--verify-input-size' проверить размер входного файла
Сравнить размер входного файла INFILE с размером, вычисленным по списку блоков из журнала MAPFILE - и выйти со статусом 1, если они различны. По умолчанию не включено, так как размер некоторых устройств не известен заранее, и ещё потому, что размер, полученный из журнала, может быть неполным, например, после частичного копирования.
'-J'
'--verify-on-error' перепроверить при ошибке
После каждой ошибки чтения снова читать последний удачно считанный сектор и сверяться, что его содержимое то же самое. Выход со статусом 2, если чтение не удалось или данные не совпали. Выход со статусом 1, если ошибка чтения происходит перед обнаружением хорошего сектора.

Этот параметр производит одно дополнительное чтение после каждой ошибки, быстрее изнашивая устройство. Используйте только для устройств, которые перестают отвечать или выдают мусорные данные после ошибок. Возможно, перед повторным запуском ddrescue придётся выключить и заново включить устройство.

'-K [INITIAL][,MAX]'
'--skip-size=[INITIAL][,MAX]' размер пропуска=[начальный][,максимум]
Устанавливает пределы для размера пропускаемого в фазе копирования участка. Следует указать хотя бы одно из значений INITIAL и MAX.

INITIAL - размер пропуска при первой ошибке или медленном чтении, в байтах, по умолчанию равно 64 KiB (65536). MAX - максимальный размер пропуска. Указанные значения будут округлены до кратных размеру сектора, вверх. Размер пропуска будет удвоен при каждой следующей ошибке или медленном чтении - до достижения значения MAX, а если MAX не указано, то либо до 1% размера исходного файла либо до 1 Гб (что меньше); будет восстановлен до INITIAL при успешном чтении блока. Допустимые значения - от 64 KiB до 1 GiB. Начальное значение 0 совсем отключит пропуск блоков.

Если у ddrescue проблемы с пропуском большой зоны с разрозненными ошибками или если на устройстве есть большие области с ошибками через повторяющиеся промежутки, этим параметром можно увеличить начальный размер пропуска. Наоборот, если ddrescue пропускает слишком много, оставляя большие непроверенные области после каждой ошибки (которые будут затем прочитаны в обратном направлении, обычно медленнее), можно уменьшить максимальный размер или совсем отменить пропускание.

'--skip-size' не зависит от '--cluster-size'. Размер пропускаемого участка вычисляется от конца нынешнего блока, прочитанного с ошибкой.

'-L'
'--loose-domain' несвязанная область
Разрешить неполный синтетический (созданный пользователем) файл описания рабочей области (domain mapfile) или test-mode mapfile (журнал тестового режима) и заполнить пропуски в списке непроверенными блоками. Блоки в файле журнала должны следовать строго по возрастанию адресов и не должны перекрываться, но не обязательно быть непрерывными. Этот параметр позволяет вносить быстрые правки в журнал без необходимости для обеспечения непрерывности потока блоков пересчитывать все затронутые правкой размеры.
'-m FILE'
'--domain-mapfile=FILE' файл рабочей области=ФАЙЛ
Ограничить рабочую область блоками, помеченными как завершённые в файле-карте FILE. Полезно для объединения частично скопированных образов или резервных копий, или если диск назначения вышел из строя при копировании. Используйте '-' как FILE для чтения со стандартного ввода.
'-M'
'--retrim' заново выполнить trim
Пометить в рабочей области все блоки с ошибками как non-trimmed перед началом работы. Эффект похож на '--retry-passes=1', но плохие секторы будут опробованы на чтение в другом порядке, что, возможно, позволит прочитать некоторые из них.
'-n'
'--no-scrape' без вычитывания
Пропустить фазу вычитывания. Помогает избежать больших затрат времени на считывание наиболее трудных частей исходного файла.
'-N'
'--no-trim' без уточнения границ
Пропустить фазу уточнения границ. Особенно полезно на первых этапах многопроходного копирования.
'-o BYTES'
'--output-position=BYTES' позиция в выходном файле=БАЙТ
Начальный адрес в выходном файле, в байтах, с которого будут записаны данные входного. По умолчанию равно '--input-position'. Данные до указанного адреса (если они есть) не будут затронуты, если не указано truncation (Иначе эти данные будут уничтожены).
'-O'
'--reopen-on-error' повторно открыть после ошибки
Закрыть файл-источник INFILE и открыть его повторно после каждой ошибки чтения, а если указан параметр '--min-read-rate', то в фазе копирования и после каждого медленного чтения. Используйте этот параметр, если после каждой ошибки или медленного участка скорость чтения остаётся низкой. Но учтите, что наиболее вероятно замедление намеренно выполнено ядром в попытке увеличить вероятность успешного чтения данных с устройства.
'-p'
'--preallocate' занять место
Заранее занять место на диске для выходного файла. Можно занять только для обычного файла. Если место зарезервировано, то копирование не завершится из-за недостатка места для записи. Если ddrescue не может определить занимаемый размер, можно его указать с помощью заданного подходящего набора параметров '--input-position', '--output-position', '--size' и '--domain-mapfile'.
'-P[LINES]'
'--data-preview[=LINES]' предпросмотр данных=СТРОК
Показать заданное число строк из последнего блока прочитанных данных в формате '16-байт hex + ASCII'. Допустимо указывать от 1 до 32 строк. Значение по умолчанию равно 3.
'-q'
'--quiet' тихо
Работать тихо. Не выводить никаких сообщений.
'-r N'
'--retry-passes=N' повторных проходов=ЧИСЛО
Выход после заданного числа повторов чтения. По умолчанию = 0. -1 означает работу без остановки. Каждый плохой сектор пробуется только один раз за каждый проход. Чтобы пробовать прочитать плохие секторы, помеченные предыдущим запуском, следует указать ненулевое значение.
'-R'
'--reverse' обратно
Меняет направление всех проходов (копирование, уточнение границ, вычитывание и повторное чтение). Каждый проход, который обычно идёт вперёд, пойдёт назад, и наоборот. '--reverse' не меняет размеры копируемых блоков, а меняет только порядок их чтения.
'-s BYTES'
'--size=BYTES' размер=БАЙТ
Максимальный размер рабочей области, в байтах. Ограничивает максимальный объём копируемых данных. Если ddrescue не может определить размер входного файла, можно задать его этим параметром.

Этот параметр не задаёт размер выходного файла. Например, следующая команда создаст выходной файл размером 300 байт, но запишет в него только последние 200 байт данных:

     ddrescue -i 100 -s 200 infile outfile mapfile
'-S'
'--sparse' разреженный
Использовать разреженную запись для выходного файла. При этом пустые блоки не пишутся на диск. В некоторых случаях помогает сэкономить много места на диске. Поддерживается не всеми системами. Разреженными могут быть только обычные (регулярные) файлы.
'-t'
'--truncate' урезать
Сбросить размер выходного файла до нуля перед записью в него. Работает только для регулярных файлов, но не для устройств и разделов.
'-T INTERVAL'
'--timeout=INTERVAL' время ожидания=ИНТЕРВАЛ
Максимальное разрешённое время после последнего успешного чтения, затем выход. По умолчанию безконечно. INTERVAL - это рациональное число (например, 1.5 или 1/2), за которым можно указать 's', 'm', 'h' or 'd', что будет означать соответственно секунд, минут, часов и дней. Единица измерения по умолчанию - секунды.
'-u'
'--unidirectional' однонаправленно
Запускать все проходы в одном направлении. По умолчанию вперёд, но при указании ещё и параметра '--reverse' - назад.
'-v'
'--verbose' подробно
Режим вывода подробных сведений. Дальнейшие -v (до 4) увеличивают объём подробностей.
'-w'
'--ignore-write-errors' игнорировать ошибки записи
Заставить режим заполнения игнорировать ошибки записи. Это удобно, чтобы предотвратить завершение работы ddescue при появлении новых ошибок во время затирания хороших секторов проблемного диска. Обычно в режиме заполнения запись в выходной файл идёт по 1 кластеру. С этим параметром, после первой ошибки записи остаток области будет заполнен посекторно, по 1 сектору.

Заметим, что в режиме копирования ошибки записи являются критическими и заставят либо повторить копирование, либо скопировать выходной файл в другое место (третий носитель) с использованием журнала в качестве указателя рабочей области (см. --domain-mapfile) и продолжать уже там.

'-x BYTES'
'--extend-outfile=BYTES' расширить выходной файл=БАЙТ
Увеличить размер выходного файла как минимум до указанного. Если размер уже равен указанному или больше него, то этот параметр ничего не делает. Используйте, чтобы гарантировать минимально необходимый размер выходного файла. Можно расширять только регулярные файлы.
'-X'
'--exit-on-error' выйти при ошибке
Выйти со статусом 1 при первой же ошибке чтения.

Похоже на '--timeout=0' (при котором программа ожидает обновления экрана статистики (как минимум, 1 секунду)), но и отличается. Если за 1 секунду был успешно прочитан хотя бы 1 сектор, ddrescue не завершит работу при указании '--timeout=0'.

Также похоже на '--max-errors=+0' (когда происходит выход при обнаружении новой области с ошибкой), но и отличается. Если области с ошибками чтения примыкают к уже существующим, то не будут созданы новые области с ошибками, а только лишь будут расширены имеющиеся, и '--max-errors=+0' не приведёт к завершению программы.

'-y'
'--synchronous' синхронно
Использовать синхронизацию записи для выходного файла (Выполнить вызов функции fsync после каждой записи). Может пригодиться, чтобы заставить устройство выполнить переназначение испорченных секторов.
'-Z BYTES'
'--max-read-rate=BYTES' максимальная скорость чтения=БАЙТ
Максимальная скорость чтения, байт в секунду. Если значение БАЙТ указано слишком маленьким, то скорость чтения будет округлена вверх до ближайшего целого числа кластеров в секунду. Удобно применять для ограничения полосы пропускания потока данных от ddrescue, например, при восстановлении с использованием сети.
'--ask' запрос
Запросить у пользователя подтверждение перед запуском копирования. Если первая буква ответа будет 'y', ddrescue начнёт копирование. Иначе завершится и выйдет со статусом 1.

При возможности получения таковых, ddrescue покажет модели и серийные номера для входного и выходного устройств. Показывает ещё размеры в байтах для соответствующих файлов или устройств.

'--cpass=RANGE' номера проходов=СПИСОК
Выбрать номера проходов для фазы копирования. Допустимы номера от 1 до 5. Для запуска только указанных проходов копирования, можно дополнительно указать '--no-trim' и '--no-scrape'. '--cpass=0' заставит совсем пропустить фазу копирования.

Примеры ЗапускаемыеСПИСКА проходы
1 1
1,2,3 1, 2, и 3
2-4 2, 3, и 4
1,3-5 1, 3, 4, и 5
1-3,5 1, 2, 3, и 5

'--exit-on-slow' выход при медленном чтении
Выйти со статусом 1 после первого же встреченного в фазе копирования медленного участка. Работает только при указании минимальной скорости чтения '--min-read-rate'.
'--log-rates=FILE' записывать скорость=ФАЙЛ
Каждую секунду записывать скорости чтения и размеры ошибок в указанный ФАЙЛ. Если файл существует, он будет перезаписан. Каждый раз при обновлении экрана статистики некоторые значения (время работы, адрес чтения, текущая и средняя скорость, число и размер ошибок) будут записаны в указанный ФАЙЛ в формате, удобном для программ графопостроения (наподобие gnuplot). Это позволит выполнить последующий анализ устройства и понять, есть ли на нём слабые участки (области, где скорость чтения сильно ниже средней).
'--log-reads=FILE' записывать операции чтения=ФАЙЛ
Записывать все операции чтения в ФАЙЛ. Если файл существует, он будет перезаписан. Каждая попытка чтения и её результат (позиция, размер блока, прочитанный размер, размер ошибок) пишутся в файл. (Записываемая позиция - это всегда начало пробуемого блока, даже при чтении реверсом).

Также пишется строка в начале каждой фазы (копирование, уточнение границ, вычитывание, повторное чтение). Также, ежесекундно пишется строка с отметкой времени (если чтение не заняло более секунды). Применять осторожно, потому что ФАЙЛ может очень быстро стать огромным! Используйте lzip для сжатия ФАЙЛа при необходимости его хранения или передачи.

'--mapfile-interval=[SAVE_INTERVAL][,SYNC_INTERVAL]' интервал для журнала=[интервал сохранения][,интервал записи на диск]
Изменить для ddrescue интервал сохранения файла журнала и записи на диск его содержимого из памяти (кэша). Следует указать хотя бы один из этих интервалов. При значении SAVE_INTERVAL =-1 ddrescue выбирает интервал автоматически (от 30 секунд до 5 минут, в зависимости от размера файла журнала). Значение SAVE_INTERVAL = 0 заставит сохранять журнал (mapfile) после каждой операции чтения (применять осторожно). SYNC_INTERVAL - это интервал между вызовами fsync (запись из кэша на диск). По умолчанию SYNC_INTERVAL = 5 минут. Минимальное значение для SYNC_INTERVAL составляет 5 секунд. Интервалы имеют такой же формат, как в параметре '--timeout' выше.
'--pause=INTERVAL' пауза=ПЕРИОД
Время ожидания между проходами. По умолчанию = 0. INTERVAL имеет такой же формат, как в параметре '--timeout' выше.

Числовые аргументы для параметров (адреса, размеры, скорости и т.п.) могут быть указаны в десятичном, шестнадцатиричном или восьмиричном виде (using the same syntax as integer constants in C++), и могут иметь множитель и необязательное 'B', означающее «байт». Множитель 's' может быть добавлен и к любому другому. Например, 'ks' обозначает килосекторы (1000 * sector_size), а 'Kis' означает кибисекторы (1024 * sector_size).

Таблица множителей (системы СИ и двоичных), для единиц измерения:

Prefix Value | Prefix Value
s sectors |
k kilobyte (10^3 = 1000) | Ki kibibyte (2^10 = 1024)
M megabyte (10^6) | Mi mebibyte (2^20)
G gigabyte (10^9) | Gi gibibyte (2^30)
T terabyte (10^12) | Ti tebibyte (2^40)
P petabyte (10^15) | Pi pebibyte (2^50)
E exabyte (10^18) | Ei exbibyte (2^60)
Z zettabyte (10^21) | Zi zebibyte (2^70)
Y yottabyte (10^24) | Yi yobibyte (2^80)

Статус/Код завершения:

0 при нормальном завершении,
1 для ошибок среды исполнения (файл не найден, неправильные флаги, ошибки ввода-вывода и т.п.),
2 при ошибке доступа к файлу-источнику (повреждён или неверен),
3 при внутренней ошибке целостности (bug), приведшей к панике и аварийному завершению ddrescue.

Если работа ddrescue прервана по сигналу ОС, то ddrescue обновит файл журнала - и завершит работу с указанием полученного кода сигнала.

6 Структура файла журнала

Структура файла журнала - не переведено - КРАТКО смысл:

# Комментарии - эти строки не значимы для программы, начинаются с "#"

Первая значимая строка:

адрес_текущего_блока состояние_работы номер_прохода

Коды состояний работы:

СимволЗначение
'?' копирование того, что ранее не пробовали читать
'*' уточнение границ блоков
'/' посекторное вычитывание внутри блоков, у которых начало и конец ограничены плохими секторами
'-' повторное чтение плохих секторов
'F' заполнение указанных блоков
'G' создание приблизительного файла журнала
'+' успешно завершённый блок

Строки журнала (кроме первой значимой) строятся так:

адрес_начала_блока длина_блока код_состояния

Коды состояний блоков:

СимволЗначение
'?' блок, который не пробовали читать (non-tried)
'*' непрочитанный из-за ошибки блок, границы не уточнены (non-trimmed)
'/' непрочитанный из-за ошибки блок, не вычитано читаемое (non-scraped)
'-' непрочитанный из-за ошибки блок, нечитаемые секторы (bad-sector(s))
'+' успешно скопированный блок

Пример файла журнала:

# Mapfile. Created by GNU ddrescue version 1.22-pre3
# Command line: ddrescue -d -c18 /dev/fd0 fdimage mapfile
# Start time: 2015-07-21 09:37:44
# Current time: 2015-07-21 09:38:19
# Copying non-tried blocks... Pass 1 (forwards)
# current_pos current_status current_pass
0x00120000 ? 1
# pos size status
0x00000000 0x00117000 +
0x00117000 0x00000200 -
0x00117200 0x00001000 /
0x00118200 0x00007E00 *
0x00120000 0x00048000 ?

При редактировании файла можно использовать как десятичные, так и шестнадцатеричные, и восьмеричные значения - соблюдая синтаксис, как у целых констант языка C++, кроме значения current_pass (номер текущего прохода; оно должно быть в десятичном целом формате, т.е. одна цифра от 1 до 5).

7 Сохранение файла журнала при затруднениях/проблемах - не переведено - КРАТКО смысл

Журнал нужен для продолжения копирования, а иногда требуется несколько дней для считывания с повреждённого носителя, поэтому ВАЖНО СОХРАНЯТЬ и ОБЕРЕГАТЬ :) журнал, например, от недостатка свободного места на диске, куда программа его пишет (его=журнал). При невозможности записи файла журнала программа выдаст сообщение с просьбой устранить проблемы и нажать ENTER. Можно попробовать выполнить аварийное сохранение, нажав E, затем ENTER. При невозможности записи программа повторно выдаст предупреждение.

8 Копирование с оптических носителей (CD, DVD)

Ddrescue может быть лучше, чем dd при копировании с записываемых оптических дисков, потому что два сектора lead-out в конце некоторых из них могут вызвать ошибку чтения, которая помешает dd прочитать ВСЮ ЦЕЛИКОМ последнюю запись, потенциально приводя к потере данных. Также dd может создать образ размером больше оригинального при указании 'sync' conversion и размера блока больше, чем размер сектора.

В некоторых случаях, специализированная программа наподобие dvdisaster может оказаться лучше, чем ddrescue - для восстановления данных с CD-ROM - так как dvdisaster может читать и анализировать CD-секторы в «сыром» режиме, чего не умеет делать ddrescue.

Записываемые диски CD и DVD хранят информацию ограниченное время (обычно несколько лет). По истечении этого времени развиваются процессы искажения данных (растущие ошибки чтения), от наружного края к внутреннему. Сделайте хотя бы 2 (а то и больше) копии каждого из записанных важных дисков, чтобы потом иметь возможность восстановить их с помощью ddrescue.

Если есть только одна копия CD-ROM/DVD (с ошибками чтения), но есть доступ к нескольким разным приводам, то шансы прочитать плохие секторы увеличиваются, т.к. один привод может иметь проблемы при чтении сектора, а другой может и «выжать» из него данные, в зависимости от частоты работы лазера и чувствительности лазерного приёмника, принимающего отражённый от диска луч.

Пример 1. Копирование с диска, примонтированного как /dev/cdrom

     ddrescue -n -b2048 /dev/cdrom cdimage mapfile
     ddrescue -d -r1 -b2048 /dev/cdrom cdimage mapfile
       (если размер ошибок будет = 0, то файл cdimage содержит полный образ
       исходного диска CD-ROM - и можно записать его на новый пустой диск)

Пример 2. Копирование диска в /dev/cdrom с двух копий

     ddrescue -n -b2048 /dev/cdrom cdimage mapfile
     ddrescue -d -b2048 /dev/cdrom cdimage mapfile
       (теперь вставить вторую копию в привод)
     ddrescue -d -r1 -b2048 /dev/cdrom cdimage mapfile
       (если размер ошибок будет = 0, то файл cdimage содержит полный образ
       исходного диска CD-ROM - и можно записать его на новый пустой диск)

Пример 3. Копирование диска в /dev/cdrom на двух разных компьютерах с сохранением образа на USB-устройстве, примонтированном как /mnt/mem

     ddrescue -n -b2048 /dev/cdrom /mnt/mem/cdimage /mnt/mem/mapfile
     ddrescue -d -r1 -b2048 /dev/cdrom /mnt/mem/cdimage /mnt/mem/mapfile
       (размонтировать USB-устройство и перенести его и диск на второй
       компьютер)
     ddrescue -d -r1 -b2048 /dev/cdrom /mnt/mem/cdimage /mnt/mem/mapfile
       (если размер ошибок будет = 0, то файл cdimage содержит полный образ
       исходного диска CD-ROM - и можно записать его на новый пустой диск)

Пример 4. Объединение частично скопированных образов 3 одинаковых DVD дисков, используя журналы для задания рабочих областей

     ddrescue -m mapfile1 dvdimage1 dvdimage mapfile
     ddrescue -m mapfile2 dvdimage2 dvdimage mapfile
     ddrescue -m mapfile3 dvdimage3 dvdimage mapfile
       (если размер ошибок будет = 0, то файл dvdimage содержит полный образ
       исходного DVD-диска - и можно записать его на новый пустой DVD-диск)

Пример 5. Копирование сжатой с помощью lzip резервной копии с двух копий CD, с проверкой ошибок и объединением копий (См. руководство по lziprecover для получения более подробных сведений)

     ddrescue -d -r1 -b2048 /dev/cdrom cdimage1 mapfile1
     mount -t iso9660 -o loop,ro cdimage1 /mnt/cdimage
     cp /mnt/cdimage/backup.tar.lz rescued1.tar.lz
     umount /mnt/cdimage
       (вставить в привод диск со второй копией)
     ddrescue -d -r1 -b2048 /dev/cdrom cdimage2 mapfile2
     mount -t iso9660 -o loop,ro cdimage2 /mnt/cdimage
     cp /mnt/cdimage/backup.tar.lz rescued2.tar.lz
     umount /mnt/cdimage
     lziprecover -m -v -o backup.tar.lz rescued1.tar.lz rescued2.tar.lz
       Input files merged successfully.
     lziprecover -tv backup.tar.lz
       backup.tar.lz: ok

9 Краткое руководство с примерами

Это руководство для тех, кто уже умеет использовать dd. Если Вам не знакома dd, лучше сначала поискать [в интернете] вводные материалы по dd и GNU ddrescue.

Повреждённый носитель часто с течением времени увеличивает число ошибок чтения при работе с ним. Из-за этого после того, как замечена первая ошибка, следует как можно скорее скопировать данные. Будьте прилежны, ибо при каждом включении повреждённого диска и чтении с него данных, это включение и работа могут стать для него последними.

Следует сделать копию проблемного носителя с помощью ddrescue, а затем уже работать с этой копией (для логического восстановления). Если данные очень важные, то сделайте ещё и вторую копию с первой копии. Если что-то пойдёт «не так», можно восстановиться из первой копии и пробовать ещё.

При попытке восстановления целого раздела, сначала исправьте полученную копию раздела подходящей для его ФС программой, затем примонтируйте исправленную копию и пробуйте восстанавливать с неё файлы.

А если исходный носитель настолько повреждён, что файловая система скопированного раздела не может быть восстановлена или примонтирована, придётся смотреть данные в шестнадцатеричном редакторе и вручную восстанавливать нужное, или пробовать использовать программы типа photorec.

Если повреждена таблица разделов, можно пробовать скопировать весь диск, затем восстановить таблицу разделов и сами разделы.

Если исходный носитель отсутствует как диск в списке устройств системы

(/dev/ для Linux; "Диспетчер устройств - Диски" для Windows), то скопировать с него ничего нельзя. По крайней мере, с помощью ddrescue.

Для примеров восстановления информации с оптических дисков - см. главу 8.

Пример 1: Копирование всего диска /dev/hda с двумя разделами ext2 - на диск /dev/hdb.
Примечание: не требуется заранее создавать разделы на /dev/hdb; если таблица разделов на /dev/hda повреждена, придётся её как-то реконструировать уже после копирования на /dev/hdb.

     ddrescue -f -n /dev/hda /dev/hdb mapfile
     ddrescue -d -f -r3 /dev/hda /dev/hdb mapfile
     fdisk /dev/hdb
     e2fsck -v -f /dev/hdb1
     e2fsck -v -f /dev/hdb2

Пример 2: Копирование раздела ext2 с /dev/sda2 на /dev/sdb2.
Примечание: Следует заранее создать раздел /dev/sdb2 в таблице разделов на /dev/sdb - соответствующего типа и размера.

     ddrescue -f -n /dev/sda2 /dev/sdb2 mapfile
     ddrescue -d -f -r3 /dev/sda2 /dev/sdb2 mapfile
     e2fsck -v -f /dev/sdb2
     mount -t ext2 -o ro /dev/sdb2 /mnt
       (и читать восстанавливаемые файлы из /mnt)

Пример 3: При копировании всего диска /dev/hda на диск /dev/hdb - /dev/hda застыл на позиции 12345678.

     ddrescue -f /dev/hda /dev/hdb mapfile    # /dev/hda застыл
       (перезапустить /dev/hda или выключить и включить компьютер)
       (перезапустить копирование на безопасном расстоянии от проблемы)
     ddrescue -f -i 12350000 /dev/hda /dev/hdb mapfile
       (затем скопировать в обратном направлении, дойдя до проблемы)
     ddrescue -f -R /dev/hda /dev/hdb mapfile

Пример 4: При копировании диска /dev/hda на диск /dev/hdb - диск /dev/hdb нас подвёл :(, придётся теперь копировать все данные уже на /dev/hdc.

     ddrescue -f -n /dev/hda /dev/hdb mapfile1    # /dev/hdb подвёл нас
     ddrescue -f -m mapfile1 /dev/hdb /dev/hdc mapfile2
     ddrescue -f -n /dev/hda /dev/hdc mapfile2
     ddrescue -d -f -r3 /dev/hda /dev/hdc mapfile2

Пример 5: При копировании всего диска /dev/hda на диск /dev/hdb - диск /dev/hda перестал отвечать и исчез из списка устройств.

     ddrescue -f -n /dev/hda /dev/hdb mapfile    # /dev/hda здесь исчез
       (перезапустить /dev/hda или выключить и включить компьютер и
       перезапустить копирование той же командой столько раз, сколько
       потребуется, вплоть до успешного завершения)
     ddrescue -d -f -r3 /dev/hda /dev/hdb mapfile

10 Прямой доступ к диску - пока не переведено

В последнее время часто не срабатывал (изменения в ядре или в прошивках новых дисков???).

11 Режим заполнения

Когда ddrescue запущена с параметром --fill-mode - она действует в «режиме заполнения», который отличается от обычного режима копирования. А именно, при использовании параметра "--fill-mode" ddrescue ничего не читает и не копирует. Она только лишь заполняет данными из входного файла INFILE блоки в выходном файле OUTFILE, у которых в журнале MAPFILE статус совпадает с одним из типов, указанных в качестве аргументов к параметру "--fill-mode".

Если аргумент у параметра "--fill-mode" содержит "l", ddrescue запишет в каждый заполняемый сектор сведения о его размещении (позицию, номер сектора и статус). Когда таким образом будут заполнены нечитаемые секторы, возможно будет попробовать повторить чтение областей, где расположены важные данные, т.к. при просмотре частично скопированных файлов будут видны адреса непрочитанных секторов.

В режиме заполнения входной файл INFILE может быть любого размера. Если он слишком мал, то его данные будут записаны несколько раз - столько, сколько нужно, чтобы заполнить буфер для записи в выходной файл. Если входной файл слишком велик, то из него будет прочитано только нужное количество байтов. Затем данные из буфера будут записаны в каждый требуемый сектор или кластер выходного файла.

В режиме заполнения исходный файл всегда читается с позиции 0, то есть, с начала. Если будет указан параметр "--input-position", то он будет использован для исходного входного файла, с которого шло копирование и запись журнала - и этот параметр будет использован лишь для вычисления смещения между входным и выходным файлом.

Заметьте также, что при заполнении того (исходного) файла, с которого шло первоначальное считывание данных, не следует указывать "--output-position", а при заполнении выходного файла OUTFILE (содержащего скопированную информацию), следует использовать то же смещение между "--input-position" и "--output-position".

Параметр "--fill-mode" включает действие параметра "--complete-only".

В режиме заполнения файл журнала MAPFILE обновляется, чтобы позволить продолжать работу после сбоя. Но поскольку ничего не копируется, то журнал не портится и не уничтожается. Единственное, что меняется в журнале, это строка статуса (текущая обрабатываемая позиция).

У режима заполнения есть несколько интересных применений.

Может пригодиться для стирания личных данных перед отправкой диска для замены по гарантии; для попыток "лечения" "плохих" секторов с неверными контрольными суммами (soft-bad-sectors), для заполнения нескопированной зоны в выходном файле узнаваемым образцом, чтобы облегчить поиск пострадавших файлов.

Рассмотрим следующие примеры:

Пример 1. Пометить части в полученной копии, чтобы иметь возможность найти их в шестнадцатеричном редакторе или поиском по файлам. Например, следующая команда заполнит все блоки, помеченные как "-" (нечитаемый сектор) копиями строки "BAD SECTOR ":

     printf "BAD SECTOR " > tmpfile
     ddrescue --fill-mode=- tmpfile outfile mapfile

Пример 2: Затереть только хорошие секторы, не трогая плохие. Таким образом, диск будет при проверке иметь плохие (нечитаемые) секторы. Это самый быстрый способ стирания данных с проблемного диска, и он особенно хорош при отправке диска для замены по гарантии.

     ddrescue --fill-mode=+ --force /dev/zero bad_drive mapfile

Пример 3: Заставить диск переписать или переназначить плохие секторы, чтобы он снова стал пригодным для работы (убрать «нестабильные секторы», атрибут «Pending Sectors» в SMART). Если у диска всего лишь несколько нечитаемых секторов, и они возникли не от износа по старости диска, можно попробовать просто перезаписать эти секторы, и диск сам с ними справится (поправит контрольную сумму или переназначит их резервными секторами, которые есть у дисков как раз для таких случаев).
ПРЕДУПРЕЖДЕНИЕ: работает не для всех диков.

     ddrescue --fill-mode=- -f --synchronous /dev/zero bad_drive mapfile

Также, режим заполнения может помочь выяснить, независимо от файловой системы, какие файлы пострадали (частично или полностью). Выполните следующие шаги:

1) Скопируйте с помощью ddrescue с повреждённого диска всё, что сможете, пока не получите сообщение о завершении. Не используйте разреженную запись (sparse). Таким образом, в журнале будут только завершённые блоки (+) и нечитаемые (-).

2) На копии (это диск, раздел или файл-образ) заполните блоки с плохими секторами строкой, не присутствующей ни в одном файле, например, "DEADBEEF". Используйте '--fill-mode=l-', если требуется вписать ещё данные о размещении.

3) Смонтируйте полученный клон (диск/раздел/образ) в режиме только чтения.

4) С помощью grep ищите заданный в заполнении образец во всех файлах. Файлы, содержащие заданный образец, находятся (как минимум частично) в повреждённых областях диска. Но если все повреждённые/нечитаемые секторы не были заняты файлами, grep не найдёт указанный образец ни в одном файле, что означает, что ни один файл не пострадал.

5) Запишите данные о размещении тех файлов, которые хотите попробовать дочитать.

6) Размонтируйте клон/диск/раздел/образ.

7) Пробуйте с помощью ddrescue повторно читать секторы, принадлежащие нужным файлам, до тех пор, пока они либо будут прочитаны, либо станет ясно, что их не прочитать.

8) При желании можно заполнить нескопированные участки клона/образа вместо ранее указанного текстового образца шестнадцатеричными нулями.

Пример 4. Выяснить, в каких файлах были нечитаемые секторы:

     ddrescue -b2048 /dev/cdrom cdimage mapfile
     printf "DEADBEEF" > tmpfile
     ddrescue --fill-mode=l- tmpfile cdimage mapfile
     rm tmpfile
     mount -t iso9660 -o loop,ro cdimage /mnt/cdimage
     find /mnt/cdimage -type f -exec grep -l "DEADBEEF" '{}' ';'
       (note that my_thesis.txt has a bad sector at pos 0x12345000)
     umount /mnt/cdimage
     ddrescue -b2048 -i0x12345000 -s2048 -dr9 /dev/cdrom cdimage mapfile
     ddrescue --fill-mode=- /dev/zero cdimage mapfile
     mount -t iso9660 -o loop,ro cdimage /mnt/cdimage
     cp -a /mnt/cdimage/my_thesis.txt /safe/place/my_thesis.txt

12 Режим создания журнала - не переведено - кратко смысл:

Если имеется образ/клон после работы другой программы, то ddrescue может создать файл журнала, считая, что все секторы, содержащие только 00h (0x00) - не прочитаны.

13 Вспомогательная утилита ddrescuelog - пока не переведено.

Помогает при обработке файлов журналов от/для ddrescue.

14 Invoking ddrescuelog

To be translated.

15 Сообщения об ошибках

В работе ddrescue могут быть ошибки. И конечно же, имеются неточности и упущения в данном руководстве. Если Вы о них сообщите, они будут исправлены. Если не Вы, то никто и никогда о них не узнает - и они будут оставаться тут веки-вечные, если не больше.

Итак, о найденных ошибках: пишите письма электронной почтой на адрес: [email protected]. Сообщите и номер версии (его можно увидеть, запустив 'ddrescue --version').

Автор, Антонио Диаз, быстро и охотно отвечает, внедряет дельные предложения, выпускает новые доработанные улучшенные версии.