Предыстория
Недавно ко мне пришел товарищ с фразой: «У меня флешка сломалась, можешь посмотреть? В принципе, если не получится, то и ладно, но там есть несколько файлов, копий которых нет».
Я, конечно, флешку взял и обещал посмотреть, что можно сделать. Грех не помочь другу! Входные данные были такие: «винда перестала видеть флешку». Других внятных объяснений произошедшего я не добился.
И вот, когда выдалось немного свободного времени, настала пора попробовать восстановить какие-то данные с флешки.
В этой статье рассматривается восстановление флешек в среде Linux. В Windows тоже можно восстанавливать данные: есть разные утилиты и проприетарные продукты (например, R-Studio), но это тема для отдельных статей.
Первым делом, подключив флешку к ноуту с Linux, я убедился, что аппаратная часть девайса жива, а повреждены именно данные на ней.
Второе, что я сделал, — снял образ.
Техника безопасности: снимаем образ
Самая важная часть в восстановлении данных — не угробить своими действиями еще больше данных. Все описываемые в статье действия производились исключительно с образом флешки. Снять образ можно следующими командами (тебе, конечно, надо указать путь к своему устройству):
Как вариант, можно использовать команду ddrescue:
Лично я предпочитаю второй способ, поскольку ddrescue пытается считать данные в несколько проходов, а также (если ты дал команду писать лог) прервать чтение и продолжить с места остановки. Плюс к этому утилита дает красивый отчет о том, сколько данных считалось, а сколько нет, и оценку времени до конца съема образа.
Кроме того, имеет смысл работать с копией образа. Вдруг ты его испортишь, и не факт, что получится еще раз снять образ с флешки, если она умирает из-за аппаратных проблем. Для частичных копий образа и восстановления испорченных частей к начальному состоянию рекомендую пользоваться тем же всемогущим dd.
Параметр notrunc нужен для того, чтобы dd не обрезала файл-назначение, когда закончатся данные в файле-источнике.
Сняв образ флешки, я взглянул на содержимое. Увиденное несколько меня удивило.
$ hexdump -C flash.img|less
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |. | * 00400000 01 76 0a 00 02 76 0a 00 03 76 0a 00 04 76 0a 00 |.v. v. v. v..| 00400010 05 76 0a 00 06 76 0a 00 07 76 0a 00 08 76 0a 00 |.v. v. v. v..| 00400020 09 76 0a 00 0a 76 0a 00 0b 76 0a 00 0c 76 0a 00 |.v. v. v. v..| 00400030 0d 76 0a 00 0e 76 0a 00 0f 76 0a 00 10 76 0a 00 |.v. v. v. v..| 00400040 11 76 0a 00 12 76 0a 00 13 76 0a 00 14 76 0a 00 |.v. v. v. v..| .
В образе первые 4 Мбайт данных были забиты 0xFF
Поврежден блок флеш-памяти? Чья-то попытка стереть данные? Сбой какого-то приложения? Почему затерта область — неважно. Главное, что у нас нет ни таблицы разделов, ни структуры файловой системы
Хотя если приглядеться, то видна закономерность. Перед нами последовательность увеличивающихся на единицу 32-битных чисел (в формате LittleEndian): 0x000a7601, 0x000a7602, 0x000a7603. Следовательно, у нас на флешке, скорее всего, была файловая система FAT32.
Что ж, попробуем восстановить данные. Для начала возьмем утилиту TestDisk.
Восстановление файловой системы FAT при помощи утилиты TestDisk
Это подробное пошаговое руководство восстановлению удаленных данных в файловых системах FAT (FAT12/16/32) и VFAT.
- ФС FAT чаще всего используется на картах памяти, цифровых фотокамерах и USB флешках.
- VFAT, как правило, используется на внешних жестких дисках, отформатированных при помощи WIndows.
Сразу нужно вас обрадовать: восстановление удаленной информации не вызывает особых трудностей. К тому же, учтите тот факт, что при удалении некоего файла или папки элемент только помечается в таблице файлов как «доступный для перезаписи». Сложность заключается в том, что при использовании того же пространства другими файлами они будут перезаписаны и восстановить их будет либо невозможно, либо можно, но только частично. Программа TestDisk может обнаружить на жестком диске или другом носителе удаленный элемент при сканировании – при нахождении начала файла. Соответственно, если файл еще не успели перезаписать – его можно с легкостью восстановить.
Что ж, друзья, приступаем к восстановлению файлов на диске с файловой системой FAT.
Утеря данных в результате использования «DISKPART → CLEAN»
Но, иногда, при использовании данного инструмента системы, что-то может пойти не так. Вы можете случайно выбрать не тот диск или раздел и удалить его.
А в результате, вы получите чистый диск, с отсутствующей файловой системой.
Причём НЕ каждая программа для восстановления данных сможет восстановить утерянные таким образом данные.
Для очистки диска используем команду Diskpart. Перед тем как продолжить убедитесь, что нужный USB-привод, карта памяти или другое устройство очистить которое вы собираетесь, подключено к компьютеру.
Для того чтобы запустить инструмент diskpart, введите соответствующую команду в окне Командной строки и нажмите Enter:Diskpart
Отобразите список дисков, установленных на компьютере введя следующую команду:list disk
Просмотрите результаты выполнения команды и определите номер диска, который необходимо очистить.
Будьте осторожны! Если будет выбран неправильный номер диска, он будет очищен и, возможно, важные данные будут утеряны.
На скриншоте ниже видно, что Диск 0 имеет объём 111 ГБ, а Диск 1 – 15 ГБ. Мы знаем, что нам нужен диск объёмом 15 ГБ. Значит Диск 1 – это USB-диск , а Диск 0 – внутренний жесткий диск компьютера.
После того как был определён номер диска, введите следующую команду заменив знак # на номер диска.
Внимание: Будьте очень внимательны. Если будет указан неправильный номер диска, будут удалены все данные не с того диска.select disk #
Командой diskpart выбран указанный диск. Теперь все действия будут производится с ним. Для полной очистки таблицы раздела введите следующую команду и нажмите Enter.
Внимание: Данная команда удалит все данный на указанном диске! Убедитесь, что у вас есть копии всех важных данных перед тем как продолжить.Clean
Если всё сделано правильно, увидите “очистка диска выполнена успешно”. Закройте командную строку.
Как удалить защищенный, активный и системный разделы жесткого диска?
Для удаления разделов жесткого диска можно воспользоваться функционалом встроенной утилиты «Управление дисками», где для удаления следует просто нажать по необходимому разделу правой кнопкой мыши и выбрать пункт «Удалить том…».
В некоторых случаях это может не сработать, поскольку:
· Логический диск имеет поврежденную файловую систему (можно исправить проверкой Chkdsk ).
· На нем присутствуют сбойные сектора и бед блоки (решить проблему можно при помощи проверки бесплатной программой Victoria ).
· Логический диск защищен от удаления (от удаления защищены системные разделы, скрытые и служебные разделы и т.д.)
Тем не менее существует несколько способов позволяющих удалить абсолютно любой раздел.
Удаление через командную строку в работающей ОС
Для удаления ненужных защищенных разделов в работающей Windows можно воспользоваться командой строкой и встроенной утилитой Diskpart. Данный способ позволит удалить все проблемные разделы, кроме системных и служебных.
Шаг 1. Открываем командную строку от имени администратора и вводим поочередно команды: diskpart , list disk, select disk 0 (в нашем случае раздел расположен на диске 0), list part (команда открывает список разделов на диске).
Шаг 2. Выбираем необходимый раздел командой select partition 4 , после этого вводим команду delete partition для удаления раздела.
Шаг 3. Финальным этапом станет создание нового раздела и его форматирование. Вводим поочередно: create partition primary , format fs=ntfs quick, assign letter Z (команда присваивает букву созданному разделу) и exit .
После выполнения данных действий, раннее заблокированный раздел будет готов к использованию, удалению и другим манипуляциям в меню «Управление дисками» .
Удаление любых разделов
Чтобы провести удаление системных, зарезервированных и скрытых разделов, пользователю понадобиться загрузочная флешка или установочный диск. Загружаемся с них и в меню выбора языка нажимаем сочетание клавиш Shift+F10 для открытия командной строки.
В командной строке, аналогично с предыдущим способом, вводим команды: diskpart, list disk, select disk 0, lis part, select partition 2 (или любой другой раздел, который невозможно удалить) и удаляем его командой del par override .
Стоит отметить, что команда del par override удаляет абсолютно любой раздел, независимо от его атрибутов (особых свойств, запрещающих удаление).
Важно! Удаление некоторых разделов диска может повлиять на его работу, поэтому мы настоятельно не рекомендуем прибегать к удалению защищенных разделов