В системе должны быть определены транзакции – неделимые работы, которые не могут быть выполнены частично. Они либо выполняются полностью, либо вообще не выполняются.
Модель неделимой транзакции пришла из бизнеса. Пусть, например, идет переговорный процесс двух фирм о покупке-продаже некоторого товара. В процессе переговоров условия договора могут многократно меняться, уточняться. Пока договор еще не подписан обеими сторонами, каждая из них может от него отказаться. Но после подписания контракта сделка должна быть выполнена от начала и до конца. Если контракт не подписан, то любые действия, которые были уже проделаны, отменяются или объявляются недействительными.
Незавершенная операция с диском несет угрозу целостности файловой системы. Необходимо протоколировать все изменения, происходящие в рамках транзакции, чтобы на основе этой информации в случае прерывания транзакции можно было отменить все уже выполненные подоперации, то есть сделать так называемый откат транзакции.
Перед изменением какого-либо блока данных на диске или в дисковом КЭШе производится запись в специальный системный журнал – журнал транзакций, где отмечается, какая транзакция делает изменения, какой файл и какой блок изменяются и каковы старое и новое значения изменяемого блока.
ФС NTFS являются восстанавливаемой файловой системой, но восстанавливаемость обеспечивается только для системной информации файловой системы, то есть каталогов, атрибутов безопасности, битовой карты занятости кластеров и других системных файлов. Сохранность данных пользовательских файлов, работа с которыми выполнялась в момент сбоя, в общем случае не гарантируется.
Для повышения производительности ФС NTFS использует дисковый кэш, то есть все изменения файлов, каталогов и управляющей информации выполняются сначала над копиями соответствующих блоков в буферах оперативной памяти и только спустя некоторое время переносятся на диск. Кэширование повышает риск разрушения файловой системы. В таких условиях NTFS обеспечивает отказоустойчивость с помощью технологии протоколирования транзакций и восстановления системных данных.
Журнал транзакций в NTFS делиться на две части: область рестарта и область протоколирования.
· Область рестарта содержит информацию о том, с какого места необходимо будет начать читать журнал транзакций для проведения процедуры восстановления системы после сбоя или краха ОС. Эта информация представляет собой указатель на определенную запись в области протоколирования. Для надежности в файле журнала регистрации хранятся две копии области рестарта.
· Область протоколирования содержит записи обо всех изменениях в системных данных файловой системы, произошедших в результате выполнения транзакций в течение некоторого периода. Записи о подоперациях, принадлежащих одной транзакции, образуют связанный список: каждая последующая запись содержит номер предыдущей записи. Заполнение области протоколирования идет циклически: после исчерпания всей памяти, отведенной под область протоколирования, новые записи помещаются на место самых старых.
Процесс восстановления файловой системы включает следующие шаги:
1)Чтение области рестарта из файла журнала транзакций и определение номера самой последней по времени записи о контрольной точке.
2)Чтение записи контрольной точки и определение номеров записей таблицы незавершенных транзакций и таблицы модифицированных страниц.
3)Чтение и корректировка таблиц таблицы незавершенных транзакций и таблицы модифицированных страниц на основании записей, сделанных в журнале транзакций уже после сохранения таблиц в журнале, но еще до записи журнала на диск.
4)Анализ таблицы модифицированных страниц, определение номера самой ранней записи модификации страницы.
5)Чтение журнала транзакций в прямом направлении, начиная с самой ранней записи модификации, найденной при анализе таблицы модифицированных страниц. При этом система выполняет повторение завершенных транзакций, в результате которого устраняются все несоответствия файловой системы, вызванные потерями модифицированных страниц в КЭШе во время сбоя или краха ОС.
6)Анализ таблицы незавершенных транзакций, определение номера самой поздней подоперации, выполненной в рамках незавершенных транзакций.
7)Чтение журнала транзакций в обратном направлении. Учитывая, что все подоперации каждой транзакции связаны в список, система легко переходит от одной записи модификации к другой, извлекает из них информацию, необходимую для отмены, и выполняет откат незавершенных транзакций.