Partilhar via


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

Os administradores podem criar, excluir e recriar diários de alterações à 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 USN máximo possível, conforme indicado pelo MaxUsn membro da estrutura 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 esta 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 a partir de informações na estrutura CREATE_USN_JOURNAL_DATA, que FSCTL_CREATE_USN_JOURNAL usa como entrada. CREATE_USN_JOURNAL_DATA tem os membros MaximumSize e AllocationDelta.

MaximumSize é o tamanho máximo objetivo para o diário de alterações em bytes. O diário de alterações pode crescer mais do que esse valor, mas nos 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. (Nos pontos de verificação do sistema de arquivos NTFS, o sistema operacional grava registros no arquivo de log do sistema de arquivos NTFS que permitem que o sistema de arquivos NTFS determine qual processamento é necessário para recuperar de uma falha.)

AllocationDelta é o número de bytes adicionados ao final e removidos do início do diário de alterações cada vez que a memória é alocada ou deslocalizada. Por outras palavras, a atribuição e a desafetação ocorrem em unidades desta dimensão. Um múltiplo inteiro do tamanho de um cluster é um valor razoável para este membro.

Se um administrador modificar um diário de alterações existente para ter um valor maior MaximumSize, por exemplo, se um volume estiver sendo reindexado 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 de cada arquivo para zero. Em seguida, a operação exclui o diário de alterações existente. Esta operação persiste durante as reinicializações do sistema até ser concluída. Qualquer tentativa de ler, criar ou modificar o diário de alterações durante este 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 é iniciado, pode determinar se uma exclusão está em andamento. Como as exclusões de diário persistem nas reinicializações do sistema, os serviços e aplicativos iniciados na reinicialização do sistema devem verificar se há uma exclusão contínua.

Os diários de mudança não são necessariamente criados na inicialização. Para criar um diário de alterações, um administrador pode fazê-lo explicitamente ou iniciar outro serviço que exija um diário de alterações.