§2.3. Файлы и их хранение
Оперативная память — это простое и быстрое хранилище данных, однако некоторую информацию хотелось бы сохранять не только до момента выключения компьютера. Для этого существуют жёсткие диски, твердотельные и флеш-накопители. Все эти устройства различаются принципом работы, размером, скоростью и множеством других характеристик. Пользователь, конечно, не работает с ними напрямую — он видит их как набор директорий, в которых лежат файлы. Между пользователем и диском находится целый слой, которой принято называть файловой системой.
Порядок на диске
В общем случае файловая система — это способ разбить большое пространство диска на области объёмом поменьше (файлы), сохраняя возможность менять это разбиение и находить нужные файлы. Представьте себе, что у вас есть большая доска, на которой вы делаете заметки стираемым маркером, разделяя их линиями чтобы не запутаться. Заметок много: чтобы не путаться в них, вы начинаете использовать маркеры разных цветов, или помечать записи символами. Поздравляем — вы изобрели файловую систему. Большинство современных файловых систем поддерживает не только файлы, но и директории (в Windows они называются папками), в которые вложены файлы и другие директории. Это помогает не запутаться в большом количестве файлов: системные файлы лежат отдельно, а ваши документы и фотографии отдельно.
Иногда вам хочется дописать что-то в заметку, и места рядом уже не находится. Тогда вы стираете заметки рядом, или рисуете стрелочки, которыми связываете несколько частей одной заметки. Если подходить к делу неаккуратно, всё написанное быстро станет трудночитаемым. Часть операционной системы, которая выделяет место под новые файлы по запросу, меняет их размеры, следит за свободным местом и за порядком, называется драйвером файловой системы.
Управлять местом на диске сложнее, чем может показаться на первый взгляд. Нужно помнить, какие области диска принадлежат каким файлам, и в каком порядке они расположены. Для этого файловые системы хранят таблицы файлов, в которых описывается все области диска. Такие таблицы обычно располагаются в начале диска и построены так, чтобы поиск файла по названию в них занимал как можно меньше времени. Есть много вариантов таких таблиц — например, некоторые файловые системы имеют разные таблицы для файлов и для описания свободного места на диске.
Из-за постоянного создания, удаления и изменения файлов структура их хранения получается запутанной. Например, мы начали записывать новые данные в конец файла, но место на диске вслед за ним уже занято чем-то ещё. Тогда драйвер файловой системы выделяет место в друой области диска, и оставляет об этом запись в таблице файлов. Файл становится фрагментированным. Например, пользователь создал файлы A, B и C и записал в них данные. После этого он открыл файл B и дописал в него что-то ещё, а затем удалил файл C. В результате данные на диске будут расположены примерно таким образом:
Есть много других особенностей реализации файловых систем, но мы не будем глубоко погружаться в детали. Рассмотрим вместо этого способы извлекать из них информацию, которая на первый взгляд была утеряна безвозвратно. Что делать, если вы или злоумышленник удалили важный файл?
Копаемся в мусоре
После того, как вы написали команду rm
или кликнули «Удалить» в Проводнике, файл не затирается с диска целиком. Сначала он помечается «к удалению» — в Linux и Mac OS файл не будет удалён, пока хотя бы одна программа всё ещё использует его. Когда все такие программы закрылись, запись о файле удаляется из таблицы файлов, и место на диске помечается как свободное. Сами данные файла, однако, не удаляются, чтобы не замедлять работу системы. Поэтому мы можем попробовать прочитать их, посмотрев напрямую на данные на диске. Если файл не был фрагментирован, задача относительно несложная: у многих форматов файлов известны сигнатуры — общепринятые последовательности байтов, которые встречаются в начале файла.
Формат | Шестнадцатеричный вид | ASCII |
---|---|---|
.jpg | ff d8 ff e0 00 10 4a 46 49 46 00 01 | ......JFIF.. |
.png | 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d | .PNG........ |
.gif | 47 49 46 38 39 61 96 00 53 00 87 00 | GIF89a..S... |
.mp3 | 49 44 33 03 00 00 00 0f 6d 4b 54 41 | ID3.....mKTA |
.pdf | 25 50 44 46 2d 31 2e 35 0a 25 d0 d4 | %PDF-1.5.%.. |
.zip | 50 4b 03 04 14 00 00 00 08 00 06 93 | PK.......... |
.exe | 4d 5a 90 00 03 00 00 00 04 00 00 00 | MZ.......... |
Специальные программы, предназначенные для восстановления удалённых файлов, ищут на диске такие последовательности и пытаются воссоздать потерянное. Продвинутые версии таких программ не только распознают большое количество сигнатур, но и могут восстановить фрагментированные файлы, используя особенности конкретных файловых систем.
Мы рассмотрим одну такую программу, PhotoRec. Несмотря на название, она может восстанавливать далеко не только фотографии, но и множество других файлов. Давайте опробуем её на примере небольшого диска, на котором лежали файлы PNG, JPEG, WAV и PDF. Мы будем показывать терминальную версию PhotoRec. Для Windows существует версия с графической оболочкой QPhotoRec, которую также можно скачать с официального сайта. Основные настройки и принцип работы у них совпадают.
Запустить программу из терминала можно командой photorec fs.img
, где fs.img
— образ диска, который мы хотим исследовать. Такие образы содержат точную копию настоящего диска вместе со всей файловой системой. В открывшемся меню необходимо выбрать образ ещё раз и нажать Proceed. Затем нужно выбрать один из разделов на диске, который мы хотим изучить. Разделами на диске называются области фиксированного размера, содержащие файловые системы. Такое разделение позволяет, например, иметь отдельный диск D: под ваши документы и игры на Windows.
После выбора раздела программа запросит тип файловой системы, которую надо просканировать: выберите подходящую опцию. Следующий вопрос будет про то, как именно нужно проанализировать файловую систему: только свободное пространство (Free), или весь раздел целиком (Whole). Наконец, программа покажет вам целый диалог выбора директории для сохранений восстановленных файлов — здесь следует нажать клавишу C
, что означает «сохранить файлы в текущей директории». После этого программа приступит к работе. Дождитесь появления диалогового окна с сообщением о завершении восстановления (Recovery completed), и нажмите клавишу Q
. PhotoRec создаст директорию с названием вида recup_dir.1
, в которую сохранит все найденные файлы.
Другие секреты
Даже если файл был уничтожен полностью (например, перезаписан другим файлом), данные могут частично сохраниться на служебных разделах самого диска. Специалисты умеют извлекать данные даже с физически повреждённых носителей. Верх искусства форензики — извлечение, казалось бы, безвозвратно утерянной информации с перезаписанных областей жёстких (магнитных) дисков. Это возможно благодаря остаточному электромагнитному заряду на блинах диска — пластинах, на которых хранится записи. Иногда таким образом удаётся прочитать файлы, перезаписанные много раз.
Твердотельные накопители, в основе которых лежит флеш-память (та же самая, которая используется во «флешках»), состоят из множества ячеек памяти. При перезаписи информации драйвер старается использовать каждый раз новую, случайно выбранную ячейку. Это необходимо, чтобы уменьшить износ накопителя. Каждая ячейка памяти рассчитана на определённое количество циклов перезаписи (обычно — несколько сотен тысяч), по истечении которых она может выйти из строя. Зная внутреннее устройство и структуру данных конкретного экземпляра флеш-накопителя, можно обнаружить немало интересного.
Выводы
Для длительного хранения данных в компьютерах используются жёсткие диски.
Файловая система на диске нужна, чтобы поддерживать порядок на диске и разделять его на файлы и директории.
В файловых системах используются таблицы, хранящие информацию о точном расположении файлов и о свободном пространстве.
Файлы не удаляются целиком, удаляются лишь записи о них в таблице файлов. Часто удалённые файлы можно восстановить; для этого можно использовать различные утилиты, например PhotoRec.
Существует способы достать удалённую информацию, основанные на внутреннем устройстве работы конкретных типов дисков.