Modificare i record del journal
Man mano che i file, le directory e altri oggetti del file system NTFS vengono aggiunti, eliminati e modificati, il file system NTFS immette i record del journal delle modifiche nei flussi, uno per ogni volume nel computer. In ogni record sono indicati il tipo di modifica e l'oggetto modificato. L'offset dall'inizio del flusso per un determinato record viene chiamato numero di sequenza di aggiornamento (USN) per il record specifico. Alla fine del flusso vengono aggiunti nuovi record.
Il file system NTFS può eliminare i record precedenti per risparmiare spazio. Se necessario, i record sono stati eliminati, il servizio di indicizzazione viene ripristinato tramite la reindicizzazione del volume, in quanto quando non esiste alcuna modifica journal.
Il journal delle modifiche registra solo il fatto di una modifica a un file e il motivo della modifica (ad esempio, operazioni di scrittura, troncamento, lunghezza, eliminazione e così via). Non registra informazioni sufficienti per consentire l'inversione della modifica.
Inoltre, più modifiche allo stesso file possono comportare l'aggiunta di un solo flag motivo al record corrente. Se lo stesso tipo di modifica si verifica più volte, il file system NTFS non scrive un nuovo record per le modifiche dopo la prima. Ad esempio, diverse operazioni di scrittura senza operazioni di chiusura e riaprimento generano un solo record di modifica con il flag motivo USN_REASON_DATA_OVERWRITE impostato.
Per illustrare il funzionamento del journal delle modifiche, si supponga che un utente accinga a un file nell'ordine seguente:
- Scrive nel file.
- Imposta il timestamp per il file.
- Scrive nel file.
- Tronca il file.
- Scrive nel file.
- Chiude il file.
In questo caso, il file system NTFS esegue le azioni seguenti nel journal delle modifiche (dove | indica un'operazione OR bit per bit).
Evento | Azione del file system NTFS |
---|---|
Operazione di scrittura iniziale |
Il file system NTFS scrive un nuovo record USN con il flag motivo USN_REASON_DATA_OVERWRITE impostato. Per altre informazioni sui possibili flag motivo, vedere la struttura USN_RECORD . |
Impostazione del timestamp del file |
Il file system NTFS scrive un nuovo record USN con l'impostazione del flag USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE. |
Seconda operazione di scrittura |
Il file system NTFS non scrive un nuovo record USN. Poiché USN_REASON_DATA_OVERWRITE è già impostato per il record esistente, non vengono apportate modifiche al record. |
Troncamento dei file |
Il file system NTFS scrive un nuovo record USN con l'impostazione del flag USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE | USN_REASON_DATA_TRUNCATION. |
Terza operazione di scrittura |
Il file system NTFS non scrive un nuovo record USN. Poiché USN_REASON_DATA_OVERWRITE è già impostato per il record esistente, non vengono apportate modifiche al record. |
Operazione di chiusura |
Se l'utente apporta modifiche è l'unico utente del file, il file system NTFS scrive un nuovo record USN con l'impostazione del flag seguente: USN_REASON_DATA_OVERWRITE | USN_REASON_BASIC_INFO_CHANGE | USN_REASON_DATA_TRUNCATION | USN_REASON_CLOSE. |
Il journal delle modifiche accumula una serie di record tra la prima apertura e l'ultima chiusura di un file. Ogni record ha un nuovo flag motivo impostato, a indicare che si è verificato un nuovo tipo di modifica. La sequenza di record fornisce una cronologia parziale del file. Il record finale, creato quando il file viene chiuso, aggiunge il flag di USN_REASON_CLOSE. Questo record rappresenta un riepilogo delle modifiche apportate al file, ma a differenza dei record precedenti, non fornisce alcuna indicazione dell'ordine delle modifiche.
L'utente successivo per accedere e modificare il file genera un nuovo record USN con un singolo flag motivo.