Share via


Criando, modificando e excluindo um diário de alterações

Os administradores podem criar, excluir e recriar diários de alteração à vontade. Um administrador deve excluir um diário quando o valor usn (número de sequência de atualização) atual se aproximar do valor máximo de USN possível, conforme indicado pelo membro MaxUsn da estrutura de USN_JOURNAL_DATA . Um administrador também pode excluir e recriar um diário de alterações para recuperar espaço em disco. Para executar essa e todas as outras operações de diário de alterações não programáticas, você deve ter privilégios de administrador do sistema. Ou seja, você deve ser membro do grupo Administradores.

Para criar ou modificar um diário de alterações em um volume especificado programaticamente, use o código de controle FSCTL_CREATE_USN_JOURNAL .

Quando você cria um novo diário de alterações ou modifica um existente, o sistema de arquivos NTFS define informações para esse diário de alterações de informações na estrutura CREATE_USN_JOURNAL_DATA , o que FSCTL_CREATE_USN_JOURNAL usa como entrada. CREATE_USN_JOURNAL_DATA tem os membros MaximumSize e AllocationDelta.

MaximumSize é o tamanho máximo de destino para o diário de alteração em bytes. O diário de alterações pode crescer mais do que esse valor, mas em pontos de verificação do sistema de arquivos NTFS o sistema de arquivos NTFS examina o diário e o corta quando seu tamanho excede o valor de MaximumSize mais o valor de AllocationDelta. (Em pontos de verificação do sistema de arquivos NTFS, o sistema operacional grava registros no arquivo de log do sistema de arquivos NTFS que permite que o sistema de arquivos NTFS determine qual processamento é necessário para se recuperar de uma falha.)

AllocationDelta é o número de bytes adicionados ao final e removidos do início do diário de alteração sempre que a memória é alocada ou desalocada. Em outras palavras, a alocação e a desalocação ocorrem em unidades desse tamanho. Um múltiplo inteiro de um tamanho de cluster é um valor razoável para esse membro.

Se um administrador modificar um diário de alterações existente para ter um valor MaximumSize maior, por exemplo, se um volume estiver sendo indexado com muita frequência, o diário de alterações simplesmente receberá novas entradas até exceder o novo tamanho máximo.

Para excluir um diário de alterações, use o código de controle FSCTL_DELETE_USN_JOURNAL . Quando você usa essa operação, ela percorre todos os arquivos no volume e redefine o USN para cada arquivo como zero. Em seguida, a operação exclui o diário de alterações existente. Essa operação persiste entre as reinicializações do sistema até que seja concluída. Qualquer tentativa de ler, criar ou modificar o diário de alterações durante esse processo falha com o código de erro ERROR_JOURNAL_DELETE_IN_PROGRESS.

Você também pode usar o código de controle FSCTL_DELETE_USN_JOURNAL para determinar se uma exclusão iniciada por algum outro processo está em andamento. Por exemplo, seu aplicativo, quando ele é iniciado, pode determinar se uma exclusão está em andamento. Como as exclusões de diário persistem entre reinicializações do sistema, os serviços e aplicativos iniciados na reinicialização do sistema devem marcar para uma exclusão contínua.

Os diários de alteração não são necessariamente criados na inicialização. Para criar um diário de alterações, um administrador pode fazer isso explicitamente ou iniciar outro serviço que requer um diário de alterações.