Ändern von Journaldatensätzen

Wenn Dateien, Verzeichnisse und andere NTFS-Dateisystemobjekte hinzugefügt, gelöscht und geändert werden, gibt das NTFS-Dateisystem Änderungsjournaleinträge in Streams ein, einen für jedes Volume auf dem Computer. Jeder Datensatz gibt den Änderungstyp und das geänderte Objekt an. Der Offset vom Anfang des Datenstroms für einen bestimmten Datensatz wird als Updatesequenznummer (USN) für den jeweiligen Datensatz bezeichnet. Neue Datensätze werden am Ende des Datenstroms angefügt.

Das NTFS-Dateisystem kann alte Datensätze löschen, um Speicherplatz zu sparen. Wenn erforderliche Datensätze gelöscht wurden, wird der Indizierungsdienst wiederhergestellt, indem er das Volume neu indiziert, wie dies geschieht, wenn kein Änderungsjournal vorhanden ist.

Das Änderungsjournal protokolliert nur die Tatsache einer Änderung an einer Datei und den Grund für die Änderung (z. B. Schreibvorgänge, Abschneiden, Verlängern, Löschen usw.). Es werden nicht genügend Informationen erfasst, um die Änderung rückgängig zu machen.

Darüber hinaus können mehrere Änderungen an derselben Datei dazu führen, dass dem aktuellen Datensatz nur ein Grundflag hinzugefügt wird. Wenn dieselbe Art von Änderung mehrmals erfolgt, schreibt das NTFS-Dateisystem nach der ersten Änderung keinen neuen Datensatz für die Änderungen. Beispielsweise führen mehrere Schreibvorgänge ohne dazwischenliegende Schließen- und Wiedereröffnungsvorgänge zu nur einem Änderungsdatensatz mit dem Grundflag USN_REASON_DATA_OVERWRITE festgelegt.

Angenommen, ein Benutzer greift in der folgenden Reihenfolge auf eine Datei zu, um die Funktionsweise des Änderungsjournals zu veranschaulichen:

  1. Schreibt in die Datei.
  2. Legt den Zeitstempel für die Datei fest.
  3. Schreibt in die Datei.
  4. Schneidet die Datei ab.
  5. Schreibt in die Datei.
  6. Schließt die Datei.

In diesem Fall führt das NTFS-Dateisystem die folgenden Aktionen im Änderungsjournal aus (wobei | einen bitweisen OR-Vorgang angibt).

Ereignis NTFS-Dateisystemaktion
Anfänglicher Schreibvorgang
Das NTFS-Dateisystem schreibt einen neuen USN-Eintrag mit dem USN_REASON_DATA_OVERWRITE Grundflag festgelegt. Weitere Informationen zu möglichen Grundflags finden Sie in der USN_RECORD-Struktur .
Festlegen des Dateizeitstempels
Das NTFS-Dateisystem schreibt einen neuen USN-Eintrag mit der Flageinstellung USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE.
Zweiter Schreibvorgang
Das NTFS-Dateisystem schreibt keinen neuen USN-Eintrag. Da USN_REASON_DATA_OVERWRITE bereits für den vorhandenen Datensatz festgelegt ist, werden keine Änderungen am Datensatz vorgenommen.
Dateiabschneiden
Das NTFS-Dateisystem schreibt einen neuen USN-Eintrag mit der Flageinstellung USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE | USN_REASON_DATA_TRUNCATION.
Dritter Schreibvorgang
Das NTFS-Dateisystem schreibt keinen neuen USN-Eintrag. Da USN_REASON_DATA_OVERWRITE bereits für den vorhandenen Datensatz festgelegt ist, werden keine Änderungen am Datensatz vorgenommen.
Vorgang schließen
Wenn der Benutzer, der Änderungen vornimmt, der einzige Benutzer der Datei ist, schreibt das NTFS-Dateisystem einen neuen USN-Eintrag mit der folgenden Flageinstellung: USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE | USN_REASON_DATA_TRUNCATION | USN_REASON_CLOSE.

Das Änderungsjournal sammelt eine Reihe von Datensätzen zwischen dem ersten Öffnen und dem letzten Schließen einer Datei. Jeder Datensatz hat ein neues Grundflagge festgelegt, das angibt, dass eine neue Art von Änderung aufgetreten ist. Die Sequenz der Datensätze ergibt einen teilweisen Verlauf der Datei. Der letzte Datensatz, der erstellt wird, wenn die Datei geschlossen wird, fügt das flag USN_REASON_CLOSE hinzu. Dieser Datensatz stellt eine Zusammenfassung der Änderungen an der Datei dar, gibt aber im Gegensatz zu den vorherigen Datensätzen keinen Hinweis auf die Reihenfolge der Änderungen.

Der nächste Benutzer, der auf die Datei zugreifen und diese ändern soll, generiert einen neuen USN-Eintrag mit einem einzigen Grundflag.