Fact-checked by Grok 2 weeks ago

USN Journal

The USN Journal, or Update Sequence Number Journal, is a core feature of the and file systems in Windows operating systems that maintains a persistent, log of all changes made to files, directories, and other objects on a formatted volume. This journal enables efficient monitoring and recovery of file system modifications without requiring full volume scans, supporting services such as for indexing, DFS Replication for directory synchronization, and backup applications. Each logged change is represented as a record in the journal, uniquely identified by a monotonically increasing 64-bit unsigned known as the Update Sequence Number (USN). These records detail the type of operation—such as file creation, deletion, renaming, size changes, or attribute modifications—along with references to the affected file or directory, including its name and parent directory information. The journal is implemented as hidden streams within the volume's Master File Table (MFT), specifically in the $Extend\$UsnJrnl files, and it dynamically grows as needed while being periodically trimmed during NTFS checkpoints to manage size. Management of the USN Journal is handled through the fsutil usn command-line utility, which allows administrators to create, delete, query, or read the journal on a specified volume. For programmatic access, Windows provides APIs like DeviceIoControl with the FSCTL_QUERY_USN_JOURNAL, FSCTL_READ_USN_JOURNAL, and FSCTL_CREATE_USN_JOURNAL controls to integrate journal functionality into applications for tasks such as incremental backups or real-time file monitoring. By default, the journal is enabled on volumes used by certain Windows features, but it can be explicitly configured with parameters like maximum size and allocation delta to balance performance and storage overhead.

Overview

Definition and Purpose

The Update Sequence Number (USN) Journal is a feature of the file system in Windows that maintains a persistent, ordered log of all changes to files, directories, and other objects on a volume. It records these modifications using sequential 64-bit unsigned identifiers, known as USNs, which provide a unique, monotonically increasing sequence number for each event in the journal stream. This mechanism ensures that changes are captured in the order they occur, providing a reliable without altering the core file system operations. The primary purpose of the USN Journal is to enable applications and services to efficiently track and respond to modifications without requiring resource-intensive scans of the entire volume. By events such as file creation, deletion, renaming, and attribute changes, it supports use cases like incremental backups, data replication across systems, and real-time monitoring for security or compliance. This targeted approach allows developers to query only relevant updates, minimizing processing time and system load. Key benefits of the USN Journal include significant reductions in overhead for ongoing operations and faster after interruptions, such as enabling search indexes to resume without full re-scans. It differs from the broader journaling system, particularly the $LogFile transaction log, which focuses on low-level to maintain during crashes rather than exposing change details to applications.

Compatibility with File Systems

The Update Sequence Number (USN) Journal is primarily supported on the file system version 3.0 and later, which was introduced with Windows 2000. This feature serves as an optional mechanism for tracking file and directory changes within the volume, requiring explicit enablement via administrative tools to activate it on an volume. Prior to NTFS 3.0, such as in with earlier versions, no USN Journal functionality exists, limiting change-tracking capabilities to basic file system auditing without persistent journaling. Extended compatibility extends to the Resilient File System (), where USN Journal support is available across all ReFS versions starting from its introduction in Windows Server 2012. The USN journal is active by default on ReFS volumes in client editions of Windows Vista and later, but requires explicit enablement on server editions. This aligns with NTFS behavior, where the feature is active by default on client installations but inactive on most server installations, ensuring it does not consume resources unnecessarily on volumes not requiring detailed auditing. Full USN Journal functionality is available in and all later client and server editions, including , , , , , through Windows Server 2025. In older systems predating , API access to the journal is unavailable, restricting applications to alternative change-detection methods like polling. The journal's scope is confined to the specific enabled volume, capturing only local modifications such as creations, deletions, and attribute changes, while excluding events from network shares, remote storage, or other disconnected file systems.

Technical Details

Storage and Location

The USN Journal is stored as a hidden system metafile named UsnJrnl within the Extend directory of an volume, accessible via the full path Extend\UsnJrnl; this file is not visible through standard Windows file explorers due to its system-level status. The sequential log of change records resides in an alternate named J attached to the UsnJrnl file, forming the core persistent structure for tracking modifications. Records are appended in chronological order to the $J stream, ensuring a linear history of changes; upon reaching full capacity, the journal wraps around by overwriting the oldest entries, while retaining newer ones until further activity or resizing occurs. By default, the journal is allocated 32 MB of space on the system volume, though this can be adjusted to larger sizes—up to practical volume constraints—via administrative tools, allowing dynamic growth in response to sustained file system activity. USN numbers, which uniquely identify each record's position within the journal, are assigned as monotonically increasing 64-bit values derived from the update sequence mechanism tied to changes in the Master File Table (MFT).

Record Structure and Fields

