Изображение


Содержание

1. Введение: Зачем ddrescue, когда стандартные методы бессильны
2. Архитектура и философия ddrescue: как работает спасение данных на низком уровне
3. Подготовка к работе: выбор оборудования, файловых систем и безопасной среды
4. Установка ddrescue: от репозиториев до компиляции из исходников
5. Базовый синтаксис и первые шаги: запуск без риска для источника
6. Интерфейс и логирование: как читать progress, mapfile и статусы
7. Практика восстановления: пошаговое создание образа с повреждённого HDD
8. Работа с SSD и NVMe: особенности, риски и оптимизация команд
9. Продвинутые техники: мультипасс, обрезка сбойных секторов, интеграция с TestDisk
10. ddrescue vs Clonezilla vs dd: сравнение в 2026 году
11. Мониторинг, диагностика и отладка процесса восстановления
12. Безопасность данных: шифрование образов, верификация хешей и хранение
13. Часто задаваемые вопросы (FAQ)
14. Заключение: ddrescue как стандарт индустрии восстановления данных



Введение: Зачем ddrescue, когда стандартные методы бессильны


Глобальная статистика потери данных показывает устойчивую тенденцию: более 70% случаев необратимой утери информации связаны не с физическим уничтожением накопителя, а с некорректными попытками копирования. Когда жёсткий диск начинает издавать щелчки, SSD перестает определяться в BIOS, или файловая система превращается в RAW, первый импульс пользователя — скопировать файлы стандартными средствами ОС, использовать встроенный dd или запустить Clonezilla для «полного клонирования». Этот подход ошибочен и часто приводит к полной потере данных.

Почему так происходит? Классические утилиты копирования работают по принципу последовательного линейного чтения. При встрече с нечитаемым сектором они либо зависают на таймаутах, генерируя избыточную нагрузку на головку диска, либо прерывают операцию, оставляя образ незавершённым. dd (Unix-утилита) при ошибке чтения останавливается или заполняет пробелы нулями в зависимости от флагов, но не сохраняет карту сбойных зон. Clonezilla, будучи отличным инструментом для миграции и резервного копирования исправных дисков, использует посекторное копирование с жёсткой проверкой контрольных сумм. При обнаружении повреждённого сектора Clonezilla либо прекращает работу, либо копирует мусор, искажая структуру файловой системы и делая последующее восстановление практически невозможным.

ddrescue (GNU ddrescue) решает эту проблему на архитектурном уровне. Это не просто «умный dd». Это специализированный инструмент, разработанный Антонио Диазом (Antonio Diaz Diaz) именно для работы с повреждёнными носителями. Его философия строится на трёх принципах: минимизация нагрузки на источник, сохранение состояния восстановления в карте (mapfile) и возможность многократного возврата к проблемным зонам без перезапуска операции.

В 2026 году актуальность ddrescue только возрастает. Накопители становятся плотнее, контроллеры сложнее, а файловые системы (ZFS, Btrfs, exFAT) требуют строгой целостности метаданных. Повреждение нескольких кластеров в таблице MFT или суперблоке ext4 может сделать невидимыми терабайты данных. ddrescue позволяет создать «сырой» образ диска, игнорируя ошибки чтения, но сохраняя точную карту битых секторов. Этот образ в дальнейшем можно безопасно анализировать, монтировать в режиме только для чтения, извлекать файлы через photorec/testdisk или передавать в лаборатории криминалистики.

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

В этом руководстве мы рассмотрим ddrescue во всей его глубине. Вы узнаете, как работает его трёхфазный алгоритм, как правильно подготовить оборудование, как читать логи и mapfile, как настраивать мультипассы для HDD и SSD, как интегрировать процесс с другими утилитами восстановления и как гарантировать целостность полученного образа. Материал рассчитан на пользователей с базовыми навыками работы в Linux-терминале. Для выполнения инструкций потребуется Live USB с Linux, два накопителя (источник и приёмник) и внимание к деталям.

Архитектура и философия ddrescue: как работает спасение данных на низком уровне


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

Концепция mapfile (файла карты)
Центральный элемент архитектуры — mapfile. Это текстовый файл, в котором ddrescue записывает статус каждого блока диска. Карта содержит три типа записей:
- `/` — данные скопированы успешно
- `?` — данные не читались (не проверено)
- `*` — данные не читались, но проверены (попытка была)
- `+` — данные заполнены нулями (принудительно)
- `-` — область обрезана (trimmed)

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

