Перейти к основному содержимому

Как хранятся файлы

Разработчику Архитектору Инженеру

Как хранятся файлы

Хранение файлов — это процесс организации данных на физическом носителе с помощью файловой системы, которая преобразует хаотичное распределение битов в понятную структуру папок и документов. Файловая система выступает в роли посредника между пользователем и физическим устройством, обеспечивая доступ к информации по именам, а не по сложным адресам секторов.

Физический диск представляет собой массив ячеек памяти, называемых секторами. Каждый сектор имеет уникальный номер, который называется LBA (Logical Block Addressing). Сектора объединяются в более крупные блоки — кластеры. Файловая система управляет этими кластерами, назначая им конкретные данные или помечая их как свободные для новой записи.


Структура хранения данных

Реальная структура данных на диске состоит из нескольких уровней абстракции. Пользователь видит дерево папок, операционная система работает с логическими блоками, а физический носитель оперирует магнитными доменами или электрическими зарядами в ячейках флеш-памяти.

Система NTFS, применяемая в современных версиях Windows, построена вокруг центральной таблицы — MFT (Master File Table). Эта таблица содержит запись о каждом файле и папке, расположенных на томе. Каждая запись в MFT имеет фиксированный размер, обычно 1024 байта.

Каждая запись MFT содержит набор атрибутов, описывающих файл:

  • Стандартная информация: флаги доступа, права, временные метки создания и изменения;
  • Имя файла: полное имя объекта в кодировке Unicode;
  • Данные: указатели на кластеры диска, где физически расположены содержимое файла. Если файл малый, его данные могут храниться прямо внутри записи MFT;
  • Расширенные атрибуты: сведения о безопасности, индексы для поиска, альтернативные потоки данных.

Запись в таблице MFT связывает логическое представление файла с физическим расположением на диске через список экстентов. Этот список сопоставляет виртуальные номера кластеров (VCN) внутри файла с реальными номерами кластеров (LCN) на носителе. Благодаря этому механизм позволяет файлу занимать несоседние участки диска, что называется фрагментацией.

Система использует несколько служебных файлов для управления состоянием тома. Файл $Bitmap представляет собой карту занятости, где каждый бит соответствует одному кластеру. Значение «1» означает, что кластер занят данными, значение «0» — свободно. При создании нового файла система ищет последовательность нулей в этой карте и присваивает соответствующие кластеры.


Служебные файлы и системные папки

В корне каждого тома NTFS находятся специальные файлы, начинающиеся со знака доллара ($). Эти объекты невидимы для стандартного пользователя и отвечают за целостность и работоспособность файловой системы.

Название файлаНазначениеОписание функции
$MFTГлавная таблица файловХранит записи обо всех объектах на диске. Повреждение этого файла делает том недоступным.
$MFTMirrЗеркало MFTСодержит первые четыре записи MFT. Используется для восстановления при повреждении основной таблицы.
$LogFileЖурнал транзакцийЗаписывает все изменения структуры файловой системы. Позволяет откатить операции при внезапном отключении питания.
$BitmapКарта занятостиОписывает состояние каждого кластера на диске (занят или свободен).
$VolumeИнформация о томеСодержит метаданные самого раздела, включая серийный номер и версию файловой системы.
$ExtendРасширенияКаталог, содержащий дополнительные подсистемы: квоты, идентификацию объектов, журналы удаления.
$Recycle.BinКорзинаСпециальная папка для перемещенных файлов перед окончательным удалением.

Папка $Recycle.Bin является хранилищем для файлов, перемещенных пользователем в корзину. При удалении файла через графический интерфейс система не стирает его сразу. Она переименовывает файл в формат $R... (где ... — уникальный идентификатор), перемещает его в эту папку и создает в ней скрытый файл $I.... Файл $I... содержит метаданные оригинала: исходное имя, путь расположения и размер. Это позволяет системе восстановить файл при запросе пользователя.

Внутри папки $Extend находится поддиректория $Deleted. Эта область служит транзитной зоной для объектов, удаление которых было инициировано, но еще не завершено полностью. Например, если файл был открыт другим процессом в момент удаления, система перемещает его в этот каталог, чтобы освободить ресурсы. После закрытия процесса запись удаляется окончательно. В случае сбоя системы эта папка может содержать следы удаленных файлов, которые доступны для низкоуровневого анализа.


Устройство системы корзины

Корзина представляет собой механизм промежуточного хранения, позволяющий отменить ошибочное удаление. Архитектура работы корзины отличается от обычного удаления тем, что она сохраняет полные данные файла и его метаданные.

Процесс перемещения файла в корзину включает следующие шаги:

  1. Система проверяет наличие папки $Recycle.Bin в корне диска. Если её нет, создается новая папка с соответствующими правами доступа.
  2. Файл переименовывается в случайный идентификатор, начинающийся с символа $R, например $R8A3F1C$.txt.
  3. Данные файла копируются в новую директорию без изменения содержимого.
  4. Создается файл с именем $I + тот же идентификатор. Внутри него хранится JSON-структура с оригинальным именем, полным путем и размером.
  5. Указатели в родительской папке обновляются: запись о старом файле удаляется, но новые данные появляются в корзине.

