Восстановление USB-флэшки с сохранением данных в Linux

July 2, 2020

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

Диагностика

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

Посмотреть что с флэшкой не так можно сделав вот так:

sudo hdparm /dev/sdb

Получим (в моём случае):

/dev/sdb:
SG_IO: bad/missing sense data, sb[]:  f0 00 05 00 00 00 00 0a 00 00 00 00 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 multcount     =  0 (off)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 1023/124/62, sectors = 7866368, start = 0

Бэкапим

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

sudo dd if=/dev/sdb of=/home/username/dump.img

Надо подождать пока dd закончит работу, т.к. идёт запись файла размером в несколько Гб.

Если всё прошло хорошо он покажет отчёт:

7866368+0 записей получено
7866368+0 записей отправлено
4027580416 bytes (4,0 GB, 3,8 GiB) copied, 203,966 s, 19,7 MB/s

Возвращаем файлы с того света

Установим утилиту foremost

sudo apt install foremost

и запустим её со следующими параметрами:

sudo foremost -t all -d -o /папка/назначения -v -i /dev/sdb

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

В терминале будет выводится длинный лог всего, что происходит.

В конце получим следующий вывод (в моём случае он такой):

848 FILES EXTRACTED

jpg:= 647
gif:= 5
ole:= 3
zip:= 108
png:= 77
pdf:= 8
------------------------------------------------------------------

Foremost finished at Fri Jul 19 23:08:23 2019

Т.к. предыдущая команда выполняется с sudo, то и владельцем для всех восстановленных файлов и подпапок в папке назначения будет root. Нужно передать их пользователю:

sudo chown -R пользователь:группа /папка/назначения

Файлы спасены =)

Лечим

Чтобы флэшка ожила заполним её нулями, чтобы избавиться от повреждённых данных.

sudo dd if=/dev/zero of=/dev/sdb

Запись нулей займёт время. Можем сделать себе чай.

В конце получим сообщение:

dd: запись в '/dev/sdb': На устройстве не осталось свободного места
7866369+0 записей получено
7866368+0 записей отправлено
4027580416 bytes (4,0 GB, 3,8 GiB) copied, 1481,75 s, 2,7 MB/s

Теперь нужно создать таблицу разделов (MBR) и отформатировать флэшку. Можно выполнить утилитами fdisk, gdisk.

Если таблица разделов уже есть, то форматировать в FAT32 можно командой:

sudo mkfs.fat -F32 /dev/sdb

Инструкция для утилиты fdisk есть здесь.

Всё то же самое можно сделать с помощью GParted в графическом интерфейсе. Установить его можно командой:

sudo apt install gparted

После этого флэшка должна автоматически монтироваться и на неё можно будет снова записывать файлы =)

^