Трёхфазный алгоритм чтения
ddrescue работает в три логические фазы, которые можно запускать последовательно или объединять:
1. Фаза быстрого копирования (forward pass): чтение больших непрерывных блоков от начала к концу диска. Цель — спасти максимум данных с минимальной нагрузкой на головку. Пропускает сбойные сектора, не задерживаясь на них.
2. Фаза обратного сканирования (reverse pass): чтение с конца диска к началу. Позволяет обойти локальные механические повреждения головки или поверхности, которые могут блокировать прогресс в прямом направлении.
3. Фаза детального восстановления (scrape/trim pass): многократные попытки чтения проблемных секторов с уменьшением размера блока, изменением направления и применением аппаратных команд TRIM (для SSD). Использует агрессивные стратегии повторных попыток, но с контролем нагрузки.

Разделение чтения и записи
ddrescue строго разделяет процесс чтения источника и записи образа. Образ создаётся как непрерывный файл на целевом накопителе. Карта сбойных секторов не «заполняется нулями» автоматически — вместо этого в образе остаются «дыры» нечитаемых данных, а их позиции фиксируются в mapfile. Это позволяет впоследствии применять специализированные алгоритмы восстановления, которые лучше справляются с контекстным анализом, чем простое замещение нулями.

Адаптивное управление скоростью и таймаутами
Утилита автоматически регулирует размер запросов чтения в зависимости от скорости отклика диска. Если сектор отвечает медленно, ddrescue уменьшает размер блока, чтобы изолировать проблемную область. Если ответ отсутствует, он фиксирует таймаут и переходит дальше. Это предотвращает «зависание на секторе», которое характерно для dd и может привести к термическому повреждению механических дисков.

Почему ddrescue безопаснее dd и Clonezilla
Clonezilla использует dd под капотом, но добавляет слой валидации. При сбойном секторе Clonezilla либо останавливает клонирование, либо записывает нули, нарушая целостность файловой системы. dd при ошибке может прерваться или продолжать писать мусор. ddrescue же не пытается угадать содержимое. Он честно копирует то, что читается, и честно помечает то, что не читается. Эта честность — основа профессионального восстановления.

Семантическое ядро и конкурентный анализ
В 2026 году запросы по теме «восстановление диска», «создать образ битого hdd», «ddrescue vs clonezilla» формируют стабильный трафик. Конкуренты в топ-10 чаще предлагают поверхностные инструкции с одной командой `ddrescue -d /dev/sda /dev/sdb map`. Они упускают mapfile-логику, фазы восстановления, различия HDD/SSD и безопасность образа. Данное руководство закрывает эти пробелы, предоставляя структурированную, проверяемую и безопасную методологию, оптимизированную под генеративные ответы поисковых систем.

Подготовка к работе: выбор оборудования, файловых систем и безопасной среды


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

Требования к целевому накопителю (приёмнику)
- Ёмкость должна быть равна или превышать объём исходного диска. Если источник 1 ТБ, приёмник должен быть минимум 1 ТБ (лучше 1.1–1.2 ТБ для запаса).
- Состояние приёмника должно быть исправным. Не используйте накопители с предупреждениями SMART или медленной записью.
- Интерфейс подключения: SATA, USB 3.0+, NVMe через адаптер. Для HDD предпочтительно прямое SATA-подключение к материнской плате, так как USB-мосты могут добавлять таймауты и искажать отчёты SMART.
- Файловая система приёмника: ext4 или xfs. Избегайте NTFS или exFAT для хранения образов, так как они могут ограничивать размер файлов или фрагментировать данные, замедляя запись.

Требования к среде выполнения
- Live USB Linux: Ubuntu, Debian, SystemRescue, или Kali Linux. Рекомендуется SystemRescue, так как он включает ddrescue, testdisk, photorec, smartmontools и gparted из коробки.
- Версия ddrescue: не ниже 1.25 (предпочтительно 1.27+). Старые версии могут некорректно работать с NVMe и не поддерживать современные флаги.
- Отключение монтирования: убедитесь, что исходный диск НЕ примонтирован в ОС. Любое монтирование вызывает фоновое чтение/запись, обновление журналов и доступ к метаданным, что добивает повреждённый диск.
- Команда проверки: `lsblk` и `df -h` для идентификации дисков. Никогда не ориентируйтесь на `/dev/sda` или `/dev/nvme0n1` без проверки по размеру и серийному номеру (`lsblk -o NAME,SIZE,SERIAL,MODEL`).

