Utilizzo di file parziali

Talvolta è utile eseguire il backup e il ripristino solo di sezioni di file. VSS fornisce meccanismi di file parziali , che, se i richiedenti lo supportano, consente ai writer di specificare backup e ripristini di file parziali.

Le operazioni di file parziali sono spesso di uso più elevato per i writer che gestiscono file di grandi dimensioni, ma solo una piccola frazione delle quali cambiano tra le operazioni di backup. In questo caso, spesso è utile copiare solo quella sezione modificata nel supporto di backup. Per questo motivo, le operazioni di file parziali sono in genere, ma non esclusivamente, usate per supportare operazioni di backup e ripristino incrementali.

Se un writer vuole implementare un'operazione di file parziale, usa CVssWriter::IsPartialFileSupportEnabled per determinare se il richiedente utilizza supporta l'operazione.

Se il richiedente supporta operazioni di file parziali e se aggiunge il componente che gestisce il file (o il componente che definisce il set di componenti che contiene il file) al documento componenti di backup, un writer indica le sezioni del file da salvare (in genere durante la gestione di un evento PrepareForBackup o PostSnapshot ) chiamando IVssComponent::AddPartialFile.

Oltre a un percorso e un nome file, il writer fornisce l'intervallo, informazioni facoltative sui metadati a IVssComponent::AddPartialFile.

Le informazioni sull'intervallo vengono fornite come stringa che contiene una delle seguenti:

  • Coppie di offset nel file di cui eseguire il backup (in byte) e la lunghezza della sezione di cui eseguire il backup (in byte), l'offset e la lunghezza separati da due punti e ogni coppia separata da una virgola, ad esempio Offset1**:Length1,** Offset2**:**Length2.

    Ogni valore è un intero a 64 bit (in formato esadecimale o decimale) specificando rispettivamente un offset di byte e una lunghezza in byte.

  • Percorso completo, incluso il nome file, nel sistema corrente di un file di intervalli binari contenente quanto segue:

    • Numero (espresso come intero a 64 bit) di intervalli di file distinti contenuti nel file
    • Ogni intervallo espresso come coppia di interi a 64 bit: il primo membro della coppia che rappresenta l'offset nel file di cui viene eseguito il backup (in byte) e il secondo membro è la lunghezza dei dati di cui eseguire il backup (in byte)

Se un writer usa un file di intervalli per specificare un'operazione di file parziale, un richiedente deve garantire che venga eseguito il backup di questo file (anche se il file non fa necessariamente parte del set di backup predefinito) o che le informazioni sugli intervalli vengano mantenute nel supporto di backup in altro modo. Se non viene eseguito il backup delle informazioni del file di intervalli, il ripristino del file di cui è stato eseguito il backup parziale sarà impossibile.

Il writer può anche aggiungere una stringa contenente metadati. Questi metadati possono essere in un formato specifico del writer perché è destinato a consentire al writer di convalidare eventuali ripristini futuri.

Con queste informazioni, un richiedente di supporto può eseguire un backup parziale dei file.

Si consideri ad esempio un file di grandi dimensioni il cui intestazione (byte 64-512) contiene un conteggio di record e altre informazioni aggiornate di frequente e i cui dati più recenti si trovano negli ultimi 65536 byte, byte 0x1239E8577A a 0x1239E7577A.

Un writer può specificare un elenco di intervalli come stringa "64:448,0x1239E8577A:65536".

In caso di ripristino e prima di eseguire effettivamente un'operazione di ripristino, un richiedente deve verificare se i file richiedono il supporto parziale dei file.

A tale scopo, il richiedente esegue prima l'iterazione dei writer con i componenti archiviati nel documento dei componenti di backup usando IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents.

L'interfaccia IVssBackupComponents::GetWriterComponents viene quindi usata per restituire istanze dell'interfaccia IVssWriterComponentsExt , che forniscono IVssWriterComponentsExt::GetComponent e IVssWriterComponentsExt::GetComponentCount, che consentono al richiedente di ottenere istanze IVssComponentent .

In questo modo un richiedente può ottenere informazioni sui file di cui è stato eseguito il backup parziale per partecipare a un ripristino usando IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile per l'istanza di IVssComponent corrispondente al componente che gestisce il file (o il componente che definisce il set di componenti che contiene il file).

Se l'operazione di file parziale è stata controllata da un file di intervalli, tale file deve essere ripristinato prima di copiare nuovamente i dati su disco. Può verificarsi che il richiedente sia necessario per copiare nuovamente il file di intervalli in un nuovo percorso su disco. In questo caso, indica che l'operazione è stata eseguita tramite IVssBackupComponents::SetRangesFilePath.

Il richiedente procede quindi alla copia dei dati nei percorsi appropriati nella destinazione di ripristino già su disco.

Un writer (durante la gestione di un evento PostRestore ), esaminando IVssComponent::GetFileRestoreStatus per i file indicati da IVssComponent::GetPartialFile, determina se l'operazione di file parziale ha avuto esito positivo. Il writer deve sempre tentare di verificare la correttezza di questo ripristino usando le informazioni di offset e tutti i metadati inclusi nel documento Componenti di backup.

Se il richiedente ha dovuto ripristinare il file degli intervalli in un nuovo percorso, VSS aggiornerà queste informazioni in modo che il percorso restituito da IVssComponent::GetPartialFile sia corretto.