Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 19 Зашита.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
221 Кб
Скачать
☆

Записи контрольной точки

      Помимо записей модификации, NTFS периодически помещает в журнал транзакций запись контрольной точки, как показано на рис. 4-4.

       Запись контрольной точки помогает NTFS определить, какая обработка необходима для восстановления тома, если сбой произошел немедленно после помещения этой записи в журнал. Благодаря информации записи контрольной точки NTFS. например, знает, как далеко назад ей нужно пройти по журналу, чтобы начать восстановление. Добавив новую запись контрольной точки, NTFS записывает ее LSN в область рестарта, так что, начиная восстановление после сот системы, она может быстро найти самую последнюю запись контрольной точки

 

Рис. 4-4. Запись контрольной точки в журнале транзакций.

Хотя LFS и имитирует для NTFS бесконечность журнала транзакций, на самом деле он не бесконечен. Значительный размер журнала транзакций и часта” вставка записей контрольной точки (операция, которая обычно освобождает пространство в файле журнала) делают вероятность его переполнения достаточно малой. Тем не менее, LFS учитывает такую возможность, отслеживая несколько значений:

  • размер свободного пространства в журнале;

  • размер пространства, необходимого для помещения в журнал следующей записи и для отмены этого действия, если потребуется;

  • размер пространства, необходимого для отката всех активных (не подтвержденных) транзакций, если это потребуется.

Если в журнале окажется недостаточно места для суммы последних двух пунктов, то LFS возвращает ошибку "переполнение журнала транзакций", и NTFS генерирует исключение. Обработчик исключений NTFS откатывает текущую транзакцию и помещает ее в очередь для рестарта через некоторое время.

Чтобы освободить пространство в журнале транзакций, NTFS должна временно приостановить ввод-вывод в системе. Для этого она блокирует создание и удаление файлов, после чего запрашивает монопольный доступ ко всем открытым файлам. Постепенно активные транзакции либо успешно завершаются, либо получают исключение "переполнение журнала транзакций". Последние NTFS откатывает и помещает в очередь.

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

Описанный сценарий — это один из примеров того, как NTFS использует журнал транзакций не только для восстановления ФС, но и для исправления ошибок при нормальной работе.

Восстановление

       NTFS автоматически выполняет восстановление диска при первом (после загрузки системы) обращении к нему программы. Если восстановление не требуется, процесс является тривиальным. При восстановлении используются две таблицы, которые NTFS поддерживает в памяти:

  • Таблица транзакций (transaction table) предназначена для отслеживания транзакций, которые были начаты, но еще не подтверждены. Подоперации этих транзакций должны быть удалены с диска в процессе восстановления.

  • В таблицу измененных страниц (dirty page table) записывается информация о том, какие страницы кэша содержат изменения структуры файловой системы, еще не записанные на диск. Эти данные в процессе восстановления должны быть сброшены на диск.

Каждые 5 секунд NTFS помещает в файл журнала транзакций запись контрольной точки. Непосредственно перед этим она обращается к LFS для сохранения в журнале текущей копии таблицы транзакций и таблицы измененных страниц. Затем NTFS запоминает в записи контрольной точки LSN записей журнала, содержащих копии таблиц. В начале процесса восстановления после сбоя системы NTFS обращается к LFS для поиска записей журнала транзакций, содержащих самую последнюю запись контрольной точки и самые последние копии упомянутых выше таблиц. Затем NTFS копирует эти таблицы в память.

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

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

Каждый проход имеет свое назначение: анализ; повтор транзакций; отмена транзакций.