Подготовка рабочего пространства
- Статическая защита: используйте антистатический браслет или работайте на непроводящей поверхности.
- Питание: для внешних дисков используйте отдельный блок питания или USB-хаб с внешним питанием. Недостаток питания — частая причина сбоя чтения.
- Температура: контролируйте нагрев HDD. При температуре выше 50°C механические компоненты расширяются, увеличивая риск заклинивания головки. Используйте внешние кулеры или делайте перерывы между фазами.
- Логирование среды: создайте директорию для работы и сохраните выводы SMART до начала:
bash
mkdir -p ~/recovery/$(date +%Y%m%d)
smartctl -a /dev/sdX > ~/recovery/$(date +%Y%m%d)/smart_before.txt


Файловые системы и их особенности
- FAT32/exFAT: не поддерживают файлы >4 ГБ (FAT32) или имеют уязвимые метаданные. Не подходят для хранения образов.
- NTFS: поддерживает большие файлы, но может фрагментировать образ при записи.
- ext4/xfs: оптимальны. ext4 надёжен, xfs быстрее при больших файлах. Используйте `mkfs.ext4 -F /dev/sdY` для целевого диска.
- ZFS/Btrfs: избыточны для образа, но полезны, если планируется снэпшотная работа с образом.

Безопасность данных на этапе подготовки
- Никогда не запускайте `fsck`, `chkdsk` или `testdisk --write` на исходном диске до создания образа.
- Не пытайтесь «прогреть» диск феном или «постучать» по корпусу.
- Если диск щелкает или не определяется — остановитесь. Это аппаратный сбой. ddrescue не поможет. Требуется замена блока головок в чистой комнате.
- Создайте резервную копию mapfile на отдельном носителе перед каждой новой фазой.

Чеклист подготовки:
✅ Идентифицированы /dev/sdX (источник) и /dev/sdY (приёмник)
✅ Целевой диск отформатирован в ext4, объём >= источника
✅ Live USB загружен, источник НЕ примонтирован
✅ SMART сохранён, температура в норме
✅ Рабочая директория создана, ddrescue версии 1.27+ установлен
✅ План восстановления записан (фазы, таймауты, резервные копии)

Установка ddrescue: от репозиториев до компиляции из исходников


Установка ddrescue в Linux обычно проста, но для критических задач рекомендуется использовать последнюю стабильную версию из исходников или проверенных репозиториев, чтобы избежать багов старых сборок.

Установка через пакетные менеджеры
Ubuntu/Debian:
bash
sudo apt update
sudo apt install gddrescue

Fedora/RHEL:
bash
sudo dnf install ddrescue

Arch Linux:
bash
sudo pacman -S ddrescue

После установки проверьте версию:
bash
ddrescue -V
# Ожидаемый вывод: ddrescue 1.27 (или новее)


Компиляция из исходников (рекомендуется для production)
Последняя версия всегда доступна на GNU FTP. Компиляция обеспечивает максимальную совместимость и оптимизацию под вашу архитектуру.
bash
# Установка зависимостей
sudo apt install build-essential wget

# Скачивание последней версии
wget https://ftp.gnu.org/gnu/ddrescue/ddrescue-1.27.tar.gz
tar xf ddrescue-1.27.tar.gz
cd ddrescue-1.27

# Конфигурация и компиляция
./configure
make
sudo make install
sudo ldconfig

# Проверка
ddrescue -V

Важно: `make install` по умолчанию устанавливает бинарник в `/usr/local/bin/ddrescue`. Убедитесь, что этот путь в `$PATH` имеет приоритет над системным пакетом.

Верификация целостности
Для критически важных задач проверяйте GPG-подпись:
bash
wget https://ftp.gnu.org/gnu/ddrescue/ddrescue-1.27.tar.gz.sig
gpg --keyserver keys.gnupg.net --recv-keys A9C1D2D0
gpg --verify ddrescue-1.27.tar.gz.sig ddrescue-1.27.tar.gz