The USN journal consists of that capture changes to files and directories on an volume, enabling efficient tracking without storing file contents. These are appended sequentially to the journal stream within the $UsnJrnl metafile, with each record's structure defined by a version-specific format to ensure compatibility across Windows releases. The version is indicated by the MajorVersion and MinorVersion fields, allowing applications to parse dynamically based on size and offsets. Applications should avoid legacy formats prior to , as they lack robustness for modern use. The legacy USN_RECORD (version 1) served as the initial format in early implementations but is deprecated and not recommended for new development due to limited field support and potential alignment issues. It predates standardized structures and was superseded to accommodate growing volume sizes and detailed logging needs. The standard USN_RECORD_V2, introduced in , with a fixed size of 60 bytes plus the variable-length field, aligned on 8-byte boundaries, forms the core format for most journal operations and is backward-compatible with earlier systems. This structure includes fixed-size fields for essential metadata followed by a variable-length file name, with records aligned on 64-bit boundaries in buffers for efficient . Key fields are outlined below:
FieldTypeSize (bytes)Purpose
RecordLengthDWORD4Total length of the record in bytes, used to traverse to the next record.
MajorVersionWORD2Major version number (2 for V2).
MinorVersionWORD2Minor version number (0 for V2).
FileReferenceNumberDWORDLONG8Unique 64-bit ordinal identifier for the affected file or directory.
ParentFileReferenceNumberDWORDLONG864-bit ordinal identifier for the parent directory.
UsnUSN (DWORDLONG)8Monotonically increasing 64-bit sequence number assigning order to the change.
TimeStampLARGE_INTEGER (FILETIME)8UTC timestamp of the change event.
ReasonDWORD432-bit bitmask of flags indicating the type of change (e.g., creation, modification).
SourceInfoDWORD4Flags specifying the source of the change, such as user or system operations.
SecurityIdDWORD4Unique identifier for the file's security descriptor.
FileAttributesDWORD4Standard file attributes (e.g., read-only, hidden).
FileNameLengthWORD2Length of the file name in bytes.
FileNameOffsetWORD2Byte offset from the start of the structure to the file name field.
FileNameWCHARVariableNull-terminated Unicode string of the file or directory name.
This format prioritizes compactness while providing sufficient detail for reconstructing change histories, with the variable allowing flexibility for long paths without fixed overhead. Introduced in and Server 2012, the USN_RECORD_V3 builds on by expanding file identifiers to 128 bits via the FILE_ID_128 type for FileReferenceNumber and ParentFileReferenceNumber, supporting volumes with over 2^64 entries and improving precision in large-scale environments. It retains all other fields, including SecurityId and SourceInfo, but increases the minimum size accordingly. When range tracking is enabled on volumes, V4 records are used for events involving modified ranges in files meeting the size threshold, alongside standard or V3 records for other changes. This version enhances compatibility for advanced features like distributed file systems, where GUID-like identifiers may contextualize security or replication data, though core fields remain metadata-focused. The USN_RECORD_V4, introduced in and Server 2012 R2, extends V3 for scenarios with range tracking enabled, which logs specific byte ranges modified in large files (threshold configurable, default 1 ) to support features like storage optimization. It includes all V3 fields plus additional members for extent information: NumberOfExtents (WORD, maximum 31), and an array of USN_RECORD_EXTENT structures (each with and as 64-bit signed integers). are variable-length, with size up to the structure plus (NumberOfExtents-1) * sizeof(USN_RECORD_EXTENT), aligned to 8 bytes. V4 records are output only for qualifying data changes when range tracking is active via FSCTL_SET_REPARSE_POINT or similar. USN records are generated automatically by the driver for each qualifying change event on enabled volumes, producing one or more records per event to capture distinct aspects without redundancy. The Usn field increments sequentially across the , ensuring a of operations even if multiple records arise from a single event, such as combined creation and attribute setting. No file contents are logged—only structural like identifiers, , and names—to minimize storage overhead while enabling applications to detect and respond to changes efficiently. For instance, file creation triggers a with the file's new number, parent details, and timestamp, marking the event's inception in the .

Change Reason Flags

The Change Reason Flags in the USN Journal, also known as USN_REASON flags, are bit flags stored in the Reason field of each USN record to categorize the specific types of file system changes that occurred on an volume. These flags provide a mechanism for identifying the nature of modifications, such as data alterations, structural operations, or attribute updates, without every possible event like reads. Only changes that modify the or trigger a new record, and the flags are defined in the USN_RECORD_V4 structure as a 32-bit unsigned where multiple flags can be set simultaneously via bitwise OR to represent compound operations. The flags are grouped into conceptual categories for clarity: data management flags track alterations to file content or streams; structural flags indicate creation, deletion, or renaming of files and directories; and attribute flags cover changes to , , or extended properties. The following table enumerates the major USN_REASON flags, their hexadecimal values, and descriptions.
FlagHex ValueCategoryDescription
USN_REASON_DATA_OVERWRITE0x00000001Data ManagementData in the primary stream was overwritten.
USN_REASON_DATA_EXTEND0x00000002Data ManagementThe primary data stream was extended.
USN_REASON_DATA_TRUNCATION0x00000004Data ManagementThe primary data stream was truncated.
USN_REASON_NAMED_DATA_OVERWRITE0x00000010Data ManagementData in a named stream was overwritten.
USN_REASON_NAMED_DATA_EXTEND0x00000020Data ManagementA named data stream was extended.
USN_REASON_NAMED_DATA_TRUNCATION0x00000040Data ManagementA named data stream was truncated.
USN_REASON_FILE_CREATE0x00000100StructuralA or directory was created.
USN_REASON_FILE_DELETE0x00000200StructuralA or directory was hard-deleted.
USN_REASON_RENAME_OLD_NAME0x00001000StructuralThe old name of a renamed or directory.
USN_REASON_RENAME_NEW_NAME0x00002000StructuralThe new name of a renamed or directory.
USN_REASON_BASIC_INFO_CHANGE0x00008000AttributeChanges to basic attributes or timestamps (e.g., size, creation time).
USN_REASON_SECURITY_CHANGE0x00000800AttributeChanges to settings or lists.
USN_REASON_EA_CHANGE0x00000400AttributeModifications to extended attributes.
USN_REASON_HARD_LINK_CHANGE0x00010000AttributeAn NTFS was added or removed.
USN_REASON_COMPRESSION_CHANGE0x00020000AttributeThe state of a or directory changed.
USN_REASON_OBJECT_ID_CHANGE0x00080000AttributeThe object ID attribute was modified.
USN_REASON_REPARSE_POINT_CHANGE0x00100000AttributeA reparse point was added, changed, or deleted.
USN_REASON_STREAM_CHANGE0x00200000AttributeA named was added, deleted, or renamed.
USN_REASON_TRANSACTED_CHANGE0x00400000AttributeA change occurred within a Transactional NTFS (TxF) transaction.
USN_REASON_INDEXABLE_CHANGE0x00004000AttributeThe content indexing attribute was modified.
USN_REASON_ENCRYPTION_CHANGE0x00040000AttributeThe or directory was encrypted or decrypted.
USN_REASON_INTEGRITY_CHANGE0x00800000AttributeThe attribute was changed.
USN_REASON_CLOSE0x80000000GeneralThe or directory handle was closed; always set in the final summarizing changes since the last open.
These flags enable precise filtering of journal records for specific events, such as monitoring only data overwrites or structural changes, by examining the bitwise combination in the Reason field. For instance, a file rename operation typically generates two : one with USN_REASON_RENAME_OLD_NAME for the original name and another with USN_REASON_RENAME_NEW_NAME for the new name, potentially combined with other flags like USN_REASON_CLOSE. The USN_REASON_CLOSE flag is invariably set upon handle closure to consolidate multiple interim changes into a single comprehensive , ensuring the journal remains efficient by avoiding redundant entries for transient operations.

