Логические структуры и файловые системы жестких дисков. Основные дисковые структуры и процесс загрузки, страница 8

Каждый занятый файлом кластер содержит в своем элементе FAT номер кластера, который связывает данный кластер со следующим кластером, занятым файлом. Затем этот следующий кластер содержит в своем элементе номер кластера, находящегося после него. Последний занятый файлом кластер отмечается специальным кодом, сообщающим системе о том, что это последний кластер файла; часто им является число 65 535 (16 единиц в двоичном представлении). Поскольку кластеры связаны друг за другом, они называются сцепленными (chained). Рассмотренным способом сцепляется каждый файл, если он, конечно, содержит более одного кластера.

В дополнении к номеру кластера и маркеру конца файла (End-Of-File - EOF) элемент кластера может содержать другие специальные коды, показывающие состояние соответствующего кластера. Специальный, обычно нуль, помещается в элемент FAT каждого свободного (незанятого) кластера. Этим способом операционной системе сообщается, какие кластеры доступны для распределения файлам, которым требуется большее дисковое пространство. Еще один код применяется для указания дефектных (bad) кластеров. Это такие кластеры, в которых дисковая утилита ранее обнаружила один или несколько ненадежных секторов из-за дефектов поверхности диска. Такие кластеры отмечаются как дефектные и в дальнейшем они не привлекаются для хранения данных.

Доступ ко всему файлу производится с использованием комбинации элемента каталога файла и его элементов кластеров в FAT. Пусть имеется дисковый том с кластерами 4 КБ и в каталоге C:\DATA находится файл "PCGUIDE.HTM" размером 20000 байтов. Для хранения файла потребуется пять кластеров.

Предположим, далее, что этот файл необходимо открыть для редактирования. Мы открываем текстовый редактор и указываем ему открыть файл. Для нахождения на диске кластера, содержащего первую "порцию" файла система просто по имени файла обращается к элементу каталога и извлекает номер начального кластера; пусть этот номер равен 12720. Теперь система знает, что необходимо найти на диске кластер с номером 12720 и загрузить первую порцию файла.

Для нахождения второго кластера, занятого файлом, система обращается к элементу FAT для кластера 12720. Там находится другое число - номер следующего занятого файлом кластера. Пусть оно равно 12721. Поэтому следующая порция файла загружается из кластера 12721 и проверяется элемент FAT для кластера 12721 для определения следующего занятого кластером файла. Такой процесс продолжается до обнаружения последнего кластера файла. Система проверяет элемент FAT для определения номера следующего кластера, но вместо допустимого номера кластера обнаруживает там специальное число, например 65 535. Оно сигнализирует системе о том, что "больше кластеров в этом файле нет". Система "понимает", что она считала весь файл.

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

Удаление и восстановление файлов

Одно из достоинств файловой системы FAT заключается в простоте восстановления файлов после удаления, которое объясняется способом удаления файлов. Удаление файла не означает физического выбрасывания содержания файла с диска, а система просто отмечает файл как удаленный.

При удалении файла система помещает код E5h на место первого символа имени файла. Он служит своеобразным маркером, указывающим системе "этот файл удален". Пространство, ранее занятое файлом, становится доступным для других файлов, но содержание его не изменяется.

Со временем освобожденные кластеры удаленного файла, в конце концов, окажутся занятыми другими файлами. Однако при случайном удалении файла его часто можно восстановить, если действовать быстро. Если сразу же запустить утилиту UNDELETE (или UNERASE), она сможет идентифицировать и восстановить удаленный файл. При указании ей отсутствующего первого символа имени файла (при удалении он был перезаписан кодом E5h) утилита сможет восстановить удаленный файл.

Чем меньше времени пройдет между удалением файла и попыткой его восстановления, тем выше вероятность восстановления файла. Очевидно, после дефрагментации файла или интенсивной работы с файлами содержание файла будет потеряно навсегда. Многие утилиты защищают файлы после удаления и их можно легко восстановить. Например, Windows передает все удаляемые файлы в "Recycle Bin" (Корзину), из которой их при необходимости можно восстановить.

Фрагментация и дефрагментация

Поскольку каждый файл хранится как связанный список кластеров, содержащиеся в файле данные могут находиться в любом месте диска. Если имеется файл размером 10 МБ на диске с размером кластера 4096 байтов, файл занимает 2560 кластеров. Эти кластеры могут находиться на разных дорожках, на разных дисках (platters) накопителя, т.е. они могут располагаться в любом месте.

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