Библиотека сайта rus-linux.net
GNU ddrescue - лучшая утилита для восстановления данных с поврежденного жесткого диска
Оригинал: GNU ddrescue – The Best Damaged Drive Rescue
Автор: Carla Schroder
Дата публикации: 2 марта 2017 года
Перевод: А. Кривошей
Дата перевода: апрель 2018 г.
Когда вы спасаете свои данные с умирающего жесткого диска, время имеет большое значение. Чем дольше требуется копировать ваши данные, тем больше вы рискуете потерять.
Вместо того, чтобы запускать какие-либо средства восстановления файлов или инструменты анализа на поврежденном томе, лучше всего сначала сделать копию, а затем работать с этой копией.
Мне нравится всегда иметь под рукой
Не путайте GNU ddrescue с
Требуемое оборудование
Вам нужна система Linux с GNU ddrescue (gddrescue в случае Ubuntu), диск, который вы пытаетесь спасти, и устройство с пустым разделом, размером по крайней мере, в 1,5 раза больше, чем тот, который вы спасаете, так как у вас должен быть приличный запас свободного места. Если вы исчерпали свободное место, даже если это всего лишь несколько байтов, GNU ddrescue завершится неудачно в конце операции.
Есть несколько способов настройки оборудования. Один из способов - установить поврежденный диск в вашей Linux-системе, что очень просто, если это оптический диск или USB-устройство. Для дисков SATA и SDD имеются недорогие н простые в использовании адаптеры USB. Я предпочитаю подключать поврежденный диск к своей надежной системе Linux, а не зацикливаться на загрузчиках и странном железе. Для хранения спасенных данных я использую запасной диск SATA в переносном USB-кейсе.
Другой способ - загрузить компьютер, в котором находится умирающий диск, с помощью SystemRescueCD (или любого другого подобного дистрибутива), и подключить накопитель для копирования данных.
Если у вас недостаточно USB-портов, незамененимым является мощный USB-концентратор.
Идентификация накопителей
Убедитесь, что вы используете правильные имена устройств. Подключите все, а затем запустите 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 есть хороший обзор инструментов для восстановления файлов.
В следующих статьях вы найдете описание других средств для восстановления утерянных данных:
- Утилиты для восстановления потерянных данных в Linux
- Восстановите данные с помощью инструментальных средств Linux