Creazione, modifica ed eliminazione di un journal delle modifiche

Gli amministratori possono creare, eliminare e ricreare i journal delle modifiche. Un amministratore deve eliminare un journal quando il valore USN (Update Sequence Number) corrente si avvicina al valore USN massimo possibile, come indicato dal membro MaxUsn 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. Ovvero, è necessario essere un membro del gruppo Administrators.

Per creare o modificare un journal delle modifiche in un volume specificato a livello di codice, 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 rispetto alle informazioni nella struttura CREATE_USN_JOURNAL_DATA , che FSCTL_CREATE_USN_JOURNAL accetta come input. CREATE_USN_JOURNAL_DATA ha i 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 l'elaborazione necessaria per il ripristino da 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 numero intero multiplo di dimensioni del cluster è un valore ragionevole per questo membro.

Se un amministratore modifica un journal delle modifiche esistente in modo che abbia un valore MaximumSize maggiore, ad esempio se un volume viene ri indicizzato troppo spesso, il journal delle modifiche riceve semplicemente nuove voci fino a quando non supera le nuove dimensioni massime.

Per eliminare un journal delle modifiche, usare il codice di controllo FSCTL_DELETE_USN_JOURNAL . Quando si usa questa operazione, scorre 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 viene mantenuta tra i riavvii del sistema fino al completamento. Qualsiasi tentativo di leggere, creare o modificare il journal delle modifiche durante questo processo ha esito negativo e 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, quando viene avviata, può determinare se è in corso un'eliminazione. Poiché le eliminazioni del journal vengono mantenute tra 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.