Management and Operations

Enabling and Creating the Journal

The USN Journal is enabled by default on system volumes in Windows client editions starting from on volumes version 3.0 or greater, but server editions and non-system volumes typically require explicit creation. The journal is also supported on all versions of the , where it follows similar activation behavior. Enabling the USN Journal involves using the fsutil usn createjournal command from an elevated Command Prompt, which requires privileges and targets an online or volume. The command syntax is fsutil usn createjournal m=<max[size](/page/Size)> a=<allocation[delta](/page/Delta)> <volumepath>, where <volumepath> specifies the drive letter (e.g., C:). The m=<maxsize> parameter sets the maximum journal in bytes allocated by for storing change records, while a=<allocationdelta> defines the incremental in bytes by which the journal grows as needed, allowing efficient expansion without immediate full allocation. For example, fsutil usn createjournal m=33554432 a=1048576 C: configures a 32 MB maximum with a 1 MB allocation on the C: drive. Upon creation, the generates a unique ID, which identifies the instance and is used in subsequent operations. If a already exists on the volume, the command updates the maximum size and allocation delta without recreating it. The file is stored in the $Extend\$UsnJrnl hidden within the volume's . To verify the journal's creation and state, execute fsutil usn queryjournal <volumepath>, which displays details including the journal , maximum size, allocation delta, and current usage. This confirms the journal is active and provides metrics on its capacity and record count.

Reading and Querying Records

Accessing USN Journal records programmatically is primarily achieved through the Windows Native API using the DeviceIoControl function with the FSCTL_READ_USN_JOURNAL control code, which retrieves a set of update sequence number (USN) change journal records between two specified USN values from an NTFS volume. This operation requires an open handle to the volume obtained via CreateFile with the FILE_FLAG_BACKUP_SEMANTICS flag, and it returns a buffer containing one or more variable-sized USN_RECORD_V2 or USN_RECORD_V3 structures, depending on the journal version. Applications must allocate a sufficiently large buffer, typically starting with 64 KB, to receive the records, and parse the buffer sequentially by following offsets in each record's header. The input structure for FSCTL_READ_USN_JOURNAL is READ_USN_JOURNAL_DATA_V1 (for version 2 journals) or READ_USN_JOURNAL_DATA_V2 (for version 3), which includes parameters such as StartingUsn (the USN from which to begin reading), ReasonMask (a bitmask to filter records by change reason flags, e.g., USN_REASON_FILE_CREATE or USN_REASON_RENAME_NEW_NAME), and BytesToWaitFor (the minimum number of bytes to retrieve before returning). Additional fields like Timeout and ReturnOnlyOnClose allow for asynchronous waiting or restricting output to close events, while UsnJournalID ensures the journal has not been recreated since the last query. Upon success, the operation populates an output buffer with records and returns the next USN in the MajorVersion field of a USN structure, enabling sequential by using this value as the StartingUsn for subsequent calls. For command-line access, the fsutil utility provides the readjournal subcommand to enumerate and display USN records from a volume's , outputting details such as USN, reference number (FRN), parent FRN, timestamp, reason flags, and filename in a tabular format. The syntax is fsutil usn readjournal [c=] [s=] , where c specifies the size in bytes (default KB) and s filters by maximum in bytes to limit output; for example, fsutil usn readjournal c: reads recent records from the C: drive. Third-party tools and libraries, such as the usnparser package, facilitate parsing by dumping the to a via fsutil and then interpreting the binary records into structured data like or . Best practices for querying include processing in ascending USN order to maintain chronological integrity, as USNs are monotonically increasing but may wrap around in the 64-bit space after reaching the maximum value. To handle wrap-around and ensure completeness, first invoke FSCTL_QUERY_USN_JOURNAL to retrieve journal metadata, including LowestValidUsn and HighestValidUsn, then read from the lowest valid USN if needed, and track the journal ID to detect recreations that reset the sequence. Applications should also validate sizes dynamically, as partial indicate the need for larger allocations on high-activity volumes. The retrieved records provide key data for reconstructing file system change history, including the file reference number (a unique 64-bit identifier), parent directory reference, update , reason flags indicating the change type, , and the variable-length , allowing correlation with the broader record structure for full context.

