Здесь будет история о том, как я восстановил файлы и каталоги с жёсткого диска, который превратился в неразмеченную область, был частично отформатирован, разбит на новые разделы, на один из которых и была установлена новая система Linux.
Коротко о том как «всё упало»:
Я купил себе дополнительный диск (SSD 240GB). Первым делом нужно было поставить на него операционную систему. И если бы я сделал всё как в «доке»: скачал образ, создал флешку Linux LiveUSB, перезагрузился, переустановился — этой статьи бы не было. Но, последние пару лет, я использовал VirtualBox и VBoxManage для установки операционных систем на различные носители. Через VBoxManage я создал «образ-ссылку» на свой новый SSD. А потом мне пришлось
перезапустить комп. После этого я,
ничего не перепроверив, запустил VirtualBox. Установщик показал мне диск в 240GB. Я благополучно создал разделы (150 GB — fileSystem, 10GB — swap, 80GB — data) и продолжил установку. Установщик успешно создал разделы, отформатировал их и установил систему в раздел fileSystem. Но оказалось что «образ-ссылка» вела на мой старый рабочий HDD.
Итак, диск HDD 750GB. Структура диска раньше:
- ~600GB — EXT4 — Раздел со всеми моими данными и проектами (метка тома «data»)
- ~15GB — SWAP — Подкачка (это раздел специально для Linux)
- ~135GB — EXT4 — Раздел с операционной системой Linux
Структура диска после моей ошибки:
- ~150GB — EXT4 — Раздел с операционной системой Linux
- ~10GB — SWAP — Подкачка (это раздел специально для Linux)
- ~80GB — EXT4 — Раздел для данных (метка тома «data»)
- ~510GB — неразмеченная область
Мои инструменты:
- USB-FLASH — 8GB. Это загрузочная флешка с Kali Linux LiveUSB
- USB-HDD — 2TB
- SSD — 240GB. Это мой новый дополнительный диск
День первый. testdisk
testdisk — пожалуй, лучшая программа для восстановления файлов и таблиц разделов. Она есть и на Windows и на Linux.
Это самая первая программа которой я воспользовался. Я уже работал с ней пару раз, когда «безвозвратно» удалял то, что требовалось «возвратить». И сначала я даже был уверен в том, что смогу всё легко исправить, используя testdisk. Ведь диск был отформатирован «быстрым способом». Да, на него была установлена новая система, но она весит примерно ~5GB. Т.е. ~745GB могут быть вообще не тронуты.
Запускаю Kali Linux LiveUSB и открываю терминал:
sudo -i
fdisk -l
На экране видно:
- Disk /dev/sda — это моя флешка. С неё сейчас запущен Kali Linux.
- Disk /dev/sdb — это мой «повреждённый» HDD
- Disk /dev/loop0 — это что-то типа файловой системы LiveUSB, запущенный с флешки
Для тех, кто не знает что такое GiB, кратко: MB, GB, TB… — это величины байтов кратные 1000, а MiB, GiB, TiB… — величины кратные 1024. Обычно принято указывать величины кратные 1000, т.к. они более «человекопонятно» передают размер. Именно их вы видите чаще всего. В данном случае число 698.64GiB — это примерно 750GB, что видно по числам дальше 750156374016.
Таблица разделов на диске:
- /dev/sdb1 — здесь сейчас стоит ошибочно поставленная система Linux
- /dev/sdb2 — грубо говоря — это /dev/sdb5 + /dev/sdb6
- /dev/sdb5 — это swap. Это раздел подкачки для Linux
- /dev/sdb6 — это просто раздел, созданный для хранения данных
Далее пишу в терминале:
testdisk
После нажатия
ENTER
появляется следующее:
Нажимаю
[No Log]
— т.к. никаких логов мне не нужно:
Выбираю свой старый HDD
/dev/sdb
и нажимаю
[Proceed]
:
Это типы таблиц разделов. Кстати, testdisk не случайно подсветил тип
[Intel]
— почти всегда testdisk сам знает нужный тип. Для разделов FAT, NTFS, EXT2/3/4 нужно выбрать тип
[Intel]
. Выбираю и вижу это:
Мне нужен анализ диска. Нажимаю
[Analyse]
:
Здесь сразу видно, что ничего не понятно. Нажимаю
[Quick Search]
и…
… и testdisk сразу же показал мне мои старые разделы. Внизу есть подсказка — "
P: list files
". Я спускаюсь на третий раздел и нажимаю
[P]
:
Это моя старая файловая система. Для программы testdisk этот раздел «цел и невредим». Внизу есть дополнительные подсказки, где вполне понятно, что я без труда могу скопировать данные отсюда. Действительно, я подключил свой USB-HDD и скопировал на него пару нужных мне конфигов.
Нажимаю
[q]
для возврата.
Выбираю свой первый раздел, где содержится «вся моя жизнь». Нажимаю
[P]
и…
и вижу это:
Can't open filesystem. Filesystem seems damaged
Нажимаю
[Quit]
, чтобы вернуться к списку разделов (предыдущая картинка), далее жму
[Enter]
:
Я бы мог нажать
[Write]
и записать эту таблицу на диск, т.е. эти разделы восстановятся. И я бы сделал это, если бы testdisk показал мне файлы в разделе «data». Но этот раздел повреждён.
Я пытаюсь думать. Может быть testdisk немного неправильно распознал этот раздел? Нужно выполнить глубинный поиск. Это то, что необходимо сделать, если testdisk не показал вам нужных разделов. Глубинный поиск. Я нажимаю
[Deeper Search]
.
Итак. Пошёл глубинный поиск. Через несколько часов я вижу это:
(Терминал изменился потому, что эти скрины я сделал вам со своей «новой» системы, т.к. LiveUSB вырубился. Не из-за testdisk. Вывод 100% идентичный. Просто не обращайте внимания.)
На самом деле — выбирать здесь нечего. Единственное что можно сделать это нажать
[Continue]
. Нажимаю:
Все, что я понял в результате «гугления» — это сообщение можно смело проигнорировать. Игнорирую это. Нажимаю
[Continue]
:
Раньше, на моём HDD и правда был раздел NTFS — пару лет назад. Раньше у него была другая структура и именно поэтому раздел «data» стоит вначале, а fileSystem — в конце. На самом деле всё это неважно. Важно то, что нигде, кроме раздела с операционной системой (файлы в котором я вам уже показывал), никаких данных нет.
В моём случае testdisk изначально нашёл правильную структуру диска. Но если ваш случай отличается от моего, то вам нужно будет самостоятельно выделить «ваши» разделы «боковыми стрелочками» (чтобы они светились «зелёным») как-то так:
Нажать
[Enter]
и…
и нажать
[Write]
. Я поставил «Звёздочку» на нижний раздел. Вроде бы так правильней, т.к. этот раздел загрузочный, но если что — testdisk сам разбёрется и сделает всё правильно.
Но я не нажимаю
[Write]
, т.к. раздел «data» всё так же повреждён. Я не знаю что делать дальше и начинаю «гуглить».
Почти все инструкции, которые я нашёл — это чуть ли не «копипаст» одной и той же «доки» по testdisk, которую вы найдёте без труда. В двух словах это:
- Запускаем testdisk
- Нажимаем
[Quick search]
- Нажимаем
[Deeper search]
- Выбираем разделы с целыми данными
- Нажимаем
[Write]
и хеппи-энд. Ваши данные восстановлены.
А что делать, если я вижу это:
Cant't open filesystem. Filesystem seems damaged
?
Я потратил какое-то время, чтобы найти точную инструкцию, чёткий план — как действовать в этой ситуации, но, рекомендации на форумах часто отличались. Вообще, казалось, что «все потеряно». Я начал искать другие программы по восстановлению данных. Лучшая рекомендация, которая действительно внушала доверие, звучала примерно так:
Если вы уже уничтожили вашу систему, самое худшее что вы можете сделать — это попытаться исправить ситуацию, не понимая, что именно вы делаете. Единственное, что вам нужно сделать — это оставить всё как есть и доверить восстановление данных специализированному ПО. Только так, но никак иначе.
Именно этому совету я и последовал. Я так и не нажал
[Write]
в программе testdisk и просто закрыл её. Просто закрыл терминал.
В комплекте с testdisk идет ещё одна программа для восстановления данных под названием photorec. На ней я не буду особо акцентироваться — лишь покажу скрины, вдруг кому-то пригодится.
Её интерфейс, вначале такой же как и у testdisk.
Пишу в терминале:
photorec
Выбираю свой старый HDD и вижу это:
Первый раздел — это весь жёсткий диск, он мне и нужен. Выбираю. Далее действую по инструкции. И процесс пошёл.
Этот скриншот наглядно показывает то, что делает photorec. Она просто восстанавливает всё что найдёт (из того что вы указали в опциях). Без каталогов и без правильных названий. Если вам будет нужно восстановить картинки или видео, то эта штука точно выполнит свою задачу. Но для меня она была бесполезна. Через пару минут работы она нашла сотни тысяч текстовых файлов, которых будет несколько миллионов в дальнейшем. Из-за каталогов node_modules. Будет «нереально» восстановить структуру проектов среди всего этого «добра». Закрываю её.
День второй. R-Linux
Единственная «свежая» программа, под Linux, для восстановления структуры данных, которую я нашёл, была
R-Linux (это бесплатная версия R-Studio, которая работает только с файловыми системами EXT/2/3/4). Всё так же, из-под Kali LiveUSB, я установил её и запустил сканирование. И через десять минут меня ждал чёрный экран.
Как я понял, программе R-Linux, для анализа диска 750GB, нужно ~2.5GB оперативной памяти и ~1.5GB — swap. Походу из-за этого она «роняла» LiveUSB. Но тогда я этого не знал — этого нигде не написано. Я не знал что мне делать, но точно решил одно — мне нужна стабильная рабочая система, для дальнейшего поиска решений.
Я отключил свой старый «повреждённый» HDD (на всякий случай), снова поставил новый SSD и установил на него Kali Linux, стандартно, через свою загрузочную флешку. Немного «причесал» систему, чтобы в ней было комфортно работать, установил нужные мне программы. После чего, снова подключил старый «повреждённый» HDD.
Далее, я снова поставил R-Linux и запустил её. Я выбираю свой HDD (ST975042OAS) и нажимаю
[Сканировать]
. Несколько часов ожидания, и на экране появились «новые разделы» c названием «Распознанный/4/5/6/7»:
Мне нужен «Распознанный4». Выбираю его и нажимаю
[Показать содержимое диска]
:
Не верится. Кажется, что программа нашла всё что раньше было на диске. Действительно, мне удалось восстановить и разную документацию, и музыку и, даже, iso-образы — всё это находилось, как бы, «неглубоко» внутри каталогов. Но счастье было недолгим. Каталоги с моими «рабочими» проектами содержат сотни файлов и подкаталогов и там оказалось всё очень печально:
Оказалось, что размер многих файлов равен нулю. Т.е они пусты. Также, не хватало большого количества каталогов, а где-то встречались лишние, вероятно созданные и удалённые когда-то. В общем, несколько часов, буквально по крупицам, я собирал свои проекты. Я пользовался поиском, просто «ходил» по каталогам и смотрел что там лежит. Почти везде чего-то не хватало. Примерно три четверти моих проектов оказались просто «разрушены». Я был в полнейшем отчаянии, потому что, то что было мне действительно необходимо, я так и не смог отыскать и восстановить.
Я был уверен, что если программа смогла восстановить хотя бы эту структуру, то всё то, что потеряно — потеряно навсегда. Просто уничтожено. Но, безуспешно перемещаясь по каталогам с названием "$InodeDir...", я наткнулся на каталоги с логами. Файлов с логами, в каждом каталоге, должно было быть около трёхсот. Но R-Linux восстановила, в каждом каталоге, ровно 100! Это важно — в каждом каталоге их было ровно 100 штук, не больше. Это же не совпадение! И тут я подумал, что если алгоритм программы имеет какую-то «глубину» восстановления и что, на самом деле, ещё не всё потеряно — просто нужно больше этой самой «глубины». Но в параметрах программы ничего такого не было.
В общем, я решил что попробую поставить платную
R-Studio и посмотреть что будет. Итак, я установил её, запустил и нажал
[Сканировать]
:
Она нашла гораздо больше разделов, чем её «бесплатная» версия. В том числе разделы FAT и NTFS, которые были на диске раньше. Но меня интересует только раздел [Распознанный102]. Выбираю его и нажимаю [Показать файлы]. К сожалению, результат оказался таким же. Т.е. структура файлов и каталогов была, кажется, такой же, как и в программе «R-Linux». По крайней мере то, что мне было нужно, там не было.
День третий, четвёртый, пятый… Программы для Windows
Я начал искать другие программы для восстановления файловой структуры. Программы работающие как «photorec» меня не интересовали (но, я так же «потестил»
foremost, extundelete, ext4Magic и ещё несколько — безрезультатно.). Но оказалось, что никаких других актуальных программ восстановления файлов и каталогов под Linux, на нашей планете, больше нет. Зато под Windows их десятки и многие из тех что «на слуху», позволяют работать с образами дисков.
План был такой:
- На свой USB-HDD я копирую образ своего повреждённого HDD.
- Ставлю VirtualBox и создаю виртуалку с Windows.
- «Расшариваю» этой виртуалке свой USB-HDD.
- Устанавливаю различные программы для восстановления файлов и разделов и смотрю что будет.
Чтобы создать образ повреждённого диска, необходимо выполнить команду:
sudo dd if="/dev/DISKNAME" of="/PATH/TO/IMAGE.dd" conv=sync,noerror
Как я понял, лучше использовать именно «dd» (т.к. все пишут что — «лучше использовать именно „dd“»), где:
if
— это мой жёсткий диск. Используйте sudo fdisk -l, чтобы узнать точный путь вашего диска
of
— это путь к создаваемому образу
noerror
— укажите обязательно, иначе создание прервётся, если будет ошибка. У меня сыпались сотни ошибок в конце операции
sync
— как я понял, необходим, если вы работаете с «повреждённым» диском, но это не точно
Несколько дней я читал, искал и устанавливал разные программы на виртуалку Windows. Искал, устанавливал, запускал сканирование, ждал, разочаровывался. Скачивал следующую, устанавливал, ждал, разочаровывался. Устанавливал, ждал, разочаровывался.
Я не буду писать их названий, думаю это будет неправильно, поскольку они не справились. Вообще, оказалось что, большая часть «популярных» программ — это что-то типа «photorec с платным графическим интерфейсом». Лишь, паре из них удалось найти что-то, похожее на правду, но результат был гораздо хуже чем у R-Linux, другие вообще нашли только файлы от новой установленной операционной системы. Будь у меня FAT или NTFS, возможно результат был бы лучше — есть программы, которые работают только с ними.
Последняя надежда
Всё то время, пока «программы со стопроцентным результатом» творили свою магию, я продолжал изучать варианты, как ещё можно восстановить данные.
Свою основную «ставку» я сделал на набор программ
sleuthkit. Это набор консольных программ для анализа жёстких дисков. Ещё есть программа
AutoPsy, которая «под капотом», работает именно на них. Я также попробовал AutoPsy под Windows и под Linux — тоже безрезультатно.
В общем, я снова перешел в терминал и принялся изучать sleuthkit. Я вводил разные команды, но постоянно получал ошибки раздела. Проблема была в том, что я работал с образом всего жёсткого диска. Т.е. мне обязательно нужно было прописывать «offset» — точку, начала «повреждённого» раздела жёсткого диска. И вроде, казалось, что я всё делаю правильно — но ничего не получалось (я так и не разобрался с ними до конца, поэтому не буду приводить примеры команд — мало ли). Тогда я решил, что создам образ конкретного повреждённого раздела и буду работать с ним. Я снова вспомнил про testdisk.
Пишу в терминале:
testdisk /path/to/image.dd
Далее всё как в начале статьи.
[No Log] -> [Proceed] -> [Intel] -> [Analyse] -> [Quick Search]
. Снова вижу свои старые разделы. Нажимаю «Enter». В прошлый раз я работал с образом. Но сейчас восстановлю разделы на реальном диске:
testdisk правильно видит мои старые разделы. Если у вас не так, то вам нужно будет нажать [Deeper Search] и выбрать их. Я уже писал об этом выше. Я же нажимаю
[Write]
:
Подтверждаю, что готов записать таблицу, нажимая
[y]
:
Нажимаю [OK]. Появляется это окно:
Нажимаю
[Advanced]
:
Теперь здесь видны мои «старые» правильные разделы. Выбираю первый «data», он всё так же повреждён, но мне нужно лишь создать его образ. Нажимаю
[Image Creation]
, указываю папку для сохранения. Будьте внимательны — testdisk создаст образ под названием «image.dd». На всякий случай, убедитесь что в папке назначения нет файла с таким именем (а то мало ли). Начинается создание образа раздела.
Когда образ раздела был создан, я подумал, а что будет, если я попробую «прогнать» его через R-Linux? Я снова запустил её:
Обратите внимание на таблицу разделов «бывшего повреждённого» диска ST9750420AS. testdisk «вернул» ему его старую таблицу разделов (но раздел «data» всё так же повреждён).
В прошлый раз я выбрал образ раздела, сейчас же, выберу реальный «воссозданный» «Раздел1». Нажимаю
[Показать содержимое диска]
и буквально через 40 минут вижу это (правая часть картинки):
Видите небольшую разницу между разделом «Распознанный4», появившимся после сканирования в начале статьи, и восстановленным разделом «Раздел1». Когда я «прошелся» по каталогам, оказалось, что почти все они целы. Визуально, файлы и проекты на месте. Даже логи лежали там, где должны были лежать и теперь их больше 100 в каждом каталоге. Серьёзно? И это то, что нужно было сделать? Т.е. я даже пятичасового сканирования не запускал. Это было просто невероятно, особенно после недели бессонницы.
Оказалось, что почти все мои данные в порядке. Разумеется что были и повреждённые файлы. Было много мусорных файлов и каталогов. Я не закрывал R-Linux и через поиск искал недостающее. За пару дней я восстановил всё что было нужно.
Немного экспериментов
Теперь я спокоен. Я всё восстановил. Также у меня сохранён образ моего раздела. Я решил немного «поэкспериментировать» и подробнее изучить рекомендации из интернета. Но эксперименты эти оказались недолгими.
По запросу, "
Cant't open filesystem. Filesystem seems damaged
", в поисковике, единственное что вы найдёте — это ветки форумов с печальным концом. Я где-то нашёл рекомендацию, что для восстановления структуры данных можно попробовать команду (
НЕ ВВОДИТЕ ЕЁ) "
fsck -y /dev/DISKNAME
" и она «автоматически всё поправит». Я попробовал её и вот результат:
Она и правда восстановила каталоги на моём разделе — только это каталоги ошибочно поставленной операционной системы. И как я понял — «откатиться» назад нельзя.
И даже testdisk теперь ничего не видит. Даже метка «data» слетела:
И сканирование, разумеется, ни к чему не привело. Старой структуры больше нет. Вот теперь все мои каталоги окончательно разрушены. Одной единственной командой. Как же хорошо, что я не вводил ничего лишнего в начале.
Заключение
Как вы поняли, я не эксперт в восстановлении данных. Но как показал личный опыт — многие авторы статей и рекомендаций, в интернете, тоже далеко не эксперты.
Я думаю, что если ваш жёсткий диск «сломался» в результате механического повреждения, то единственный вариант — это обращение в сервис. Но если вы случайно удалили, изменили, потеряли ваши разделы, то шансы на самостоятельное восстановление данных всё-таки есть, единственное что нужно сделать — это немного помочь специализированным программам. Нужно дать им именно повреждённые разделы.
Ниже я напишу план действий, которым воспользуюсь, если подобная ситуация повторится со мной, либо с моими близкими. Вы можете последовать ему, разумеется, под вашу ответственность:
- Создать LiveUSB (Linux, Windows — не важно, главное, чтобы был testdisk).
- Через LiveUSB запустить testdisk и найти старые разделы (через
[Quick Search]
и [Deeper Search]
). Если данные на них видны, то можно спокойно сохранить их, разумеется, на другой жёсткий диск. Если нет — то идти дальше по пунктам.
- Если есть возможность, лучше создать образ всего жёсткого диска и работать только с ним. Это может сделать почти любая программа для восстановления данных. В Linux можно воспользоваться командой
sudo dd if="/dev/DISKNAME" of="/PATH/TO/IMAGE.dd" conv=sync,noerror
(ее описание есть выше).
- LiveUSB — это, конечно, хорошо, но как показал опыт, не всякая программа будет работать в ней. R-Linux работать отказалась. Виртуалка, кстати, тоже зависала несколько раз. Поэтому, скорее всего, нужна будет полноценная установленная система (Linux, Windows — не важно).
- Далее снова открыть testdisk. Если есть образ диска, то открыть его так: testdisk /path/to/image.dd. Найти свои старые разделы, выбрать их и нажать [Write] (вверху есть подробная инструкция). Это единственная программа, которой я позволю вносить изменения на диск (т.к. в случае ошибки всегда можно повторить процедуру). Если есть возможность, нужно создать через testdisk образы восстановленных разделов.
- Поставить программы для восстановления данных и «скормить» им восстановленные testdisk-ом разделы, а лучше их образы. Не позволять программам вносить изменений (если нет сохранённых образов разделов) — они должны только показать данные, которые можно будет восстановить.
Не забывайте делать коммиты, чаще используйте bitbucket и github. И никогда не откладывайте резервное копирование. Удачи вам!