Общая картина
Создание файла
В этом примере создается файл \dirl\filel.dat; предполагается, что каталог dirl уже
существует в корневом каталоге. Размер файла составляет 4000 байт, а размер
кластера равен 2048 байт. Создание файла начинается с чтения первого сектора файловой системы и обработки загрузочного сектора для определения размера кластера, начального адреса MFT и размера записи MFT. Мы читаем из MFT первую запись (файл $MFT) и обрабатываем ее для определения структуры остальных записей MFT. Информация хранится в атрибуте $DATA. Для нового файла выделяется запись MFT. Чтобы найти неиспользуемую запись, мы обрабатываем атрибут $В1ТМАР файла $MFT. Первая свободная запись (304) выделяется новому файлу, а соответствующий бит карты устанавливается в 1. Происходит инициализация записи MFT 304, для чего мы находим запись в MFT и стираем ее содержимое. В записи создаются атрибуты $STAN- DARD_INFORMATION и $FILE_NAME, а временные штампы инициализируются текущим временем. В заголовке записи MFT устанавливается флаг использования. Далее для файла необходимо выделить два кластера; при этом используется атрибут $DATA файла $Bitmap, находящийся в записи MFT 6. Два смежных кластера, 692 и 693, находятся с использованием алгоритма оптимального подбора. Соответствующие биты карты для кластеров устанавливаются равными 1. В кластеры записывается содержимое файла, и атрибут $DATA обновляется адресами кластеров. В записи MFT обновляются временные штампы. На следующем шаге создается информация об имени файла.
Информация dirl ищется в корневом каталоге, находящемся в записи MFT 5. Мы читаем атрибуты $INDEX_R00T и $INDEX_ALL0CATI0N и перемещаемся по отсортированному дереву. После обнаружения индексного элемента dirl из него берется адрес записи MFT 200. Обновляется время последнего обращения к каталогу. Обработка атрибута $INDEX_R00T записи MFT 200 дает местонахождение файла filel.dat. Для файла создается новый индексный элемент, и все дерево сортируется заново. Это может привести к перемещению индексных элементов внутри узла. У нового индексного элемента в поле базового адреса указана запись MFT 304, а временные штампы и флаги заданы соответствующим образом. Для каталога обновляется время последней модификации и обращения. Каждый из перечисленных этапов может сопровождаться созданием записей в журнале файловой системы $LogFile и журнале изменений \$Extend\$UsrJrnl. Если в системе поддерживаются квоты, новый размер файла включается в квоту пользователя в файле \$Extend\$Quota.Связи между компонентами и итоговое состояние системы показаны на рис. 12.13.
Битоваяя карта записи MFT Журнал $LogFile
Пример удаления файла
Теперь посмотрим, что происходит при удалении файла \dirl\filel.dat. Удаление файла начинается с чтения первого сектора файловой системы и обработки загрузочного сектора для определения размера кластера, начального адреса MFT и размера записи MFT. Мы читаем из MFT первую запись (файл $MFT) и обрабатываем ее для определения структуры остальных записей MFT. Информация хранится в атрибуте $ DATA. Далее необходимо найти каталог dirl, поэтому мы обрабатываем запись MFT корневого каталога (5) и перемещаемся по индексу в атрибутах $INDEX_R00T и $INDEX_ALLOCATION. Из обнаруженного элемента dirl берется адрес записи MFT 200. Обновляется время последнего обращения к каталогу. Мы обрабатываем атрибут $INDEX_R00T записи MFT 200 и ищем в нем элемент filel.dat.
Выясняется, что адрес MFT файла соответствует записи 304. Запись исключается из индекса, элементы узла перемещаются и заменяют исходный элемент. Для каталога обновляется время последней модификации и обращения.Запись MFT 304 освобождается сбросом флага использования. Также обрабатывается атрибут $DATA файла $Bitmap, и в нем обнуляется бит данной записи. Обрабатываются нерезидентные атрибуты записи MFT 304; соответствующие кластеры переводятся в свободное состояние в битовой карте файла \$Bitmap. В нашем примере освобождаются кластеры 692 и 693. Каждый из перечисленных этапов может сопровождаться созданием записей в журнале файловой системы $LogFile и журнале изменений \$Extend\$UsrJrnl. Если в системе поддерживаются квоты, новый размер файла вычитается из квоты пользователя в файле \$Extend\$Quota.
Итоговое состояние показано на рис. 12.14. Обратите внимание: при удалении файла в NTFS Windows не стирает указатели. Таким образом, связь между записью MFT и кластером сохраняется, а связь между именем файла и записью MFT тоже продолжала бы существовать, если бы запись не была потеряна в результате пересортировки.
Битовая карта записи MFT Журнал $LogFile
Рис. 12.14. Состояние системы после удаления файла \dirl\filel.dat. Серым цветом помечены освобождающиеся блоки
Еще по теме Общая картина:
- Общая картина
- Общая картина
- Общая картина
- Общая картина
- КУЛЬТУРНАЯ КАРТИНА МИРА
- Какими мне кажутся картины
- Картина мира.
- Картина мира.
- В. В. Казютинский. Астрономия и современная картина мира, 1996
- Содержание творчества — «картины сердцам