ddrescue — утилита побайтового копирования, созданная для одного сценария: вытащить максимум данных с носителя, который начал сбоить. В отличие от dd, она запоминает прогресс в mapfile, умеет пропускать плохие участки и возвращаться к ним позже, а также перезапускаться с того места, где остановилась. Ниже — рабочий порядок действий. Сразу оговорка: всё описанное применимо только к собственным дискам и флешкам, и только если ценность данных оправдывает риск. Перед началом сделайте резервную копию всего, что ещё читается.

Чем ddrescue отличается от dd

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

Пакет в Debian, Ubuntu и Linux Mint называется gddrescue, а сама команда — ddrescue. В Fedora и Arch он называется просто ddrescue. Проверить версию и синтаксис можно без риска для данных.

sudo apt install gddrescue smartmontools
ddrescue --version
ddrescue --help

Подготовка: паспорт диска и приёмник

До первого запуска нужно понять, что за устройство перед вами, какого оно размера и куда писать образ. Флешка на 64 ГБ не примет образ диска на 500 ГБ, а файловая система приёмника должна иметь запас. Все разделы источника отмонтируются: чтение с примонтированной файловой системы даёт противоречивую картину.

lsblk -o NAME,SIZE,MODEL,SERIAL,MOUNTPOINTS
sudo smartctl -a /dev/sdb
sudo blockdev --getsize64 /dev/sdb
sudo umount /dev/sdb1

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

Три прохода ddrescue

Классическая схема — быстрый первый проход без «скрейпинга», затем уточняющий с прямым доступом и повторами, затем обратный проход по особенно медленным участкам. Ключи: -n отключает scraping на первом этапе, -d включает прямой доступ в обход кэша, -r задаёт число повторных попыток, -b — размер сектора, -T — таймаут на зависшем чтении.

sudo ddrescue -f -n /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map
sudo ddrescue -f -d -r3 -b 4096 -T 30s /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map
sudo ddrescue -f -d -R -r3 /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map
sudo ddrescuelog -t /mnt/backup/disk.map

Ключ -c задаёт размер кластера: на повреждённом диске уменьшение кластера повышает шансы прочитать отдельные сектора, но замедляет работу. Флаг --reopen-on-error заставляет утилиту переоткрывать устройство после сбоя — это полезно для USB-накопителей, которые отваливаются и возвращаются. Если диск зависает так, что не помогает таймаут, попробуйте сменить порт и кабель, а не увеличивать число повторов.

Второй запуск не начинает заново: он видит карту и работает только с неразобранными участками. Если диск зависает намертво, помогает -T с небольшим значением — утилита бросит блок и пойдёт дальше, а не будет ждать минутами. Флаг -f нужен, когда приёмник — устройство или файл, который утилита считает занятым; применять его стоит осознанно.

Как читать mapfile

Карта — текстовый файл, где каждая строка описывает участок: позиция, размер и статус. Плюс означает успешно скопированные данные, минус — нечитаемые сектора, вопросительный знак — ещё не тронутые, звёздочка — участки, до которых не дошёл скрейпинг, косая черта — нетриммированные участки. Команда ddrescuelog -t печатает карту таблицей, а процент завершения ddrescue показывает по итогам прохода.

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

Монтирование образа и извлечение файлов

Образ — это точная копия вместе с таблицей разделов. Подключить его можно через loop-устройство, но только для чтения. Если файловая система повреждена, монтирование может не удаться; тогда работают с копией образа, а не с оригиналом.

sudo losetup -Pf --show /mnt/backup/disk.img
lsblk -f
sudo mount -o ro,noload /dev/loop0p2 /mnt/recovery
sudo mount -o ro,loop,offset=$((2048*512)) /mnt/backup/disk.img /mnt/recovery

Ключ noload отключает журнал NTFS и не даёт системе «поправить» образ. Для ext4 достаточно ro, но если ядро предлагает восстановление журнала, от него лучше отказаться: изменения должны идти только в копию. Дальше файлы копируются на другой носитель, а образ сохраняется до конца работ.

Если диск не определяется

Сначала проверьте кабель, порт и питание, затем dmesg. Журнал в реальном времени показывает, на каком секторе чтение зависает и отваливается ли устройство целиком.

dmesg --follow
lsblk -o NAME,SIZE,TRAN,MODEL
sudo smartctl -a /dev/sdb | grep -i -E "error|realloc"

Диск, который щёлкает или исчезает из системы, лучше не мучить десятками запусков: каждая минута работы изнашивает поверхность. Для особо ценных данных разумнее остановиться и обратиться в лабораторию. Заморозка и разборка корпуса дома — плохая идея.

Что делать после копирования

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

Отдельно про флешки: у них нет SMART в привычном виде, а контроллер сам переназначает блоки. Если флешка определяется с неверным объёмом или пропадает, ddrescue может успеть снять данные, но рассчитывать на стабильную работу после этого не стоит. Итог простой: сначала копия, потом эксперименты.

Итог

ddrescue выигрывает у dd за счёт карты, возобновления и нескольких проходов. Чек-лист:

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

Проверить диск и освободить его от монтирования, снять быстрый проход с -n, уточнить проблемные зоны с -d и -r, при необходимости пройти в обратном направлении, затем смонтировать образ только для чтения и скопировать файлы. Главное правило — не писать на источник и не запускать восстановление без резервной копии того, что уже спасено.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте