Creazione, modifica ed eliminazione di un journal delle modifiche
Gli amministratori possono creare, eliminare e ricreare i registri delle modifiche a volontà. Un amministratore deve eliminare un journal quando il valore USN (Update Sequence Number) corrente si avvicina al valore USN massimo possibile, come indicato dal MaxUsn membro della struttura USN_JOURNAL_DATA. Un amministratore può anche eliminare e ricreare un journal delle modifiche per recuperare spazio su disco. Per eseguire questa operazione e tutte le altre operazioni del journal delle modifiche non a livello di codice, è necessario disporre dei privilegi di amministratore di sistema. Vale a dire, è necessario essere un membro del gruppo Administrators.
Per creare o modificare un registro delle modifiche su un volume specificato programmaticamente, usare il codice di controllo FSCTL_CREATE_USN_JOURNAL.
Quando si crea un nuovo journal di modifiche o ne si modifica uno esistente, il file system NTFS imposta le informazioni relative al journal delle modifiche dalle informazioni nella struttura CREATE_USN_JOURNAL_DATA, che FSCTL_CREATE_USN_JOURNAL accetta come input. CREATE_USN_JOURNAL_DATA dispone dei membri MaximumSize e AllocationDelta.
MaximumSize è la dimensione massima di destinazione per il journal delle modifiche in byte. Il journal delle modifiche può aumentare di dimensioni superiori a questo valore, ma nei checkpoint del file system NTFS il file system NTFS esamina il journal e lo taglia quando le dimensioni superano il valore di MaximumSize più il valore di AllocationDelta. In corrispondenza dei checkpoint del file system NTFS, il sistema operativo scrive i record nel file di log del file system NTFS che consentono al file system NTFS di determinare quale elaborazione è necessaria per il ripristino in caso di un errore.
AllocationDelta è il numero di byte aggiunti alla fine e rimossi dall'inizio del journal delle modifiche ogni volta che la memoria viene allocata o deallocata. In altre parole, l'allocazione e la deallocazione vengono eseguite in unità di questa dimensione. Un multiplo intero di una dimensione del cluster è un valore ragionevole per questo membro.
Se un amministratore modifica un diario delle modifiche esistente in modo che abbia un valore MaximumSize maggiore, ad esempio se un volume viene reindicizzato troppo spesso, il diario delle modifiche riceve semplicemente nuove voci fino a superare la nuova dimensione massima.
Per eliminare un giornale delle modifiche, usare il codice di controllo FSCTL_DELETE_USN_JOURNAL. Quando si usa questa operazione, esamina tutti i file nel volume e reimposta l'USN per ogni file su zero. L'operazione elimina quindi il journal delle modifiche esistente. Questa operazione persiste tra i riavvii del sistema fino al completamento. Qualsiasi tentativo di leggere, creare o modificare il registro delle modifiche durante questo processo fallisce con il codice di errore ERROR_JOURNAL_DELETE_IN_PROGRESS.
È anche possibile usare il codice di controllo FSCTL_DELETE_USN_JOURNAL per determinare se è in corso un'eliminazione avviata da un altro processo. Ad esempio, l'applicazione, all'avvio, può determinare se è in corso un'eliminazione. Poiché le eliminazioni del journal vengono mantenute tra i riavvii di sistema, i servizi e le applicazioni avviati al riavvio del sistema devono verificare la presenza di un'eliminazione in corso.
I journal delle modifiche non vengono necessariamente creati all'avvio. Per creare un journal delle modifiche, un amministratore può farlo in modo esplicito o avviare un altro servizio che richiede un journal delle modifiche.