GNU ddrescue — это инструмент восстановления данных для дисководов , DVD , CD и других цифровых носителей. Он копирует необработанные блоки памяти, такие как секторы диска , с одного устройства или файла на другое, при этом обрабатывая ошибки чтения интеллектуальным образом, чтобы минимизировать потерю данных путем очистки хороших секторов из частично считанных блоков.
GNU ddrescue написан на языке программирования C++ и доступен как программное обеспечение с открытым исходным кодом , первоначально выпущенное в 2004 году. Он также доступен в двоичной форме как компонент большинства дистрибутивов Linux .
ddrescue использует сложный алгоритм для копирования данных с дисковых накопителей и других устройств хранения данных, нанося как можно меньше дополнительных повреждений в случае их выхода из строя. [2] Считается, что он имеет самую сложную реализацию алгоритма изменения размера блока среди свободного и открытого программного обеспечения , [3] [4] и считается важным инструментом восстановления данных. [5] [6]
Состояние процесса копирования записывается в файл карты (ранее называвшийся logfile ), который помогает в ходе нескольких этапов алгоритма восстановления и облегчает прерывание восстановления и его повторение по мере необходимости для восстановления большего количества данных. Программа не записывает нули в выход вместо плохих блоков, так что дополнительные ошибки, не встречавшиеся ранее, не уничтожают ранее восстановленные блоки. Это позволяет объединять несколько дефектных копий CD или DVD в один файл резервной копии. Благодаря файлу карты только необходимые блоки считываются из второй и последующих копий.
ddrescue также имеет режим заполнения , позволяющий выборочно перезаписывать части выходного файла, что может использоваться для стирания данных, маркировки поврежденных областей или даже, в некоторых случаях, для восстановления поврежденных секторов. [7]
GNU ddrescue не является производной от dd , которая также копирует блоки памяти с дискового хранилища, но не действует стратегически, алгоритмически.
GNU ddrescue также отличается от одноименной программы dd_rescue
. [8]