Deleting and Recreating

The deletion of a USN Journal is accomplished via the command fsutil usn deletejournal /d <volume>, which disables the journal, removes its records, and releases the allocated disk space back to . This operation requires administrative privileges and is irreversible without explicit recreation, as it effectively wipes the entire change log. Administrators perform deletion during routine volume maintenance or to resolve issues such as journal corruption. The process involves scanning and updating all relevant master file table entries to mark them as processed, making it potentially lengthy depending on volume size and activity. Before proceeding with deletion, it is advisable to query the journal's metadata—such as the current USN range, journal ID, and allocation details—using fsutil usn queryjournal <volume> to preserve a snapshot of the state for recovery or auditing purposes. To restore functionality, a new USN Journal is created after deletion using fsutil usn createjournal m=<maximum_size> a=<allocation_delta> <volume>, where <maximum_size> specifies the journal's cap in bytes (defaulting to 32 MB if omitted) and <allocation_delta> sets the growth increment. This initializes a fresh journal with the USN counter reset to 1, effectively erasing all historical change records and starting a clean log. Recreation introduces a new journal identifier distinct from the previous one, requiring applications that rely on the USN Journal for change tracking—such as or file synchronizers—to detect this shift via the identifier and reinitialize their monitoring from the journal's start. Consequently, all unprocessed records from the prior journal are lost, potentially breaking continuity in systems dependent on unbroken change histories unless they implement robust handling for journal resets. This contrasts with initial enabling, where no prior history exists to lose.

Applications

Backup and Synchronization

The USN Journal plays a crucial role in facilitating efficient file backups by enabling tools to identify only modified, created, or deleted files since the last , thereby avoiding exhaustive full-volume scans. Windows File History, introduced in , leverages the USN Journal to track these changes and back up revised versions incrementally to designated storage, such as external drives or network locations. This approach ensures that backups capture precise deltas without rescanning unchanged data, optimizing both time and resource usage. In data synchronization scenarios, the USN Journal supports applications that replicate files across systems by providing a log of alterations for delta-based transfers. For instance, DFS Replication consumes the USN Journal to monitor file and folder updates on volumes, initiating replication only for affected items and maintaining consistency in distributed environments like SYSVOL shares. Similarly, File Sync employs USN journaling to detect changes automatically and trigger sync sessions between on-premises servers and storage, enabling seamless hybrid cloud synchronization. The typical for using the USN in backups and involves querying the journal for records within a specific USN range—starting from the last processed USN number—and filtering by reason flags such as those indicating file creation, modification, or deletion. Applications process these records to apply corresponding actions (e.g., copying new files or updating existing ones), then update their internal tracking to the highest USN encountered, ensuring subsequent operations handle only new changes. This method relies on the journal's sequential numbering and file reference details to maintain accuracy across sessions. Compared to traditional timestamp checks, the USN Journal offers significant advantages in speed and reliability, as it provides a centralized, persistent log of all filesystem events without requiring per- attribute reads, which can be resource-intensive on large volumes. It also effectively handles complex operations like file renames and moves by including parent file reference numbers in , allowing tools to preserve structures and linkages during incremental transfers—capabilities that timestamp-based methods often overlook. An example of integration is with the Volume Shadow Copy Service (VSS), which captures the current USN state during snapshot creation to enable consistent, point-in-time views of the filesystem for backup tools; post-snapshot, the journal can be queried on the shadow copy volume to identify changes relative to that baseline, supporting reliable recovery operations.

Digital Forensics

The USN Journal provides critical evidence in digital forensics by logging file system changes on NTFS volumes, including deletions that may no longer appear in the Master File Table (MFT) after entries are reused or overwritten. When a file is deleted, the journal records the event with the USN_REASON_FILE_DELETE reason flag (0x0200), capturing details such as the file reference number (FRN), timestamps, and the affected file name, thereby enabling investigators to confirm the existence and removal of files even post-deletion. This persistence of deletion records in the UsnJrnl:J stream allows for the recovery of artifacts that would otherwise be lost, supporting the reconstruction of file histories in investigations involving data exfiltration, malware persistence, or unauthorized access. Forensic timeline analysis leverages the sequential nature of USN Journal records, which are ordered by their Update Sequence Number (USN) and TimeStamp fields, to trace comprehensive sequences of file operations such as creation (USN_REASON_FILE_CREATE), modification (USN_REASON_DATA_EXTEND or USN_REASON_DATA_OVERWRITE), renaming (USN_REASON_RENAME_OLD_NAME and USN_REASON_RENAME_NEW_NAME), and deletion. Sorting these records chronologically reveals the full lifecycle of files or directories, including intermediate states like hard link creation (USN_REASON_HARD_LINK_CHANGE) or alternate data stream modifications (USN_REASON_STREAM_CHANGE), which are invaluable for attributing actions to specific users or processes in incident response. This approach surpasses MFT timestamp analysis by providing a more granular, operation-level audit trail. Specialized tools parse the binary $UsnJrnl stream to extract and visualize these artifacts for investigative use. Open-source options like MFTECmd process the journal to output CSV-formatted records, while Autopsy's ingest modules integrate USN data into broader case timelines; commercial suites such as EnCase offer similar parsing capabilities with advanced querying for flags and FRNs. Additionally, utilities like mftrcrd can correlate journal entries with MFT remnants to detect anomalies, such as sudden USN gaps or missing journal files indicative of anti-forensic efforts to erase traces. Key artifacts uncovered include rename histories for tracking file movements and stream changes for identifying hidden data manipulations. In ransomware investigations, clusters of FILE_DELETE records signal mass file operations, helping to delineate the scope and timing of encryption events. Despite its utility, the USN Journal's fixed allocation size imposes limitations on historical depth, as records wrap around and overwrite older entries during high-activity periods, typically retaining only days to weeks of data depending on volume size and usage patterns. This truncation occurs at NTFS checkpoints when the journal exceeds its maximum size, potentially obscuring long-term timelines unless supplemented by other logs. Cross-volume forensics requires separate parsing of each journal, complicating analysis in multi-disk environments.

