Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект ОС(темы1_5).DOC
Скачиваний:
97
Добавлен:
27.05.2015
Размер:
1.81 Mб
Скачать

5.9.3 Восстанавливаемость файловой системы ntfs

Файловая система NTFS является восстанавливаемой файловой системой, однако восстанавливаемость обеспечивается только для системной информации файло­вой системы, то есть каталогов, атрибутов безопасности, битовой карты занято­сти кластеров и других системных файлов. Сохранность данных пользователь^ ских файлов, работа с которыми выполнялась в момент сбоя, в общем случае не гарантируется.

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

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

Журнал регистрации транзакций в NTFS делится на две части: область рестарта и область протоколирования (рис. 8.8).

  1. Область рестарта содержит информацию о том, с какого места необходимо будет начать читать журнал транзакций для проведения процедуры восста­новления системы после сбоя или краха ОС. Эта информация представляет собой указатель на определенную запись в области протоколирования. Для надежности в файле журнала регистрации хранятся две копии области рес­тарта.

  2. Область протоколирования содержит записи обо всех изменениях в системных данных файловой системы, произошедших в результате выполнения транзак­ций в течение некоторого, достаточно большого периода. Все записи иденти­фицируются логическим последовательным номером LSN (Logical Sequence Number). Записи о подоперациях, принадлежащих одной транзакции, образу­ют связанный список: каждая последующая запись содержит номер предыду­щей записи. Заполнение области протоколирования идет циклически: после исчерпания всей памяти, отведенной под область протоколирования, новые записи помещаются на место самых старых.

Существует несколько типов записей в журнале транзакций: запись модифика­ции, запись контрольной точки, запись фиксации транзакции, запись таблицы модификации, запись таблицы модифицированных страниц.

Рис. 8.8. Записи модификации в журнале транзакций

Запись модификации заносится в журнал транзакций относительно каждой под­операции, которая модифицирует системные данные файловой системы. Эта за­пись состоит из двух частей: одна содержит информацию, необходимую системе для повторения этого действия, а другая — информацию для его отмены. Информация о модификации хранится в двух форматах- Физическом и в логическом описаниях. Логическое описание используется программным обеспечением уровня приложений и формулируется в терминах операций, например «выделить фай­ловую запись в MFT» или «удалить имя из корневого индекса». На нижнем уровне программного обеспечения, к которому относятся модули самой NTFS, используется менее компактное, но более простое физическое описание, сводя­щееся к указанию диапазона байт на диске, в которые необходимо поместить оп­ределенные значения.

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

Таблица 8.1. Структура записи модификации

Запись модификации

Информация для повторения транзакции

Информация для отката транзакции

LSN-202

Выделить и инициировать запись для нового файла lotus.doc из таблицы MFT

Удалить запись о файле lotus.doc в таблице MFT

LSN=203

Добавить имя файла в индекс

Исключить имя файла из индекса

LSN=204

Установить биты 3-9 в битовой карте

Обнулить биты 3-9 в битовой карте

Журнал транзакций, как и все остальные файлы, кэшируется в буферах опера­тивной памяти и периодически сбрасывается на диск.

Файловая система NTFS все действия с журналом транзакций выполняет только путем запросов к специальной службе LFS (Log File Service). Эта служба разме­щает в журнале новые записи, сбрасывает на диск все записи до некоторого за­данного номера, считывает записи в прямом и обратном порядке и выполняет некоторые другие действия над записями журнала.

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

Параллельно с регистрацией и выполнением транзакций происходит процесс выталкивания блоков кэша на диск. Сброс на диск измененных блоков выполня­ется в два этапа: сначала сбрасываются блоки журнала, а потом — модифицИ' рованные блоки транзакций. Такой порядок реализуется следующим образом Каждый раз, когда диспетчер кэша принимает решение о том, что определенны модифицированные блоки (не обязательно все) должны быть вытеснены н диск, он сообщает об этом службе LFS. В ответ на это сообщение LFS обращав! ся к диспетчеру кэша с запросом о записи на диск всех измененных блоков журнала. После того как блоки журнала сброшены на диск, сбрасываются на диск модифицированные блоки транзакций, среди которых могут быть, конечно, и бло­ки системных данных файловой системы.

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

Какие же дефекты может иметь файловая система после сбоя?

