Создание, изменение и удаление журнала изменений

Администраторы могут создавать, удалять и повторно создавать журналы изменений по мере возможности. Администратор должен удалить журнал, когда текущее значение номера последовательности обновления (USN) приближается к максимально возможному значению USN, как указано в элементе MaxUsnструктуры USN_JOURNAL_DATA . Администратор также может удалить и повторно создать журнал изменений, чтобы освободить место на диске. Для выполнения этой и всех других не программными операциями журнала изменений необходимо иметь права системного администратора. Это значит, что вы должны быть членом группы "Администраторы".

Чтобы создать или изменить журнал изменений на указанном томе программным способом, используйте код элемента управления FSCTL_CREATE_USN_JOURNAL .

При создании нового журнала изменений или изменении существующего файловая система NTFS задает сведения для этого журнала изменений из данных в CREATE_USN_JOURNAL_DATA структуре, которую FSCTL_CREATE_USN_JOURNAL принимает в качестве входных данных. CREATE_USN_JOURNAL_DATA содержит элементы MaximumSize и AllocationDelta.

MaximumSize — это целевой максимальный размер журнала изменений в байтах. Журнал изменений может увеличиться, чем это значение, но в контрольных точках файловой системы NTFS файловая система NTFS проверяет журнал и обрезает его, если его размер превышает значение MaximumSize плюс значение AllocationDelta. (В контрольных точках файловой системы NTFS операционная система записывает записи в файл журнала файловой системы NTFS, которые позволяют файловой системе NTFS определить, какая обработка требуется для восстановления после сбоя.)

AllocationDelta — это количество байтов, добавленных в конец и удаленных из начала журнала изменений при каждом выделении или освобождении памяти. Иными словами, выделение и освобождение происходит в единицах такого размера. Целое число, кратное размеру кластера, является разумным значением для этого элемента.

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

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

Вы также можете использовать управляющий код FSCTL_DELETE_USN_JOURNAL , чтобы определить, выполняется ли удаление, начатое каким-то другим процессом. Например, приложение при запуске может определить, выполняется ли удаление. Так как удаление журналов сохраняется при перезапуске системы, службы и приложения, запущенные при перезапуске системы, должны проверка для текущего удаления.

Журналы изменений не обязательно создаются при запуске. Чтобы создать журнал изменений, администратор может сделать это явным образом или запустить другую службу, для которой требуется журнал изменений.