Search and Indexing

The USN Journal facilitates efficient desktop search and file indexing by providing a persistent log of filesystem changes on NTFS volumes, allowing applications to detect and respond to modifications without performing full rescans. Search tools monitor the journal for relevant events, such as file creations, deletions, renames, and attribute updates, to maintain up-to-date indexes. This mechanism enables real-time synchronization of search databases, reducing the need for resource-intensive directory traversals. Integration with third-party search applications exemplifies this capability; for instance, by voidtools leverages the USN Journal to track file creations and deletions, updating its index incrementally without rescanning entire volumes. By querying the journal, ensures that changes are captured even when the application is not actively running, provided it operates . This approach supports near-instant searches across large datasets, such as indexes containing over 100,000 files, by maintaining a change log that filters for name and attribute modifications. Windows Search and similar indexers utilize the USN Journal for recovery and maintenance, particularly after system crashes or service interruptions, by querying records to identify only altered items for reindexing. The USN_REASON_INDEXABLE_CHANGE flag specifically signals changes to a file's content-indexing eligibility, such as toggling the FILE_ATTRIBUTE_NOT_CONTENT_INDEXED attribute, allowing indexers to efficiently update or remove entries as needed. This targeted filtering minimizes processing overhead compared to alternatives like directory watching , which struggle with high-volume or deep structures due to buffer limitations and event coalescence. The benefits of USN-based include lower for search updates and superior for volumes with millions of files, as the handles global changes atomically without per-directory handles. This contrasts with polling or watching methods, enabling productivity tools to provide responsive results while conserving system resources.

Limitations and Security

Performance Overhead

The USN Journal introduces minimal runtime overhead to the file system, as each recorded change involves a small append operation to the stream, which is designed to be efficient and asynchronous with normal file I/O activities. This append process typically consumes negligible CPU resources, though high-write workloads on volumes with frequent modifications—such as those involving large numbers of small files—can result in cumulative I/O amplification if the journal size approaches its maximum limit. Storage impact arises primarily from the journal's growth in response to file system activity, with the UsnJrnl file stored as a sparse stream in the Extend system directory to optimize space usage. On active volumes, the journal can expand beyond its initial allocation, but NTFS automatically trims it during checkpoints if it exceeds the configured maximum size plus allocation delta, potentially causing brief I/O delays during wrap-around events when old records are discarded to make room for new ones. The default maximum size is 32 MB (33,554,432 bytes) for standard volumes, though this is often insufficient for high-activity environments like servers, where larger configurations (e.g., 128 MB increments per 100,000 files in replicated scenarios) are recommended to prevent frequent overflows. In practice, the actual allocated size remains modest—often 30–40 MB on sparse files—due to NTFS's management of the log to retain only recent changes. Querying or reading the journal, particularly over large USN ranges, can impose memory overhead, as applications must buffer and process variable-length records (typically 60 bytes plus filename data), which becomes intensive for volumes with millions of changes. On solid-state drives (SSDs), the overall impact remains negligible due to fast random writes and low latency, whereas traditional hard disk drives (HDDs) may experience minor write amplification from journal appends and trims, though this is generally outweighed by the benefits of avoiding full volume scans. To mitigate these costs, administrators can configure an appropriate maximum size and allocation during journal creation with the fsutil usn createjournal command, tailoring it to the volume's expected change volume—for instance, increasing it for or replication scenarios to reduce wrap frequency. Applications should read and process records in a timely manner to enable effective truncation, ensuring the log does not bloat unnecessarily. For low-activity volumes where change tracking is not required, the journal can be disabled entirely via fsutil usn deletejournal to eliminate all associated overhead without affecting core functionality. Monitoring journal health is straightforward using the fsutil usn queryjournal command, which reports key metrics such as current size, maximum size, highest USN, and allocation delta, allowing proactive adjustments to prevent degradation from unchecked growth.

Tampering and Evasion Techniques

Malware and unauthorized intruders commonly exploit the USN Journal by executing the fsutil usn deletejournal command to erase its contents, thereby eliminating records of file creations, modifications, and deletions that could reveal malicious activities. This technique disrupts the chronological maintained by the journal, making it difficult to reconstruct timelines of system changes. Detection of such tampering often relies on indicators like the sudden absence of an active USN Journal on a volume, a reset of the USN counter to low values (such as starting from 1 upon recreation), or noticeable gaps in the sequence of update sequence numbers that deviate from expected incremental patterns. When the journal is deleted, the assigns a new journal identifier, rendering prior records unusable and creating discontinuities in the log that forensic analysis can identify. To evade detection, attackers frequently recreate the USN Journal immediately after deletion using fsutil usn createjournal, restoring apparent normalcy while obscuring the intervening malicious operations. Ransomware variants, such as those employing mass file encryption, often disable the journal prior to execution to prevent of their destructive actions. Mitigation strategies include real-time monitoring of fsutil command executions through tools like Sysmon for process creation events (Event ID 1) and Windows Audit Policy for object access logging, which can alert on unauthorized journal manipulations. Additionally, specialized forensic tools can carve and recover remnants of deleted USN records from the slack space within the [UsnJrnl](/page/UsnJrnl) file, preserving evidence even after apparent erasure. The implications of USN Journal tampering extend to severe disruptions in audit trails, potentially affecting requirements that mandate verifiable records of data processing activities. In the file system, similar vulnerabilities exist for journal deletion if enabled, though its Change Journal is disabled by default—unlike in —and its enhanced integrity checks provide marginally better resilience against undetected corruptions compared to .

History

Introduction in NTFS 3.0

The USN Journal was introduced with the release of on February 17, 2000, as a key feature of version 3.0 to enhance enterprise file management capabilities. This logging mechanism was developed to maintain a persistent record of changes to files and directories on an volume, enabling applications to track modifications without scanning the entire . The primary design goals addressed limitations in prior NTFS implementations, such as versions 1.2 used in , by offering an efficient alternative to polling-based or continuous notifications that could degrade . Instead, the USN Journal provided a fixed-size, circular log that captured all relevant events in sequence, supporting and tasks in server environments while minimizing overhead. Initial features centered on the basic USN_RECORD structure (version 1.0), which included essential fields like RecordLength (32-bit), MajorVersion and MinorVersion (both 16-bit), FileReferenceNumber and ParentFileReferenceNumber (64-bit each), Usn (64-bit update sequence number), SecurityId (32-bit), and filename details via FileNameOffset and FileNameLength. Management was facilitated through the fsutil command-line utility for creating, querying, reading, and deleting the journal, alongside Win32 APIs such as DeviceIoControl with control codes like FSCTL_CREATE_USN_JOURNAL and FSCTL_READ_USN_JOURNAL, targeted at applications. Enablement was optional to avoid unnecessary impact on consumer systems, requiring explicit activation via API or fsutil, with configurable parameters like MaximumSize (up to 4 ) and AllocationDelta for journal sizing. In the context of Server, the USN Journal directly supported replication through the File Replication Service (FRS), which monitored the journal to propagate changes across domain controllers, and facilitated incremental server backups by logging only modified data. Initial adoption remained limited to enterprise deployments due to the feature's optional status and implementation complexity, with documentation provided in the Windows 2000 Resource Kit for administrators and developers.

Developments in Subsequent Windows Versions

In and , the USN Journal saw significant improvements in stability and record structure with the introduction of records (USN_RECORD_V2), which enhanced attribute tracking by including additional fields such as major and minor version numbers, file attributes, and more detailed reason flags for changes. These updates provided better support for tracking file and directory modifications, including extended attributes, compared to the initial version 1.0. Additionally, wider exposure through Win32 functions like FSCTL_QUERY_USN_JOURNAL allowed developers greater access to journal data for applications such as backup tools. With and , the USN Journal became enabled by default on all volumes, marking a shift toward broader adoption in consumer environments. Enhanced integration with and indexing services utilized the journal to efficiently track and recover from changes, reducing the need for full volume scans during reindexing after system failures or crashes. Handling of large journals was improved through mechanisms that allow the journal file to temporarily exceed its allocated maximum size before truncation at the next checkpoint, preventing overflow issues on volumes with high activity. Windows 8 and Windows Server 2012 introduced USN_RECORD_V3, which added support for 128-bit file identifiers (FILE_ID_128) to accommodate GUID-like references, enabling more robust tracking in environments with object identifiers. Windows 8.1 further introduced USN_RECORD_V4 for range tracking of changes in large files. Compatibility with the Resilient File System (ReFS) was established, allowing the USN Journal to log changes on ReFS volumes for features like data integrity scanning. The File History feature, debuted in Windows 8, leverages the USN Journal to identify modified files since the last backup, optimizing incremental backups without full scans. In , , and and later, the USN Journal continued to support advanced features. Deletion of the journal is possible using tools like fsutil but can be detected and monitored by solutions to help preserve forensic integrity. As of 2025, recent advances include forensic "rewinding" techniques developed by CyberCX, which recover data from wrapped or overwritten journal entries by analyzing the UsnJrnl-J stream structure, enabling reconstruction of historical file paths even after rotation. Broader adoption of in Storage Spaces, enhanced in Windows Server 2016, utilizes the USN Journal for resilient data management in clustered environments, supporting features like integrity streams and block cloning. Over its evolution, the USN Journal has transitioned from a primarily server-focused in early implementations to a ubiquitous component in Windows features, with configurable limits expanded to up to several gigabytes via fsutil, accommodating larger volumes and higher change volumes without frequent wrapping.

