Файловые системы с регистрацией намерений
Во многих современных ОС реализованы устойчивые к сбоям файловые системы: Veritas в UnixWare, NTFS в Windows NT/2000/XP и т.д.. Практически все такие ФС основаны на механизме, который по-английски называется intention logging (журнал, регистрация намерений).
Идея журналов регистрации намерений пришла из систем управления базами данных. В СУБД часто возникает задача внесения согласованных изменений в несколько разных структур данных. Например, банковская система переводит миллион долларов с одного счета на другой. СУБД вычитает 1 000 000 из суммы на первом счету, затем пытается добавить ту же величину ко второму счету и в этот момент происходит сбой. Для СУБД этот пример выглядит очень тривиально, но он похож на ситуацию в файловой системе: в каком бы порядке ни производились действия по переносу объекта из одной структуры в другую, сбой в неудачный момент приводит к крайне неприятной ситуации. В СУБД эта проблема была осознана как острая очень давно – ведь миллион долларов всегда был намного дороже одного сектора на диске.
Предварительное решение проблемы заключается в следующем:
- Во-первых, все согласованные изменения в СУБД организуются в блоки, называемые транзакциями (transaction). Каждая транзакция осуществляется как неделимая (атомарная) операция, во время которой никакие другие операции над изменяемыми данными не разрешены.
- Во-вторых, каждая транзакция осуществляется в три этапа (рис. 21).
- система записывает в специальный журнальный файл, что же она собирается делать.
- если запись в журнал была успешной, система выполняет транзакцию.
- если транзакция завершилась нормально, система помечает в журнале, что намерение было успешно реализовано.
Журнал часто называют журналом регистрации намерений (intention log), что очень хорошо отражает суть дела, потому что в этот журнал записываются именно намерения (intentions).
При использовании отложенной записи транзакция считается полностью завершенной, только когда последний блок измененных данных будет физически записан на диск. При этом в системе обычно будет одновременно существовать несколько незавершенных транзакций. Легко понять, что при операциях с самим журналом отложенную запись вообще нельзя использовать.
Если произошел сбой системы, после перезагрузки запускается программа восстановления базы данных. Эта программа просматривает конец журнала:
- если она видит там испорченную запись, то игнорирует ее: сбой произошел во время записи в журнал.
- если все записи помечены как успешно выполненные транзакции, то сбой произошел между транзакциями: ничего особенного не случилось; во всяком случае, ничего исправлять не надо.
- если найденная запись, которая отмечает начатую, но невыполненную транзакцию, то сбой произошел во время этой транзакции. Это наиболее неприятная ситуация, но журнал содержит достаточно информации для того, чтобы или восстановить состояние базы данных до начала транзакции (выполнить откат назад (rollback)), или же доделать предполагавшиеся изменения.
Нужно отметить, что данные, необходимые для выполнения отката, могут иметь большой объем. Фактически это копия всех данных, подвергающихся изменению в ходе транзакции. Многие СУБД, такие как ORACLE, хранят эти данные не в самом журнале, а в специальной области данных, называемой сегмент отката(rollback segment).
Идея журнала намерений достаточно естественно переносится в программу управления файловой системой. Но здесь возникает интересный вопрос – что же считать транзакцией: только операции по распределению пространства на диске или также все операции по изменению данных?
Первый вариант проще в реализации и оказывает меньшее влияние на производительность; зато он гарантирует только целостность самой ФС, но не может гарантировать целостности пользовательских данных, если сбой произойдет в момент записи в файл.
Второй вариант требует выделения сегмента отката и сильно замедляет работу. Действительно, ведь теперь данные пишутся на диск два раза: сначала в сегмент отката, а потом в сам файл. Зато он существенно снижает вероятность порчи пользовательских данных.
Ряд современных ФС с регистрацией намерений поддерживают оба режима работы и предоставляют выбор между этими вариантами администратору системы.
Дата добавления: 2016-06-05; просмотров: 1837;