<<
>>

Общая картина

  Наше знакомство с UFS завершается примерами создания и удаления файла /dirl/fiLe 1.dat, занимающего 25 ООО байт, в файловой системе UFS2.

Создание файла

На высоком уровне процесс создания файла /dir 1/filel.dat сводится к поиску каталога dirl, созданию записи каталога, выделению индексного узла и последующему выделению блоков для содержимого файла.

Точный порядок выделения структур данных зависит от ОС; описанная далее процедура может отличаться от той, что используется в вашей конкретной системе. Для простоты в этом примере игнорируются структуры данных со списками размеров фрагментов и кластеров. Создание файла начинается с чтения суперблока, который занимает 2 Кбайт и находится в файловой системе со смещением 64 Кбайт. Из суперблока мы узнаем, что размер блока равен 16 Кбайт, а размер фрагмента — 2 Кбайт. Каждая группа цилиндров содержит из 32 776 фрагментов и 8256 индексных узлов. Мы также узнаем, что дескриптор группы хранится со смещением 40 фрагментов, а таблица индексных узлов — со смещением 56 фрагментов в каждой группе цилиндров. Далее необходимо обработать индексный узел 2, чтобы найти каталог dirl в корневом каталоге. Используя информацию о количестве индексных узлов в группе, мы определяем, что индексный узел 2 находится в группе цилиндров 0. Следовательно, таблица индексных узлов с информацией об узле 2 начинается в блоке 56. Из блока 56 читается таблица индексных узлов, в которой обрабатывается третья запись (первая запись соответствует индексному узлу 0). Содержимое индексного узла 2 показывает, что структуры записей каталогов для корневого каталога находятся в блоке 1096. Мы читаем содержимое корневого каталога из блока 1096 и обрабатываем его как список записей каталогов. Последовательно перемещаясь вперед по указанным длинам записей (удаленные файлы нас не интересуют), мы в конечном счете приходим к записи с именем dirl.
В записи указан номер индексного узла 16 549. У корневого каталога обновляется А-время.

Местонахождение индексного узла 16 549 определяется делением числа на количество индексных узлов в группе. Так мы определяем, что узел находится в группе цилиндров 2. Группа 2 начинается в блоке 65 552, поэтому ее таблица индексных узлов начинается в блоке 65 608 (если бы использовалась файловая система UFS1, нам также пришлось бы вычислить базовый адрес для группы). Из блока 65 608 читается таблица индексных узлов, в которой обрабатывается запись 37 — относительным номером индексного узла 16 549. Содержимое индексного узла показывает, что содержимое dirl находится в блоке 66 816. Мы читаем содержимое dirl из блока 66 816 и обрабатываем его как список записей каталогов. Нас интересует неиспользуемое пространство в каталоге. Имя filel.dat состоит из 8 символов, поэтому для хранения записи каталога потребуется 16 байт. Имя нового файла включается между двумя существующими именами, для каталога обновляется М- и С-время. Место, отведенное под новую запись, ранее использовалось удаленным файлом. Для создаваемого файла необходимо выделить индексный узел, причем этот узел должен входить в группу своего родительского каталога, то есть в группу 2. Чтобы найти битовую карту индексных узлов, необходимо сначала найти дескриптор группы, удаленный на 48 фрагментов от начала группы. Выясняется, что дескриптор находится в блоке 65 600; из него мы узнаем, что битовая карта индексных узлов хранится в дескрипторе со смещением 168 байт. Кроме того, дескриптор сообщает, что последней была выделена запись индексного узла 16 650. Проверка состояния индексного узла 16 651 показывает, что узел свободен. Соответствующий бит в битовой карте устанавливается, номер последнего выделенного индексного узла в дескрипторе обновляется, а счетчик свободных индексных узлов в дескрипторе группы и в сводке групп цилиндров уменьшается. Адрес индексного узла заносится в запись каталога filel.dat. На следующем этапе мы находим в таблице индексных узлов узел 139 (относительный адрес узла 16 651) и инициализируем его параметры.

Временные штампы инициализируются текущим временем, а счетчик ссылок задается равным 1. Также заполняются поля UID, GID и режима. Размер файла равен 25 000 байт, для хранения его содержимого требуется выделить один блок и пять фрагментов. Прежде всего из дескриптора группы определяется смещение битовой карты фрагментов, которая хранится со смещением 1200. В дескрипторе группы указан номер последнего выделенного блока 67 896. Мы проверяем блок 67 904 по битовой карте свободных фрагментов и определяем, что он свободен. Бит этого блока в карте обнуляется, а счетчик свободных блоков уменьшается. Также обновляется поле указателя на последний выделенный блок. Пять свободных фрагментов находятся по битовой карте (или одному из служебных списков); в нашем примере это фрагменты 74 242-74 246. Биты фрагментов обнуляются, обновляются соответствующие служебные данные. Адрес блока и начальный фрагмент включаются в индексный узел. Содержимое файла filel.dat записывается в выделенный блок и фрагменты.

Итоговое состояние системы показано на рис. 16.8.

Группа цилиндров 2

Рис. 16.8. Итоговое состояние системы после добавления файла dirl/filel.dat

