Création, modification et suppression d’un journal des modifications

Les administrateurs peuvent créer, supprimer et recréer des journaux des modifications à leur volonté. Un administrateur doit supprimer un journal lorsque la valeur USN (Update Sequence Number) actuelle approche de la valeur USN maximale possible, comme indiqué par le membre MaxUsn de la structure USN_JOURNAL_DATA . Un administrateur peut également supprimer et recréer un journal des modifications pour récupérer de l’espace disque. Pour effectuer cette opération et toutes les autres opérations de journal des modifications non programmatiques, vous devez disposer de privilèges d’administrateur système. Autrement dit, vous devez être membre du groupe Administrateurs.

Pour créer ou modifier un journal des modifications sur un volume spécifié par programmation, utilisez le code de contrôle FSCTL_CREATE_USN_JOURNAL .

Lorsque vous créez un journal des modifications ou modifiez un journal existant, le système de fichiers NTFS définit les informations de ce journal de modification à partir des informations de la structure CREATE_USN_JOURNAL_DATA , que FSCTL_CREATE_USN_JOURNAL prend comme entrée. CREATE_USN_JOURNAL_DATA a les membres MaximumSize et AllocationDelta.

MaximumSize est la taille maximale cible du journal des modifications en octets. Le journal des modifications peut dépasser cette valeur, mais aux points de contrôle du système de fichiers NTFS, le système de fichiers NTFS examine le journal et le supprime lorsque sa taille dépasse la valeur de MaximumSize plus la valeur d’AllocationDelta. (Aux points de contrôle du système de fichiers NTFS, le système d’exploitation écrit des enregistrements dans le fichier journal du système de fichiers NTFS qui permettent au système de fichiers NTFS de déterminer le traitement requis pour récupérer en cas de défaillance.)

AllocationDelta est le nombre d’octets ajoutés à la fin et supprimés à partir du début du journal des modifications chaque fois que la mémoire est allouée ou libérée. En d’autres termes, l’allocation et la désallocation ont lieu dans des unités de cette taille. Un multiple entier d’une taille de cluster est une valeur raisonnable pour ce membre.

Si un administrateur modifie un journal de modifications existant pour avoir une valeur MaximumSize plus élevée, par exemple si un volume est réindexé trop souvent, le journal des modifications reçoit simplement de nouvelles entrées jusqu’à ce qu’il dépasse la nouvelle taille maximale.

Pour supprimer un journal des modifications, utilisez le code de contrôle FSCTL_DELETE_USN_JOURNAL . Lorsque vous utilisez cette opération, elle parcoure tous les fichiers sur le volume et réinitialise l’USN de chaque fichier à zéro. L’opération supprime ensuite le journal des modifications existant. Cette opération persiste entre les redémarrages du système jusqu’à ce qu’elle se termine. Toute tentative de lecture, de création ou de modification du journal des modifications au cours de ce processus échoue avec le code d’erreur ERROR_JOURNAL_DELETE_IN_PROGRESS.

Vous pouvez également utiliser le code de contrôle FSCTL_DELETE_USN_JOURNAL pour déterminer si une suppression démarrée par un autre processus est en cours. Par exemple, votre application, lorsqu’elle est démarrée, peut déterminer si une suppression est en cours. Étant donné que les suppressions de journal persistent entre les redémarrages système, les services et les applications démarrés au redémarrage du système doivent case activée pour une suppression continue.

Les journaux des modifications ne sont pas nécessairement créés au démarrage. Pour créer un journal des modifications, un administrateur peut le faire explicitement ou démarrer un autre service qui nécessite un journal des modifications.