References

  1. [1]
    fsutil usn | Microsoft Learn
    Nov 1, 2024 · Manages the update sequence number (USN) change journal. The USN change journal provides a persistent log of all changes made to files on the volume.
  2. [2]
    Change Journals - Win32 apps
    ### Summary of USN Journal Feature
  3. [3]
    USN_RECORD_V2 - Win32 apps - Microsoft Learn
    Mar 12, 2023 · Contains the information for an update sequence number (USN) change journal version 2.0 record.
  4. [4]
    NTFS overview | Microsoft Learn
    Jun 18, 2025 · NTFS enhances reliability by maintaining a transaction-based log file and checkpoint information. If a system failure occurs, NTFS uses this log ...
  5. [5]
    The Evolution of Windows Search - Microsoft Developer Blogs
    Mar 12, 2020 · The first version of the USN journal was also released in Windows 2000 as part of NTFS 3.0. The USN Journal is a component of the file ...
  6. [6]
    [MS-FSA]: Appendix A: Product Behavior | Microsoft Learn
    Mar 7, 2024 · The USN journal is active by default on Windows Vista and later. The ... 64-bit index uniquely identifying the file within that ...
  7. [7]
    READ_USN_JOURNAL_DATA_...
    Feb 15, 2025 · Windows Server 2012 introduced READ_USN_JOURNAL_DATA_V1 to support 128-bit file identifiers used by ReFS. Syntax. typedef struct { USN StartUsn ...
  8. [8]
    GetVolumeInformationA function (fileapi.h) - Win32 apps
    Jan 8, 2025 · The specified volume supports update sequence number (USN) journals. For more information, see Change Journal Records. Windows Server 2008, ...Syntax · Parameters · Remarks
  9. [9]
    The Windows USN Journal :: Velociraptor - Digging deeper!
    Nov 13, 2020 · The USN journal can provide evidence of deleted files. With Velociraptor it is possible to efficiently hunt for all machines that had the ...What is the USN Journal? · When to use the USN Journal?
  10. [10]
    USN Journal - Forensafe
    Jul 28, 2022 · The USN Journal (Update Sequence Number Journal) is the journaling functionality of NTFS. USN Journal maintains change logs made to the files on the NTFS and ...
  11. [11]
    I want to disable USN journal due to the enormous size and ...
    Aug 20, 2011 · Using the Change Journal Identifier - Win32 apps. The NTFS file system associates an unsigned 64-bit identifier with each change journal.
  12. [12]
    UsnJournal wrap around behavior - OSR Developer Community
    Jul 16, 2020 · If the UsnJournal wraps around between lets say when write W3 happens and before Close of the file F1 is done, do we still get correct Extents ...
  13. [13]
    Reading USN Journal with .NET - Meziantou's blog
    Dec 23, 2024 · By default, the size on the system drive is about 32MB. With all the writes in the temp folder or AppData, you can quickly fill the journal.
  14. [14]
    Change Journal Records - Win32 apps | Microsoft Learn
    Jan 7, 2021 · The offset from the beginning of the stream for a particular record is called the update sequence number (USN) for the particular record.
  15. [15]
    USN_RECORD_V3 - Win32 apps - Microsoft Learn
    Mar 12, 2023 · Contains the information for an update sequence number (USN) change journal version 3.0 record. The version 2.0 record is defined by the USN_RECORD_V2 ...
  16. [16]
    USN_RECORD_V4 - Win32 apps - Microsoft Learn
    Mar 12, 2023 · Contains the information for an update sequence number (USN) change journal version 4.0 record. The version 2.0 and 3.0 records are defined ...
  17. [17]
    FSCTL_READ_USN_JOURNAL - Win32 apps | Microsoft Learn
    Oct 20, 2021 · Retrieves the set of update sequence number (USN) change journal records between two specified USN values.
  18. [18]
    Walking a Buffer of Change Journal Records - Win32 apps
    Jan 7, 2021 · Both return a USN followed by zero or more change journal records, each in a USN_RECORD_V2 or USN_RECORD_V3 structure. The target volume for USN ...
  19. [19]
    READ_USN_JOURNAL_DATA_...
    Mar 12, 2023 · Contains information defining a set of update sequence number (USN) change journal records to return to the calling process.
  20. [20]
    D:\ is unshrinkable past 10GB due to UsnJrnl. Is there any way to fix ...
    Mar 7, 2025 · Deleting or disabling an active change journal is very time consuming, because the system must access all the records in the master file table ( ...
  21. [21]
  22. [22]
    Creating, Modifying, and Deleting a Change Journal - Win32 apps
    Jan 7, 2021 · To create or modify a change journal on a specified volume programmatically, use the FSCTL_CREATE_USN_JOURNAL control code.
  23. [23]
    Using the Change Journal Identifier - Win32 apps | Microsoft Learn
    Jan 7, 2021 · The file system stamps the journal with a new identifier where the existing update sequence number (USN) records either are or may be unusable.
  24. [24]
    A step back in time with Windows 8's File History - Ars Technica
    Jul 10, 2012 · If the USN Journal says there are changes, File History can quickly see if any of the files that it has backed up are among the changes, and if ...
  25. [25]
    Understanding DFSR Dirty (Unexpected) Shutdown Recovery
    Jul 23, 2012 · The DFS Replication service is a consumer of the NTFS USN (Update Sequence Number) journal, which is a journal of updates to files and folders ...
  26. [26]
    Azure Files frequently asked questions (FAQ) - Microsoft Learn
    Sep 30, 2025 · On Windows Server, Azure File Sync uses Windows USN journaling to automatically initiate a sync session when files change. To detect changes ...
  27. [27]
    How to get the 'NextUSN' journal entry for a VSS snapshot?
    May 11, 2012 · The NextUsn value is the size of the $Usnjrnl:$J entry. Seek to the previous VSS snapshot's max USN before parsing records.Deleting & Recreating NTFS Journals (Or How to Properly run the ...Raku: what is the syntax for shell calls with spaces? - Stack OverflowMore results from stackoverflow.com
  28. [28]
    [PDF] Five Windows Forensic Artifacts for Every Incident Response
    – The USN Journal also captures significantly more operation types than just MACB. – USN journal data may include references to operations on deleted files.
  29. [29]
    [PDF] UsnJrnl Parsing for File System History Project Report
    Feb 7, 2016 · According to Microsoft's documentation there are three different record versions used in different Windows operating systems, namely USN RECORD ...
  30. [30]
    What happens when the USN change journal reaches maximum ...
    Jul 14, 2022 · Using the Change Journal Identifier - Win32 apps. The NTFS file system associates an unsigned 64-bit identifier with each change journal.
  31. [31]
  32. [32]
    Understanding NTFS Journaling ($LogFile and $UsnJrnl)
    Feb 18, 2025 · $UsnJrnl. The NTFS file system has a hidden gem called the Update Sequence Number (USN) Change Journal, stored in a system file named $UsnJrnl.
  33. [33]
    FAQ - voidtools
    Everything will automatically keep your NTFS indexes up to date with the NTFS USN Journal. Changes will not be missed when Everything is not running as the ...
  34. [34]
    Understanding ReadDirectoryChangesW - Part 1
    May 19, 2010 · However, with the USN Journal, you can monitor the entire file system quite efficiently. If you use the Overlapped I/O option on the ...
  35. [35]
  36. [36]
    Backup Performance optimisation using the NTFS Journal
    If the Change Journal logs an error; If the Change Journal wraps and overwrites entries. Enabling/disabling NTFS Change Journal use: Click the Options button ...
  37. [37]
    Delete Volume USN Journal with Fsutil | Prebuilt detection ... - Elastic
    Identifies use of the fsutil.exe to delete the volume USNJRNL. This technique is used by attackers to eliminate evidence of files created during ...
  38. [38]
    Detection: USN Journal Deletion - Splunk Security Content
    Oct 7, 2025 · The following analytic detects the deletion of the USN Journal using the fsutil.exe utility. It leverages data from Endpoint Detection and Response (EDR) ...
  39. [39]
    USN journal deletion - Splunk Lantern
    Jul 7, 2025 · The update sequence number (USN) change journal provides a log of all changes made to the files on the disk. This search looks for fsutil.exe ...
  40. [40]
    Determining removal of forensic artefacts using the USN change ...
    In this paper we examine the ways in which the Update Sequence Number (USN) Journal file can be used to show signs that such software or modes of operation have ...
  41. [41]
    How to Resolve "Failure while using USN journal" Error
    Apr 29, 2022 · Add a USN Change Journal · Log in to your Windows Server, launch cmd, and run as admin. · Run the following command: fsutil usn createjournal m= ...
  42. [42]
    Fsutil Suspicious Invocation - Detection.FYI
    Aug 12, 2024 · Detects suspicious parameters of fsutil (deleting USN journal, configuring it with small size, etc). Might be used by ransomwares during the attack.Missing: recreate | Show results with:recreate
  43. [43]
  44. [44]
    Carving $USN journal entries :: Velociraptor - Digging deeper!
    Jun 16, 2021 · The USN journal is a file internal to the NTFS filesystem that maintains a log of interactions with the filesystem. The USN journal is a unique ...Digging Even Deeper! · The Structure Of A Usn... · Parsing The Usn Record
  45. [45]
    How to detect audit data tampering - ManageEngine
    Discover how to detect and respond to audit log tampering using Log360. Set up alerts, monitor file integrity, and safeguard your logs from unauthorized ...
  46. [46]
    Forensic analysis of ReFS journaling - ScienceDirect.com
    The Change Journal uses USN_RECORD_V3 format when storing USN journal (Microsoft, 2018b). As $UsnJrnl uses USN_RECORD_V2 (Microsoft, 2018a), the method to ...<|control11|><|separator|>
  47. [47]
    Resilient File System (ReFS) overview - Microsoft Learn
    Jul 28, 2025 · Features available with ReFS and NTFS · Available on Windows Server, version 1709 and later, Windows Server 2019 (1809) LTSC or later. · CSV won't ...
  48. [48]
    Microsoft Releases Windows 2000 to Manufacturing - Source
    Dec 15, 1999 · REDMOND, Wash., Dec.​​ Microsoft plans general availability of Windows 2000 with a worldwide launch on Feb. 17, 2000.
  49. [49]
    Keeping an Eye on Your NTFS Drives, Part II - Jacob Filipp
    The journal must be active and UsnJournalID must be set to its ID or the call will fail. If the USN_ DELETE_FLAG_NOTIFY flag is specified in addition to ...
  50. [50]
    Troubleshoot journal_wrap errors on Sysvol and DFS replica sets
    Jan 15, 2025 · The USN journal is a log of fixed size that records all changes that occur on NTFS 5.0-formatted partitions. NTFRS monitors the NTFS USN journal ...<|control11|><|separator|>
  51. [51]
    Count upon Security - ytd2525 - WordPress.com
    May 28, 2017 · There is a USN change journal per volume, its turned on by default since Windows Vista, and used by applications such as the Indexing ...
  52. [52]
    Using Windows File History and a large OneDrive together
    Aug 13, 2025 · So I did some digging and found that FH uses what is known as the NTFS "Change Journal" or USN Journal, which records every change to a volume ( ...
  53. [53]
    does the USN journal increase performance for hard disk ... - Neowin
    Oct 22, 2016 · I'm reality, "most" tweaks seldom do much to make your computer faster or better. If you're looking for speed, get an SSD. If you need space, ...Missing: overhead benchmarks
  54. [54]
    NTFS Usnjrnl Rewind - CyberCX
    Apr 11, 2024 · We discuss using the NTFS filesystem journal for recreating deleted file/folder full paths, issues with current methods and tools, ...