Во-первых, это несогласованность системных данных, возникшая в результате незавершенности транзакций, которые были начаты еще до момента последнего сброса данных из кэша на диск. На рис. 8.9 показана транзакция А, две подопера­ции которой — 3) и а2 — были сделаны до сброса кэша, а еще две — а3 и а4 — после сброса кэша, К моменту сбоя результаты первых двух подопераций могли быть записаны на диск, в то время как изменения, вызванные подоперациями а3 и а4, отразились только на копиях блоков файловой системы в кэше и были потеряны в результате сбоя. Чтобы устранить несогласованность, вызванную этой причи­ной, требуется сделать откат для всех транзакций, незафиксированных к моменту последнего сброса кэша. Для примера, изображенного на рисунке, такими тран­закциями являются транзакции А и С. В каждый момент времени NTFS распо­лагает списком незафиксированных транзакций, называемым таблицей незавер­шенных транзакций (transaction table). Для каждой незавершенной транзакции эта таблица содержит последовательный номер LSN последней по времени под­операции, выполненной в рамках данной транзакции. По этому номеру может быть найдена вся цепочка подопераций транзакции.

Во-вторых, противоречия в файловой системе могут быть вызваны потерей тех изменений, которые были сделаны транзакциями, завершившимися еще до сброса кэша, но которые не были записаны на диск в ходе последнего сброса. На рисунке такой транзакцией может оказаться транзакция В. Чтобы определить, .какие завершенные транзакции надо повторять, система ведет таблицу модифициро­ванных страниц {dirty page table), находящихся в данный момент в кэше. В таб­лице для каждой модифицированной страницы указывается, какая транзакция вызвала эти изменения. Повторение транзакций, которые имели дело со страни­цами, указанными в данном списке, гарантирует, что ни одно изменение не будет потеряно.

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

Операция контрольная точка выполняется каждые 5'секунд и включает выполнение следующих действий (рис. 8.10). Сначала в области протоколирования журнала транзакций создаются две записи — запись таблицы незавершенных транзакций и запись таблицы модифицированных страниц, содержащие копии соответствующих таблиц. Затем номера этих записей включаются в запись контрольной точки, которая также создается в области протоколирования журнала транзакций. Сделав запись контрольной точки, NTFS помещает ее номер LSN в область рестарта.

Рис. 8.10. Записи операции контрольная точка

Заметим, что процессы создания контрольных точек и сброса блоков данных из кэша на диск протекают асинхронно. Когда в результате сбоя из оперативной па­мяти исчезает вся информация, в том числе из таблиц незавершенных транзакций и модифицированных страниц, состояние этих таблиц, хотя и несколько ус­таревшее, сохраняется на диске в файле журнала транзакций. Кроме того, здесь же имеется несколько более поздних записей, которые были сделаны в период между сохранением таблиц и сбросом кэша (на рисунке это записи Ml, M2, МЗ). При восстановлении файловая система обрабатывает эти записи и вносит из­менения в таблицы незавершенных транзакций и модифицированных страниц, сохраненные в журнале. Так, например, если запись Ml является записью фик­сации транзакции, то соответствующая транзакция исключается из таблицы не­завершенных транзакций, а если это запись модификации, то в таблицу модифи­цированных страниц заносится информация об еще одной странице.

Процесс восстановления файловой системы включает следующие шаги:

1. Чтение области рестарта из файла журнала транзакций и определение номера самой последней по времени записи о контрольной точке.

2. Чтение записи контрольной точки и определение номеров записей таблицы незавершенных транзакций и таблицы модифицированных страниц.

3. Чтение и корректировка таблиц незавершенных транзакций и модифициро­ванных страниц на основании записей, сделанных в журнале транзакций уже после сохранения таблиц в журнале, но еще до записи журнала на диск.

4. Анализ таблицы модифицированных страниц, определение номера самой ран­ней записи модификации страницы.

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

6. Анализ таблицы незавершенных транзакций, определение номера самой позд­ней подоперации, выполненной в рамках незавершенной транзакции.

7. Чтение журнала транзакций в обратном направлении. Учитывая, что все под­операции каждой транзакции связаны в список, система легко переходит от одной записи модификации к другой, извлекает из них информацию, необхо­димую для отмены, и выполняет откат незавершенных транзакций.

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