Общие сведения о файловой системе общих журналов
Общая файловая система журналов (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.