Довольно часто встречаюсь с проблемами, когда пользователь решает, что может самостоятельно восстановить данные с помощью программ из интернета. Обычно это происходит тогда, когда был случайно отформатирован или удален раздел, установлена новая операционная система, и т.п.
Дисковое пространство делится на две области: недоступная пользователю в обычном режиме служебная область, которая содержит сервисную информацию диска (SMART, систему трансляции, оверлеи, адаптивные параметры, подстроечные таблицы и т.п. – все, что необходимо диску для нормальной работы), и пользовательская область, где лежат, соответственно, данные пользователя. В упрощенном виде пользовательская область на отформатированном диске состоит из области файловых таблиц, в которых имеются записи о файлах, лежащих на диске, и из области данных, где, собственно, эти файлы и лежат.
Самостоятельное восстановление данных чревато серьезными последствиями, связанными с перезаписью данных. Многие пользователи заблуждаются, полагая, что операционная система будет записывать их данные в «пустые» (неиспользованные до того момента) места диска. Это не так. Система использует диск весьма рационально, данные записываются по порядку от нулевого сектора (LBA 0) и до конца последовательно. Соответственно, если диск для системы пустой, то она начнет его использовать заново с наименьшего доступного адреса. Вроде бы, все хорошо – ведь если данные записывались последовательно, то при очистке диска и последующей записи данные должны лечь также последовательно, и, соответственно, должны быть рабочими. Но на деле все сложнее. При работе операционной системы происходит неизбежное удаление части файлов. Удаленный файл обычно не удаляется физически (если, конечно, не активирована технология TRIM), удаляется только соответствующая запись в файловых таблицах. Однако при следующем запросе на запись файла система просканирует файловую таблицу, найдет освободившееся место максимально близко к началу диска, и будет записывать новый файл именно туда; при этом будет сформирована новая запись в файловой таблице. А теперь представьте, что эта «дырка» в старых данных, которая была освобождена предыдущим удалением, для нового файла мала: он банально больше. Что сделает операционная система? Она разобьет файл на фрагменты, которые запишет в несколько таких дырок по порядку их наличия от младшего сектора к старшему. Соответственно будет записана и информация об этом файле в файловой таблице: фрагмент 1 лежит тут, фрагмент 2 лежит там. При обращении к файлу система соберет эти фрагменты по адресам, указанным в файловой таблице, и файл будет работать нормально. Это называется фрагментацией.
При форматировании раздела, соответственно, мы потеряем не только информацию о расположении файлов, но и об их фрагментации. К счастью, большинство файловых систем при форматировании не стирают файловые таблицы (так как они банально могут быть очень большими, занимать несколько гигабайт), а лишь меняют заголовок файловой таблицы, в котором указывается количество записей и адрес первой записи (на отформатированном диске, соответственно, количество записей близко к нулю, и адрес первой записи – также). Если мы начинаем использовать отформатированный диск, в область данных файлы начнут записываться с наименьшего доступного LBA, а в области файловых таблиц начнут формироваться новые записи.
Рассмотрим все это на простом примере.
Представим себе файловую систему, в которой имеется 4 файла, один из которых фрагментирован (разбит на 2 фрагмента). Соответственно, имеется 4 записи в файловых таблицах (одна из которых содержит информацию о фрагментированном файле), и 5 участков в области данных, соответствующих нашим четырем файлам.
Форматируем диск. Заголовок файловой системы обнуляется, файловые записи перестают учитываться; соответственно, вся область данных диска теперь помечена как пустая, пригодна для записи. Однако физически и записи в файловой таблице, и данные на диске все еще имеются и могут быть легко восстановлены.
Запускаем программу для восстановления данных. Программа просканирует поверхность, найдет «потерянные» записи и соберет по ним заново файловую систему в памяти компьютера. Теперь данные можно скопировать. Если копировать их на заведомо чистый носитель, то все данные, которые программе удалось найти, за исключением очень старых и многократно переписанных, будут работать; то есть все актуальные данные будут спасены.
Что произойдет, если мы начнем записывать восстановленные данные на тот же диск?
Программа даст системе команду на запись файла. Система просмотрит файловую таблицу, обнаружит, что в ней еще нет записей, и будет использовать наименьший доступный LBA для записи первого сектора файла. Соответственно, система создаст нулевую запись в файловой таблице для нового файла (и сотрет ту, что там была до этого).
Вслед за этим будет записываться второй файл (файл номер 1 для файловой системы). Естественно, создается новая запись в файловой таблице, и поскольку файл записывается для системы «в первый раз», то он ложится аккурат в следующий сектор после окончания первого файла. Но у нас в оригинальной файловой системе этот файл был разбит на два фрагмента – соответственно, программа объединит их в один файл, а система запишет. Пока вроде все нормально, оба записанных файла будут работать. Но вот на третьем файле уже начнутся проблемы. Ведь то место, куда мы записали (вполне успешно) фрагменты 1 и 2 второго файла, частично использовалось старой системой под хранение третьего файла.
При записи третьего файла (файл номер 2 для файловой системы) система также будет использовать первый свободный сектор после окончания последнего записанного (второго) файла. Однако данные о расположении этого файла не изменились, и она возьмет с диска именно тот кусок, где должны лежать данные файла номер 2: то есть кусок только что записанного файла номер 1. И положит его на новое место, переписав то, что там было до этого.
Также будет и с четвертым файлом: программа считает то, место, где лежал этот файл, и положит его туда, куда укажет операционная система – после окончания третьего файла.
Чем более фрагментированной была исходная файловая система, тем больше будут перемешиваться данные при их повторной записи на тот же диск, и тем хуже будет результат такого «восстановления».
Если вы не уверены в том, что не испортите свои данные при их восстановлении – лучше не рисковать. Мы всегда готовы помочь, даже в самых сложных и, казалось бы, безнадежных случаях. Но, увы, восстановить полностью перезаписанные данные не сможем даже мы.
Станислав Корб, ©2018