Этот подход гарантирует, что пользователь может восстановить файл, просто открыв интерфейс корзины. Система считывает метаданные из файла $I..., восстанавливает оригинальное имя и перемещает объект обратно в исходную папку.

Отличие от принудительного удаления заключается в отсутствии перезаписи. Обычное удаление через командную строку с флагом -Force пропускает этап копирования в корзину и сразу помечает пространство как свободное.


Процесс удаления файлов

При обычном удалении файла через проводник или команду без специальных параметров, система выполняет серию операций над метаданными, не затрагивая физические данные.

Первым шагом становится обновление записи в таблице MFT. Флаг состояния файла меняется с «используется» на «свободно». Имя файла и другие атрибуты остаются в записи, пока не произойдет перезапись этой области новыми данными.

Вторым действием является обновление карты занятости $Bitmap. Бит, соответствующий кластерам, занимаемым файлом, устанавливается в ноль. Теперь файловая система считает эти кластеры доступными для новых записей.

Третьим этапом является удаление ссылки на файл из индекса родительской папки. Дерево каталогов обновляется, и файл исчезает из видимости для пользователя и приложений.

Физические данные остаются на диске в своих кластерах. Они сохраняются в неизменном виде до тех пор, пока файловая система не решит использовать эти кластеры для записи нового файла. Пока место не будет занято новым контентом, исходные данные можно восстановить, просканировав таблицу MFT и найдя записи с флагом свободного состояния.


Физические повреждения носителей

Физические повреждения жестких дисков и твердотельных накопителей приводят к потере данных на уровне секторов. Жесткие диски (HDD) используют магнитные поверхности, где информация хранится в виде намагниченных доменов. Твердотельные накопители (SSD) хранят данные в ячейках флеш-памяти с помощью электрических зарядов.

Типы физических повреждений включают:

  • Бэд-блоки (Bad Blocks): секторы, которые перестали сохранять данные корректно. Файловая система помечает их как нерабочие и перенаправляет обращения на резервные зоны.
  • Механические поломки: выход из строя головок чтения/записи, мотора или плат контроллера. Требуют специализированного оборудования для восстановления.
  • Деградация ячеек SSD: после множества циклов записи ячейки теряют способность удерживать заряд, что приводит к потере данных даже без физического разрушения.
  • Магнитные поля: сильные внешние магнитные поля могут размагнитить поверхность HDD, уничтожив информацию.

При обнаружении бэд-блоков файловая система пытается прочитать данные из резервных областей. Если восстановление невозможно, файл считается поврежденным. В случае полного отказа устройства данные часто требуют услуг профессиональных лабораторий по восстановлению.


Концепция невосстановимого удаления

Обычное удаление оставляет данные на диске доступными для восстановления. Для обеспечения полной конфиденциальности необходимо применить метод многократной перезаписи.

Программа безопасного удаления выполняет алгоритм, при котором она многократно записывает поверх удаляемых данных случайные биты или определенные шаблоны. Шаблоны могут включать последовательности из нулей, единиц или случайных чисел. Количество проходов варьируется в зависимости от уровня требуемой защиты.

После завершения такой процедуры восстановить исходную информацию практически невозможно. Даже использование методов микроскопии, таких как магнитно-силовая микроскопия (Magnetic Force Microscopy), не позволяет различить остаточную намагниченность от предыдущих записей на фоне многократной перезаписи.

Этот процесс превращает данные в бесполезный шум. Метод гарантирует, что никакие программные средства не смогут извлечь содержимое удаленного файла.


Криптографическое уничтожение

Криптографическое уничтожение предлагает альтернативный подход к безопасному удалению, основанный на шифровании данных.

Файл изначально хранится на диске в зашифрованном виде с использованием уникального ключа шифрования. Чтобы удалить файл, система не трогает гигабайты зашифрованных данных. Вместо этого она надежно уничтожает только крошечный ключ шифрования или специальный «заглушку» (stub).

Данные физически остаются на диске в виде набора случайных символов. Без ключа расшифровать их невозможно теоретически. Это действие аналогично выбрасыванию единственного ключа от сейфа в открытый океан. Объем данных сохраняется, но доступ к ним утрачивается навсегда.

Этот метод эффективен для твердотельных накопителей, так как исключает необходимость медленной многократной перезаписи больших объемов памяти. Он обеспечивает мгновенное и гарантированное удаление.


Сравнение методов удаления

Различия между отправкой файла в корзину и безопасным удалением заключаются в степени обработки данных и возможности их восстановления.

Отправка файла в корзину просто прячет файл в системную папку $Recycle.Bin, переименовывая его в $R... и сохраняя метаданные в файле $I.... Данные остаются нетронутыми, и восстановление происходит мгновенно.

Безопасное удаление действует как «сожжение» черновика с последующим перемешиванием пепла. Оно либо перезаписывает данные множеством раз, либо уничтожает ключ шифрования. Восстановление в этом случае невозможно.

Выбор метода зависит от задачи. Если требуется возможность отмены ошибки, используется корзина. Если важна безопасность конфиденциальной информации, применяется безопасное удаление.


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).