Пример удаления файла

Перейдем к процедуре удаления файла /dirl/filel.dat с использованием методов, характерных для BSD. Как упоминалось в предыдущем разделе, порядок освобождения структур данных зависит от ОС, и описанная далее процедура может отличаться от той, что используется в вашей конкретной системе. Удаление файла начинается с чтения из суперблока структуры данных объемом 2 Кбайт, которая находится в файловой системе со смещением 64 Кбайт. Из суперблока мы узнаем, что размер блока равен 16 Кбайт, а размер фрагмента — 2 Кбайт. Каждая группа цилиндров состоит из 32 776 фрагментов и 8256 индексных узлов. Мы также узнаем, что дескриптор группы хранится со смещением 40 фрагментов, а таблица индексных узлов — со смещением 56 фрагментов в каждой группе цилиндров.

Далее необходимо обработать индексный узел 2, чтобы найти каталог dirl в корневом каталоге.

Используя информацию о количестве индексных узлов в группе, мы определяем, что индексный узел 2 находится в группе цилиндров 0. Следовательно, таблица индексных узлов с информацией об узле 2 начинается в блоке 56. Из блока 56 читается таблица индексных узлов, в которой обрабатывается третья запись (первая запись соответствует индексному узлу 0). Содержимое индексного узла 2 показывает, что структуры записей каталогов для корневого каталога находятся в блоке 1096. Мы читаем содержимое корневого каталога из блока 1096 и обрабатываем его как список записей каталогов. Последовательно перемещаясь вперед по указанным длинам записей (удаленные файлы нас не интересуют), мы в конечном счете приходим к записи с именем dir 1. В записи указан номер индексного узла 16 549. У корневого каталога обновляется А-время. Местонахождение индексного узла 16 549 определяется делением числа на количество индексных узлов в группе. Так мы определяем, что узел находится в группе цилиндров 2. Группа 2 начинается в блоке 65 552, поэтому ее таблица индексных узлов начинается в блоке 65 608. Из блока 65 608 читается таблица индексных узлов, в которой обрабатывается запись 37 — относительным номером индексного узла 16 549, Содержимое индексного узла показывает, что содержимое dirl находится в блоке 66 816. Мы читаем содержимое dirl из блока 66 816 и обрабатываем его как список записей каталогов. Нас интересует запись файла filel.dat. Мы находим эту запись и узнаем, что ей выделен индексный узел 16 651. Чтобы освободить запись каталога, ее длина прибавляется к длине предыдущей записи каталога, относящейся к файлу 12.jpg. В системе Solaris также пришлось бы стереть содержимое указателя на индексный узел. Для каталога dirl обновляется М-, А- и С-время. В результате удаления имени файла счетчик ссылок в индексном узле 16 651 таблицы индексных узлов группы 2 уменьшается на 1. Значение счетчика становится равным 0; это означает, что индексный узел необходимо освободить. Для этого соответствующий разряд битовой карты индексных узлов обнуляется, а в дескрипторе группы и сводке групп цилиндров обновляются счетчики свободных индексных узлов.
В индексном узле стирается поле режима. Также необходимо освободить один блок и пять фрагментов, выделенных для хранения содержимого файла. Для каждого блока или фрагмента устанавливается соответствующий разряд битовой карты блоков/фрагментов и стирается указатель на блок в индексном узле. Размер файла уменьшается при каждом освобождении блока, и в конечном счете он становится равным 0. М~ и С-время индексного узла обновляется в соответствии с внесенными изменениями. В дескрипторе группы и сводке групп цилиндров обновляются счетчики свободных блоков и фрагментов.

Итоговое состояние системы показано на рис. 16.9. Жирные линии и значения

представляют изменения файловой системы в результате удаления.

Рис. 16.9. Итоговое состояние системы после удаления файла dirl/filel.dat

<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Общая картина:

  1. Общая картина
  2. Общая картина
  3. Общая картина
  4. Общая картина
  5. КУЛЬТУРНАЯ КАРТИНА МИРА
  6. Какими мне кажутся картины
  7. Картина мира. 
  8. Картина мира. 
  9. В. В. Казютинский. Астрономия и современная картина мира, 1996
  10. Содержание творчества — «картины сердцам
  11. ОБЩАЯ ЧАСТЬ Раздел I. ОБЩАЯ ХАРАКТЕРИСТИКА УГОЛОВНОГО ПРАВА (ALLGEMAIN GRUNDLAGEN)
  12. §4. ИСХОДНЫЕ ПОНЯТИЯ КУЛЬТУРОЛОГИИ: КУЛЬТУРА, ЦИВИЛИЗАЦИЯ, МЕНТАЛИТЕТ И МЕНТАЛЬНОСТЬ, КУЛЬТУРНАЯ КАРТИНА МИРА
  13. ЭТНОС ВОСТОЧНЫХ СЛАВЯН. ДРЕВНЕСЛАВЯНСКАЯ КАРТИНА МИРА. СЛАВЯНСКИЙ ЭТНОЦЕНТРУМ.
  14. Дискуссия.Место и роль России в современной геополитической картине мира