Если вывод содержит `Good signature`, пакет не изменён.

Устранение типовых проблем установки
- Ошибка `./configure: command not found`: установите `build-essential` или `autoconf`.
- Ошибка `ddrescue: command not found` после `make install`: добавьте `export PATH=/usr/local/bin:$PATH` в `~/.bashrc` и выполните `source ~/.bashrc`.
- Старая версия в репозитории (например, 1.22 в Debian 11): используйте backports или компиляцию из исходников. Старые версии не поддерживают `--trim` и корректную работу с NVMe.

Альтернативные методы развертывания
- Docker: `docker run --rm -it --privileged -v /dev:/dev alpine:latest sh -c "apk add ddrescue && ddrescue -V"`
- Windows (WSL2): установите дистрибутив Ubuntu в WSL, подключите диск через `usbipd`, затем выполните стандартную установку. Учтите, что производительность через WSL будет ниже, а прямое блочное устройство может требовать дополнительной настройки прав.
- Live USB с SystemRescue: не требует установки, работает из коробки.

Рекомендации по обновлению
Проверяйте выпуски каждые 3-6 месяцев. Обновления ddrescue редко ломают обратную совместимость, но часто добавляют оптимизации чтения и исправления для новых контроллеров. Настройте автоматическое уведомление через скрипт:
bash
#!/bin/bash
LATEST=$(curl -s https://ftp.gnu.org/gnu/ddrescue/ | grep -o 'ddrescue-[0-9.]*tar' | sort -V | tail -1)
INSTALLED=$(ddrescue -V | grep -o '[0-9.]*')
if [ "$LATEST" != "$INSTALLED" ]; then
echo "Доступна новая версия: $LATEST"
fi


Базовый синтаксис и первые шаги: запуск без риска для источника


Синтаксис ddrescue прост, но его эффективность зависит от понимания флагов и порядка аргументов. Ошибка в порядке может привести к перезаписи исходного диска.

Базовая структура команды
bash
ddrescue [опции] <входной_файл_или_устройство> <выходной_файл> [файл_карты]

Пример безопасного запуска:
bash
sudo ddrescue -d -r3 /dev/sda /mnt/target/disk.img /mnt/target/disk.map

Разбор флагов:
- `-d` или `--direct`: использует прямой ввод/вывод (O_DIRECT), минуя кеш ОС. Критически важно для повреждённых дисков, так как кеш может скрывать ошибки чтения или задерживать запись.
- `-r3` или `--retry-passes=3`: количество повторных попыток чтения каждого блока в фазе scrape. Значение 3–5 оптимально для HDD. Для SSD лучше 0 или 1.
- ``: `/dev/sda` (или `/dev/nvme0n1`). Всегда проверяйте через `lsblk`.
- ``: путь к файлу образа. Должен быть на отдельном диске.
- `[файл_карты]`: имя mapfile. Обязателен для безопасного восстановления.

Первый запуск: стратегия минимального вмешательства
Для первого прохода используйте флаги, минимизирующие нагрузку:
bash
sudo ddrescue -d -n /dev/sda /mnt/target/disk.img /mnt/target/disk.map

Флаг `-n` (или `--no-scrape`) отключает детальные попытки чтения сбойных секторов. ddrescue копирует всё, что читается быстро, и пропускает проблемные зоны. Это спасает максимум данных без риска добить диск.

Безопасность: проверка порядка аргументов
ddrescue не спрашивает подтверждения при перезаписи. Ошибка `/dev/sdb /dev/sda` уничтожит исходный диск. Перед запуском:
1. Выполните `lsblk -o NAME,SIZE,MODEL,SERIAL`
2. Сверьте размеры с известными характеристиками
3. Используйте `echo "Проверено: источник /dev/sda, приёмник /mnt/target"`
4. Только затем запускайте команду

Работа с разделами vs весь диск
Всегда создавайте образ всего диска (`/dev/sda`), а не раздела (`/dev/sda1`). Образ раздела не содержит таблицу разделов, MBR/GPT и загрузочные области. Восстановление из образа раздела сложнее и часто невозможно без ручного восстановления структуры.

Принудительный флаг `--force`
Используется только если выходной файл уже существует или если требуется продолжить прерванную операцию с новой картой. Никогда не используйте `--force` при первом запуске с новым приёмником.

Пример полного безопасного старта:
bash
mkdir -p /mnt/recovery
mount /dev/sdb1 /mnt/recovery
lsblk -o NAME,SIZE,MODEL,SERIAL
# Убедившись в правильности:
sudo ddrescue -d -n /dev/sda /mnt/recovery/image.img /mnt/recovery/image.map


Интерфейс и логирование: как читать progress, mapfile и статусы


ddrescue предоставляет детальный вывод в реальном времени, который является ключом к пониманию состояния восстановления. Интерпретация этих данных позволяет принимать решения о смене стратегии, остановке или продолжении.

Структура вывода в терминале
gnu
ddrescue 1.27
ipos: 124.3 GB, non-trimmed: 0 B, current rate: 12.5 MB/s
opos: 124.3 GB, non-scraped: 12.4 GB, average rate: 45.2 MB/s
non-tried: 0 B, bad-sector: 2.1 GB, error rate: 0 B/s
rescued: 890 GB, bad areas: 142, run time: 2h 15m
pct rescued: 89.2%, read errors: 3145, remaining time: 4h 30m
time since last successful read: 42s

Расшифровка полей:
- `ipos`: позиция чтения на источнике
- `opos`: позиция записи на образе
- `non-trimmed`: объём, не проверенный командой TRIM (актуально для SSD)
- `non-scraped`: объём, не подвергнутый детальному восстановлению
- `current rate`: текущая скорость чтения
- `average rate`: средняя скорость с начала
- `bad-sector`: объём, помеченный как сбойный после проверок
- `bad areas`: количество кластеров с ошибками
- `error rate`: скорость возникновения ошибок (должна быть 0 B/s в стабильной фазе)
- `time since last successful read`: время с последнего успешного чтения. Если растёт > 300s, процесс завис.

Парсинг mapfile
Файл карты — текстовый. Пример структуры:
text
# Rescue Logfile. Created by GNU ddrescue version 1.27
# current_pos current_status
0x00000000 +
0x00001000 ?
0x00002000 *
0x00003000 -
0x00004000 /

Символы:
- `+` — скопировано
- `?` — не читалось
- `*` — проверено, не читается
- `-` — обрезано (trimmed)
- `/` — зарезервировано для будущих версий

Чтение mapfile позволяет понять структуру повреждений. Сплошные блоки `?` или `*` указывают на физический дефект поверхности. Разрозненные `*` — на проблемы с головкой или контроллером.

Логирование в файл
Для длительных операций обязательно дублируйте вывод:
bash
sudo ddrescue -d -n /dev/sda image.img image.map 2>&1 | tee recovery.log

Флаг `2>&1` объединяет stdout и stderr. `tee` выводит на экран и сохраняет.

Автоматический анализ лога
Скрипт для быстрого подсчёта статусов:
bash
#!/bin/bash
MAP="disk.map"
echo "Статус mapfile:"
grep -v '^#' $MAP | awk '{print $2}' | sort | uniq -c

Вывод покажет распределение блоков. Если `?` или `*` > 50%, переходите к фазе scrape. Если `+` > 95%, можно останавливаться и монтировать образ.

Мониторинг через watch
bash
watch -n 5 "tail -n 20 recovery.log | grep -E 'pct rescued|bad areas|error rate'"

Обновление каждые 5 секунд показывает ключевые метрики без прокрутки.

Практика восстановления: пошаговое создание образа с повреждённого HDD


Практическое применение ddrescue строится на последовательных фазах. Для механических HDD рекомендуется трёхэтапный подход с контролем температуры и нагрузки.

Шаг 1: Подключение и идентификация
bash
lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINT
# Источник: /dev/sda (2TB, ST2000DM001)
# Приёмник: /dev/sdb (4TB, WD40PURX) -> /dev/sdb1 смонтирован в /mnt/target


Шаг 2: Фаза быстрого копирования (forward pass)
bash
sudo ddrescue -d -n /dev/sda /mnt/target/disk.img /mnt/target/disk.map

Ожидание: высокая скорость (80-150 MB/s), минимальные ошибки. Если скорость падает <>
bash
sudo ddrescue -d -n -R /dev/sda /mnt/target/disk.img /mnt/target/disk.map