Common Log File System ( CLFS ) — это подсистема ведения журналов общего назначения, доступная как для приложений режима ядра , так и для приложений пользовательского режима для создания высокопроизводительных журналов транзакций . Она была представлена в Windows Server 2003 R2 и включена в более поздние операционные системы Windows . CLFS может использоваться как для регистрации данных , так и для регистрации событий . CLFS используется TxF и TxR для хранения изменений состояния транзакций до того, как они зафиксируют транзакцию. Двоичные файлы журналов, созданные в CLFS, не могут быть просмотрены ни одним интегрированным инструментом Windows.
Работа CLFS, как и любой другой системы журналирования транзакций, заключается в записи серии шагов, необходимых для какого-либо действия, чтобы их можно было либо точно воспроизвести в будущем для фиксации транзакции во вторичном хранилище, либо отменить, если потребуется. CLFS сначала маршалирует записи журналов в буферы памяти, а затем записывает их в файлы журналов во вторичном хранилище ( стабильный носитель в терминологии CLFS) для постоянного сохранения. Когда данные будут сброшены на стабильный носитель, контролируется встроенными политиками, но клиентское приложение CLFS может переопределить это и принудительно выполнить сброс. CLFS допускает настраиваемые форматы журналов, расширение и усечение журналов в соответствии с определенными политиками, а также одновременное использование несколькими клиентскими приложениями. CLFS может хранить файлы журналов в любом месте файловой системы. [1]
CLFS определяет интерфейс драйвера устройства (DDI), через который драйверы физической системы хранения подключаются к API CLFS. Драйвер CLFS реализует алгоритм восстановления ARIES ; другие алгоритмы могут поддерживаться с помощью пользовательских драйверов. [1]
CLFS поддерживает как выделенные журналы, так и мультиплексированные журналы. Выделенный журнал содержит один поток записей журнала, тогда как мультиплексированный журнал содержит несколько потоков, каждый поток для отдельного приложения. Несмотря на то, что мультиплексированный журнал имеет несколько потоков, журналы сбрасываются в потоки последовательно, одним пакетом. CLFS может заранее выделить место для набора записей журнала (до того, как журналы будут фактически сгенерированы), чтобы убедиться, что операция не даст сбой из-за нехватки места для хранения. [1]
Запись журнала в потоке CLFS сначала помещается в блок ввода-вывода журнала в буфере системной памяти. Периодически блоки сбрасываются на стабильные устройства хранения. На устройстве хранения журнал содержит набор контейнеров , которые выделяются последовательно, каждый из которых содержит несколько блоков ввода-вывода журнала. Новые записи журнала добавляются к текущему набору. Каждая запись идентифицируется порядковым номером журнала (LSN), увеличивающимся 32-битным порядковым номером. LSN и другие метаданные хранятся в заголовке записи. LSN кодирует идентификатор контейнера, смещение записи и идентификатор записи — эта информация используется для последующего доступа к записи журнала. Однако идентификаторы контейнеров являются логическими идентификаторами, они должны быть сопоставлены с физическими контейнерами. Сопоставление выполняется самой CLFS. [2]