Проблема, с которой вы сталкиваетесь, связана с фрагментацией. Когда файл записывается на диск, он не всегда сохраняется со всем своим содержимым в строке. Каждый раз, когда вы удаляете файл, он освобождает некоторые блоки на диске, но сразу после него может быть другой файл. Это оставляет кусок свободного пространства размером с удаленный файл (округляется до ближайшего размера кластера). Если вы затем напишите файл, который больше, чем удаленный файл, он может быть записан в этот блок, но только столько, сколько подходит, а остальное будет записано в следующий доступный свободный блок. Этот файл теперь фрагментирован.
Большинство людей считают, что фрагментация диска ухудшает производительность, но, по правде говоря, это гораздо более проблематично и проблематично для восстановления данных. Когда вы теряете файл и нуждаетесь в его восстановлении, если файл не фрагментирован, все, что вам нужно сделать, - это найти начало файла и узнать его размер. Тогда вы можете просто скопировать соответствующее количество кластеров. Это облегчается при использовании подписи файла, которая обычно хранится в заголовке (т. Е. В начале файла). Поэтому все, что вам нужно сделать, - это сканировать диск, искать шаблоны, которые указывают начало файла, а затем копировать определенное количество блоков для восстановления файла (обычно это приводит к некоторому постороннему мусору в конце файла; но это лучше чем ничего).
Однако, если файл фрагментирован, восстановить его становится намного сложнее, поскольку без информации о файловой системе, сообщающей вам, где хранится каждый фрагмент файла, невозможно узнать, какие кластеры принадлежат каким файлам. Вы можете найти файл и получить его часть, например, первые 15 МБ, которые хранятся в строке, но затем эти последние 1 МБ могут быть сохранены где-то еще, и нет способа узнать это.
Если вы пытаетесь восстановить текстовый файл, вы можете вручную найти отдельные фрагменты, разбросанные по всему диску, и соединить их вместе, но даже это будет трудно, если вам случалось редактировать файл и сохранять его несколько раз, делая меняется каждый раз. Как вы узнаете, является ли следующий фрагмент из последней версии файла или из более раннего фрагмента? Вполне возможно, но довольно много времени. С другой стороны, большинство двоичных файлов невозможно восстановить, если они фрагментированы (я полагаю, вы можете найти фрагменты определенных типов двоичных файлов, таких как MP3, в которых можно «просматривать» даже фрагменты).
Дефрагментация диска значительно упрощает восстановление данных. К сожалению, из-за ограниченной возможности записи SSD-дисков многие люди на самом деле меньше дефрагментируют, что повышает риск потери данных.
Допустим, ваши файлы хранятся на диске, как показано ниже. Фиолетовые кластеры - это место, где хранится ваш файл. Первые 15 МБ файла хранятся в строке, но последние 1 МБ хранятся отдельно, ранее на диске. Желтая линия показывает начало файла, где была найдена подпись PDF. Программа нашла подпись и определила файл PDF, но смогла скопировать только первые 15 МБ, прежде чем найти другой файл. Он не может знать, где находится последний 1 МБ, потому что цепочка кластеров, или, скорее, была сохранена в файловой системе.