Поделиться через


Общие сведения о файловой системе общих журналов

Общая файловая система журналов (CLFS) — это служба ведения журнала общего назначения, которая может использоваться программными клиентами, работающими в пользовательском режиме или в режиме ядра. В этой документации рассматривается интерфейс CLFS для клиентов в режиме ядра. Сведения об интерфейсе пользовательского режима см. в статье Common Log File System in the Microsoft Windows SDK.

CLFS инкапсулирует все функциональные возможности алгоритма восстановления и изоляции семантики эксплойтов (ARIES). Однако интерфейс драйвера устройств CLFS (DDI) не ограничивается поддержкой ARIES; он хорошо подходит для различных сценариев ведения журнала.

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

CLFS поддерживает выделенные журналы и мультиплексированные журналы. Выделенный журнал содержит один поток записей журналов, используемых всеми клиентами журнала. Мультиплексный журнал (также называемый общим журналом) содержит несколько потоков. Каждый поток имеет собственных клиентов и собственные буферы памяти для упаковки записей журнала, но записи из всех этих буферов мультиплексируются в одну очередь и сбрасываются в один журнал в стабильном хранилище. Мультиплексирование позволяет объединять операции ввода-вывода нескольких потоков.

Когда клиент записывает запись в поток, он возвращает номер последовательности журнала (LSN), который идентифицирует запись журнала для будущей ссылки. LSN, назначенные записям, которые записываются в определенный поток, формируют возрастающую последовательность. То есть LSN, назначенный записи, записываемой в поток, всегда больше, чем LSN, назначенный предыдущей записи, записанной в тот же поток.

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

  • Пространство для набора связанных записей в журнале можно зарезервировать заранее. Это означает, что клиент может продолжить транзакцию, зная, что CLFS сможет добавлять в журнал все записи, описывающие транзакцию.

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

  • CLFS сбрасывает записи журналов в стабильное хранилище в соответствии со своей политикой, но также позволяет клиентам принудительно записывать набор записей журналов в стабильное хранилище.

  • CLFS поддерживает метаданные для журнала, а также для каждого потока мультиплексированного журнала. Клиенты могут просматривать метаданные и задавать определенные части метаданных.

  • Для каждого потока CLFS поддерживает базовый LSN и последний LSN, который клиент может использовать для обозначения активной части потока.

  • Для выделенных журналов CLFS поддерживает (по запросу клиента) архивный хвост, который клиент может использовать для отслеживания части журнала, которая была архивирована.

Некоторые функции CLFS (например, предыдущие поля LSN и отмена следующего LSN заголовка записи) лучше всего поняты, изучая ARIES. Дополнительные сведения о ARIES см. в следующих статьях.

  • С. Мохан, Дон Хадерл, Брюс Линдсей, Хамид Пирахеш, Питер Шварц, ARIES: метод восстановления транзакций, поддерживающий блокировку Fine-Granularity и частичные откаты с помощью Write-Ahead ведения журнала.

  • С. Мохан, Повторяющаяся История за пределами ARIES.