Share via


Crear, modificar y eliminar un diario de cambios

Los administradores pueden crear, eliminar y volver a crear diarios de cambios a voluntad. Un administrador debe eliminar un diario cuando el valor actual del número de secuencia de actualización (USN) se aproxima al valor máximo posible de USN, como se indica en el miembro MaxUsn de la estructura USN_JOURNAL_DATA . Un administrador también puede eliminar y volver a crear un diario de cambios para reclamar espacio en disco. Para realizar esto y todas las demás operaciones de diario de cambios no programáticas, debe tener privilegios de administrador del sistema. Es decir, debe ser miembro del grupo Administradores.

Para crear o modificar un diario de cambios en un volumen especificado mediante programación, use el código de control FSCTL_CREATE_USN_JOURNAL .

Al crear un nuevo diario de cambios o modificar uno existente, el sistema de archivos NTFS establece la información de ese diario de cambios de la información de la estructura CREATE_USN_JOURNAL_DATA , que FSCTL_CREATE_USN_JOURNAL toma como entrada. CREATE_USN_JOURNAL_DATA tiene los miembros MaximumSize y AllocationDelta.

MaximumSize es el tamaño máximo de destino del diario de cambios en bytes. El diario de cambios puede aumentar más que este valor, pero en los puntos de control del sistema de archivos NTFS, el sistema de archivos NTFS examina el diario y lo recorta cuando su tamaño supera el valor de MaximumSize más el valor de AllocationDelta. (En los puntos de control del sistema de archivos NTFS, el sistema operativo escribe registros en el archivo de registro del sistema de archivos NTFS que permite al sistema de archivos NTFS determinar qué procesamiento se necesita para recuperarse de un error).

AllocationDelta es el número de bytes agregados al final y quitados del principio del diario de cambios cada vez que se asigna o desasigna la memoria. En otras palabras, la asignación y desasignación tienen lugar en unidades de este tamaño. Un entero múltiplo de un tamaño de clúster es un valor razonable para este miembro.

Si un administrador modifica un diario de cambios existente para tener un valor MaximumSize mayor, por ejemplo, si un volumen se vuelve a indexar con demasiada frecuencia, el diario de cambios simplemente recibe nuevas entradas hasta que supere el nuevo tamaño máximo.

Para eliminar un diario de cambios, use el código de control FSCTL_DELETE_USN_JOURNAL . Cuando se usa esta operación, se recorren todos los archivos del volumen y se restablece el USN de cada archivo en cero. A continuación, la operación elimina el diario de cambios existente. Esta operación persiste en los reinicios del sistema hasta que se completa. Cualquier intento de leer, crear o modificar el diario de cambios durante este proceso produce un error con el código de error ERROR_JOURNAL_DELETE_IN_PROGRESS.

También puede usar el código de control FSCTL_DELETE_USN_JOURNAL para determinar si alguna otra eliminación iniciada por algún otro proceso está en curso. Por ejemplo, la aplicación, cuando se inicia, puede determinar si una eliminación está en curso. Dado que las eliminaciones del diario persisten en los reinicios del sistema, los servicios y las aplicaciones iniciadas en el reinicio del sistema deben comprobar si hay una eliminación en curso.

Los diarios de cambios no se crean necesariamente en el inicio. Para crear un diario de cambios, un administrador puede hacerlo explícitamente o iniciar otro servicio que requiera un diario de cambios.