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


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

Администраторы могут создавать, удалять и повторно создавать журналы изменений. Администратор должен удалить журнал, когда текущее значение последовательности обновления (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 система проверяет журнал и обрезает его, когда его размер превышает значение MaximumSize плюс значение AllocationDelta. (На контрольных точках файловой системы NTFS операционная система записывает записи в файл журнала файловой системы NTFS, позволяющий файловой системе NTFS определить, какая обработка необходима для восстановления после сбоя.)

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

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

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

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

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