Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

GNU ddrescue - лучшая утилита для восстановления данных с поврежденного жесткого диска

Оригинал: GNU ddrescue – The Best Damaged Drive Rescue
Автор: Carla Schroder
Дата публикации: 2 марта 2017 года
Перевод: А. Кривошей
Дата перевода: апрель 2018 г.

Когда вы спасаете свои данные с умирающего жесткого диска, время имеет большое значение. Чем дольше требуется копировать ваши данные, тем больше вы рискуете потерять. GNU ddrescue - это превосходный инструмент для копирования умирающих жестких дисков, а также любых блочных устройств, таких как компакт-диски, DVD-диски, USB-накопители, Compact Flash, SD-карты - все, что распознается вашей системой Linux как /dev /foo. Вы можете скопировать устройства, предназначенные для Windows и Mac OS X, поскольку GNU ddrescue работает на уровне блоков, а не на уровне файловой системы, поэтому не имеет значения, какая файловая система находится на устройстве.

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

Мне нравится всегда иметь под рукой SystemRescueCD на компакт-диске, а также на USB-накопителе. SystemRescueCD имеет небольшой объем и специализируется на спасательных операциях. В наши дни большинство дистрибутивов Linux имеют загрузочные версии с live-режимом, поэтому вы можете использовать то, с чем вам удобно работать, при условии, что вы ваш дистрибутив включает GNU ddrescue и другое программное обеспечение для спасения данных, которое вам нужно.

Не путайте GNU ddrescue с dd-rescue от Курта Гарлоффа. dd-rescue старше, и дизайн GNU ddrescue, вероятно, выиграл от этого. GNU ddrescue работает быстро и надежно: он пропускает плохие блоки и копирует хорошие блоки, а затем возвращается, чтобы попытаться скопировать поврежденные блоки, отслеживая их местоположение с помощью простого лог-файла.

Требуемое оборудование

Вам нужна система Linux с GNU ddrescue (gddrescue в случае Ubuntu), диск, который вы пытаетесь спасти, и устройство с пустым разделом, размером по крайней мере, в 1,5 раза больше, чем тот, который вы спасаете, так как у вас должен быть приличный запас свободного места. Если вы исчерпали свободное место, даже если это всего лишь несколько байтов, GNU ddrescue завершится неудачно в конце операции.

Есть несколько способов настройки оборудования. Один из способов - установить поврежденный диск в вашей Linux-системе, что очень просто, если это оптический диск или USB-устройство. Для дисков SATA и SDD имеются недорогие н простые в использовании адаптеры USB. Я предпочитаю подключать поврежденный диск к своей надежной системе Linux, а не зацикливаться на загрузчиках и странном железе. Для хранения спасенных данных я использую запасной диск SATA в переносном USB-кейсе.

Другой способ - загрузить компьютер, в котором находится умирающий диск, с помощью SystemRescueCD (или любого другого подобного дистрибутива), и подключить накопитель для копирования данных.

Если у вас недостаточно USB-портов, незамененимым является мощный USB-концентратор.

Идентификация накопителей

Убедитесь, что вы используете правильные имена устройств. Подключите все, а затем запустите lsblk:

lsblk

Как видно из этого примера, вполне возможно ошибиться. У меня два диска по 1,8 TB. На одном корневая файловая система и мой домашний каталог, а другой - дополнительный накопитель для хранения данных. lsblk точно определяет флэш-накопитель, SD-карту и оптический привод. Если вы не сможете определить ваши диски, попробуйте findmnt:

$ findmnt -D
SOURCE     FSTYPE            SIZE   USED  AVAIL USE% TARGET
udev       devtmpfs          7.7G      0   7.7G   0% /dev
tmpfs      tmpfs             1.5G   9.6M   1.5G   1% /run
/dev/sda3  ext4             36.6G  12.2G  22.4G  33% /
tmpfs      tmpfs             7.7G   1.2M   7.7G   0% /dev/shm
tmpfs      tmpfs               5M     4K     5M   0% /run/lock
tmpfs      tmpfs             7.7G      0   7.7G   0% /sys/fs/cgroup
/dev/sda4  ext2             18.3G    46M  17.4G   0% /tmp
/dev/sda2  ext2              939M 119.1M 772.2M  13% /boot
/dev/sda6  ext4              1.8T 505.4G   1.2T  28% /home
tmpfs      tmpfs             1.5G    44K   1.5G   0% /run/user/1000
gvfsd-fuse fuse.gvfsd-fuse      0      0      0    - /run/user/1000/gvfs
/dev/sdd1  vfat             14.6G     8K  14.6G   0% /media/carla/100MB
/dev/sdc1  vfat            243.8M    40K 243.7M   0% /media/carla/50MB
/dev/sdb4  ext4              1.8T   874G 859.3G  48% /media/carla/8c670f2e-
   dae3-4594-9063-07e2b36e609e

Здесь видно, что корневой файловой системой является /dev/sda3, а все, что находится в папке /media, не относится к корневой файловой системе.

/media/carla/100MB2 и /media/carla/50MB обозначены метками вместо UUID типа /media/carla/8c670f2e-dae3-4594-9063-07e2b36e609e, так как я всегда присваиваю своим USB-накопителям понятные имена. Это можно делать для любой файловой системы, например я могу присвоить имя своей корневой файловой системе:

$ sudo e2label /dev/sda3 rootdonthurtmeplz

Запустите sudo e2label [device], чтобы увидеть вашу новую метку. e2label подходит для файловых систем ext2/ext3/ext4, а для XFS, JFS, BtrFS и других файловых систем имеются свои команды. Упростить этот процесс можно с помощью GParted: отключите файловую систему, а затем вы можете присвоить или изменить метку без использования команд для каждой файловой системы.

Основы восстановления данных

Мы потратили достаточно времени на выяснение того, как узнать, где какой диск. Предположим, что GNU ddrescue запущена на /dev/sda1, поврежденный диск - /dev/sdb1, и мы копируем его в /dev/sdc1. Первая из приведенных ниже команд копирует как максимально возможное количество данных без повторных попыток. Вторая команда снова работает с поврежденной файловой системой и делает три попытки чтения. Лог-файл находится в корневой файловой системе, которая, по моему мнению, лучше, чем съемный носитель, но вы можете поместить его куда считаете нужным:

$ sudo ddrescue -f --no-split /dev/sdb1 /dev/sdc1 logfile
$ sudo ddrescue -f -r3 /dev/sdb1 /dev/sdc1 logfile

Чтобы скопировать весь диск, используйте только имя диска, например /dev/sdb, и не указывайте раздел.

Если у вас есть поврежденные файлы, которые ddrescue не может полностью восстановить, вам понадобятся другие инструменты для их восстановления, такие как Testdisk, Photorec, Foremost или Scalpel. В Arch Linux wiki есть хороший обзор инструментов для восстановления файлов.

В следующих статьях вы найдете описание других средств для восстановления утерянных данных: