Ruolo richiedente nel backup di archivi complessi

Come per tutte le operazioni importanti in VSS, i backup incrementali e differenziali richiedono una stretta collaborazione tra i richiedenti e i writer.

Tipo di backup

L'infrastruttura offre un supporto speciale per cinque tipi di backup. Sono descritte come segue:

  • Completo (VSS_BT_FULL). Verrà eseguito il backup dei file indipendentemente dalla data dell'ultimo backup. La cronologia dei backup di ogni file verrà aggiornata e questo tipo di backup può essere usato come base di un backup incrementale o differenziale. Se sono presenti file di log, è possibile che vengano troncati in seguito a questo backup.

    Il ripristino di un backup completo richiede solo una singola immagine di backup.

  • Differenziale (VSS_BT_DIFFERENTIAL). L'API VSS viene usata per garantire che solo i file modificati o aggiunti dopo l'ultimo backup completo vengano copiati in un supporto di archiviazione; tutte le informazioni di backup intermedie vengono ignorate. Ciò può includere interi file o intervalli specifici all'interno dei file. Un backup differenziale è associato a un backup completo e in genere non può essere ripristinato finché il backup completo non è stato ripristinato. Se sono presenti file di log, in genere non verranno troncati in seguito a questo backup.

    Il ripristino di un backup differenziale richiede l'immagine di backup originale e l'immagine di backup differenziale più recente eseguita dall'ultimo backup completo.

  • Incrementale (VSS_BT_INCREMENTAL). L'API VSS viene usata per garantire che solo i file modificati o aggiunti dopo l'ultimo backup completo o incrementale vengano copiati in un supporto di archiviazione. Ciò può includere interi file o intervalli specifici all'interno dei file. Alcuni writer non consentono la combinazione di backup incrementali con backup differenziali. Se sono presenti file di log, è possibile che vengano troncati in seguito a questo backup.

    Il ripristino di un backup incrementale richiede l'immagine di backup originale e tutte le immagini di backup incrementali eseguite dal backup iniziale.

  • Backup del log (VSS_BT_LOG). Verrà eseguito il backup solo dei file di log di un writer (file aggiunti a un componente con il metodo IVssCreateWriterMetadata::AddDataBaseLogFiles e recuperati da una chiamata a IVssWMComponent::GetDatabaseLogFile). Questo tipo di backup è specifico di VSS. I backup del log tendono a essere eseguiti abbastanza frequentemente. In genere, il file di log verrà troncato in seguito a questo backup.

  • Copia backup (VSS_BT_COPY). Analogamente al tipo di backup VSS_BT_FULL, i file verranno sottoposti a backup indipendentemente dalla data dell'ultimo backup. Tuttavia, la cronologia dei backup di ogni file non verrà aggiornata e questo tipo di backup non può essere usato come base di un backup incrementale o differenziale. I file di log non devono mai essere troncati in seguito a un backup di copia.

Supporto di file parziali

Alcuni writer supportano il ripristino dei file tramite la sovrascrittura di parti dei file gestiti. Un richiedente può essere progettato per sfruttare questo vantaggio e, se lo indica, impostando le informazioni in IVssBackupComponents::SetBackupState.

Il richiedente specifica il tipo di backup eseguito tramite il parametro backupType di IVssBackupComponents::SetBackupState. Diversi writer supporteranno diversi tipi di backup. Dopo la chiamata di IVssBackupComponents::GatherWriterMetadata , il richiedente può determinare i tipi di backup supportati da un determinato writer chiamando IVssExamineWriterMetadata::GetBackupSchema. Il valore restituito è una maschera di bit che indica il supporto per tipi di backup diversi. VSS_BS_DIFFERENTIAL indica il supporto per i backup differenziali, VSS_BS_INCREMENTAL per i backup incrementali, VSS_BS_LOG per i backup del log e VSS_BS_COPY per i backup di copia; tutti i writer devono supportare backup completi. Se un writer non supporta la combinazione di backup incrementali con backup differenziali, verrà aggiunto anche il flag VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL . Se il richiedente esegue un backup incrementale o differenziale e un determinato writer non supporta tale tipo di backup, è necessario eseguire un backup completo su tale writer.

Timbri di backup

I backup incrementali e differenziali sono sempre associati a un backup precedente. Esistono due modi per collegare i backup. Per gli archivi dati semplici, il richiedente può tenere traccia della correlazione tra i backup. Tuttavia, per archivi dati più complessi, il writer dovrà mantenere il proprio timestamp con il backup; questo timestamp può tenere traccia della posizione del log, delle informazioni sul checkpoint e così via. Il richiedente può determinare se un determinato writer deve archiviare il proprio timestamp controllando la presenza del bit VSS_BS_TIMESTAMPED nel valore restituito da IVssExamineWriterMetadata::GetBackupSchema.

I writer che archivieranno un timestamp in un backup aggiungeranno il timestamp durante l'elaborazione di IVssBackupComponents::P repareForBackup o durante l'elaborazione di IVssBackupComponents::D oSnapshotSet. Il richiedente può ottenere questo timestamp chiamando IVssComponent::GetBackupStamp. Quando si esegue un backup incrementale o differenziale, il richiedente deve collegare il backup corrente a un backup precedente. Questa operazione viene eseguita ottenendo il timestamp dal backup precedente di un componente specifico e passandolo alla funzione IVssBackupComponents::SetPreviousBackupStamp ; questa operazione deve essere eseguita per ogni componente di cui è stato eseguito il backup nel backup precedente.

Backup di file

Backup di file segnalati dal writer

Ogni specifica di file aggiunta da un writer ai relativi metadati durante la fase GatherWriterMetadata contiene una maschera del tipo di backup che specifica quando eseguire il backup del file. Il richiedente determina la maschera chiamando IVssWMFiledesc::GetBackupTypeMask. I valori in questa maschera vengono usati per determinare i tipi di backup di cui deve essere eseguito il backup della specifica del file. La maschera può contenere uno o più dei valori di bit seguenti:

VSS_FSBT_FULL_BACKUP_REQUIRED

Obbligatorio per i backup completi.

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

Obbligatorio per i backup differenziali.

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

Obbligatorio per i backup incrementali.

VSS_FSBT_LOG_BACKUP_REQUIRED

Obbligatorio per i backup del log.

VSS_FSBT_ALL_BACKUP_REQUIRED

Obbligatorio per tutti i tipi di backup; si tratta dell'impostazione predefinita.

Questa specifica esegue l'override della specifica di selettività del componente. Si consideri ad esempio un componente i cui file sono tutti contrassegnati con VSS_FSBT_LOG_BACKUP_REQUIRED ma non con VSS_FSBT_FULL_BACKUP_REQUIRED. Si supponga che questo componente non sia selezionabile per il backup (bSelectable è false quando è stato chiamato IVssCreateWriterMetadata::AddComponent ). Nel caso di un backup del log, è necessario eseguire sempre il backup di tutti i file in questo componente. Tuttavia, nel caso di un backup completo, nessuno dei file deve essere sottoposto a backup, nonostante il fatto che la selettività del componente implica che deve essere eseguito il backup.

Backup in base all'ora dell'ultima modifica

Le informazioni sulla specifica del file specificate nella fase IVssBackupComponents::GatherWriterMetadata non forniscono al richiedente informazioni sulle modifiche apportate dall'ultimo backup. Un modo per consentire a un writer di indicare le modifiche apportate al richiedente consiste nell'usare il meccanismo di file diverso. Un writer può specificare che è necessario eseguire il backup di determinati file in un componente solo se sono stati modificati da un determinato momento; il writer può specificare questi file in IVssBackupComponents::P repareForBackup o in IVssBackupComponents::D oSnapshotSet. Un richiedente può determinare questi file chiamando IVssComponent::GetDifferencedFilesCount e IVssComponent::GetDifferencedFile. Se la specifica del file corrisponde a un set in IVssBackupComponents::GatherWriterMetadata (attualmente valido in base alla maschera del tipo di backup), le informazioni sui file con differenza sostituiscono le informazioni precedenti; ovvero i file corrispondenti alla specifica del file vengono ora sottoposti a backup solo se sono stati modificati dall'ora specificata. L'ora dell'ultima modifica viene comunicata usando una struttura FILETIME . Se il valore di questa struttura è zero, ciò implica che l'ora dell'ultima modifica deve essere determinata in base al record del richiedente dell'ora dell'ultimo backup.

Backup parziale dei file

Un altro modo per consentire a un writer di indicare le modifiche apportate al richiedente consiste nell'usare il meccanismo di file parziale. Un writer può specificare intervalli di byte all'interno di file di componente di cui è necessario eseguire il backup; il writer può specificare questi intervalli di file in IVssBackupComponents::P repareForBackup o in IVssBackupComponents::D oSnapshotSet. Un richiedente può determinare questi file chiamando IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile. IVssComponent::GetPartialFile restituirà un percorso e un nome di file che punta al file e una stringa di intervalli che indica cosa deve essere eseguito il backup nel file. Come per i file con differenze, se il percorso e il nome file corrispondono a una specifica di file impostata dal writer in IVssBackupComponents::GatherWriterMetadata, le informazioni sul file parziale sostituiscono l'impostazione precedente. La stringa degli intervalli può avere due formati: può specificare direttamente gli intervalli oppure specificare un file contenente informazioni sugli intervalli. Se si specificano direttamente gli intervalli, la sintassi è un elenco delimitato da virgole del formato offset1:length1, offset2:length2, in cui ogni offset e lunghezza è un intero senza segno a 64 bit. Se si specifica un file di intervalli, la stringa degli intervalli deve essere impostata su File= filename, dove filename è il percorso completo del file di intervalli. Il file di intervalli è un file binario formattato come elenco di interi senza segno a 64 bit. Il primo numero intero indica il numero di intervalli rappresentati nel file. Ogni coppia successiva di interi rappresenta l'offset e la lunghezza di un intervallo. Il richiedente deve eseguire anche il backup e il ripristino di questo file di intervalli.

Regole specifiche dei file

Le specifiche dei file aggiunte tramite il file differenced-file e i meccanismi partial-file modificheranno le specifiche dei file impostate in IVssBackupComponents::GatherWriterMetadata o aggiungeranno file completamente nuovi. Se si modificano le specifiche dei file impostate in IVssBackupComponents::GatherWriterMetadata usando il meccanismo di file parziale, un richiedente può prevedere che la specifica del file corrisponda esattamente a una delle specifiche di file impostate nel componente in IVssBackupComponents::GatherWriterMetadata. La specifica del file non sovrapporrà parzialmente un'altra specifica di file e non corrisponderà ad alcuna specifica di file in nessun altro componente del writer. Le specifiche dei file aggiunte usando il meccanismo partial-file possono tuttavia sovrapporsi parzialmente a un'altra specifica di file. Quando si tratta di true, la specifica del file differenza o del file parziale esegue l'override della specifica impostata in IVssBackupComponents::GatherWriterMetadata. Le specifiche dei file generali possono avere un valore di percorso alternativo (restituito da IVssWMFiledesc::GetAlternateLocation) che indica un luogo alternativo per ottenere il file dal momento del backup. Se le specifiche del file impostate tramite i meccanismi di file diversi o parziali corrispondono a una specifica di file esistente con una posizione alternativa, i dati devono essere prelevati da questa posizione alternativa. Se le specifiche dei file impostate tramite i meccanismi di file differenza o di file parziale non corrispondono a specifiche esistenti per il componente, questi intervalli di file devono ora essere aggiunti al backup. Il richiedente può prevedere che solo i file nei volumi che sono già stati inclusi nel set di copia shadow verranno aggiunti usando uno di questi meccanismi.

Backup senza copia shadow

Alcuni tipi di file potrebbero non essere necessari per il backup di un volume di copia shadow. Ad esempio, questo sarà spesso vero dei file di log del database. Poiché i file di log crescono monotonicamente e un writer può specificare esattamente quali parti del file eseguire il backup usando file parziali, spesso sarà possibile eseguire il backup del log del volume originale. Come ottimizzazione, un writer può contrassegnare i file che richiedono copie shadow per diversi tipi di backup usando la maschera di tipo di backup. Il valore restituito da IVssWMFiledesc::GetBackupTypeMask può contenere uno o più dei valori bit seguenti:

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

Copia shadow necessaria per i backup completi.

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

Copia shadow necessaria per i backup differenziali.

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

Copia shadow necessaria per i backup incrementali.

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

Copia shadow necessaria per i backup del log.

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

Copia shadow necessaria per tutti i tipi di backup; si tratta dell'impostazione predefinita.

Se un volume specifico contiene solo componenti che non richiedono una copia shadow per questo backup, il richiedente può ignorare il passaggio della creazione di una copia shadow per questo volume. Tutti i dati di questo volume possono essere copiati nel supporto di backup direttamente dal volume originale.

Ripristino di file

Ripristini sequenziali

Dopo aver eseguito un'operazione di ripristino, il richiedente invia l'evento PostRestore a tutti i writer. In genere, i writer gestiscono questo evento eseguendo operazioni di ripristino o altre operazioni di post-ripristino. Il ripristino dei backup incrementali, tuttavia, in genere si verifica come sequenza di operazioni di ripristino, una per backup incrementale. Il richiedente deve informare il writer che tale ripristino è in corso per impedire che il ripristino o altre operazioni indesiderate si verifichino fino a quando il ripristino non viene completato completamente. Questa operazione viene eseguita chiamando IVssBackupComponents::SetAdditionalRestores. Questo metodo viene chiamato per componente e indica al writer che più ripristini stanno arrivando per tale componente. Per il ripristino finale nella sequenza, il flag di ripristino aggiuntivo deve essere impostato su false (il relativo valore predefinito), che indica che si tratta dell'ultimo ripristino nella sequenza per tale componente.

Nuove destinazioni

Se supportato dal writer, il richiedente può ripristinare i file di dati in un percorso diverso dal percorso originale in fase di backup. Il richiedente può verificare la presenza di questo supporto chiamando IVssExamineWriterMetadata::GetBackupSchema. Il bit di VSS_BS_WRITER_SUPPORTS_NEW_TARGET verrà impostato se il writer supporta questo comportamento. Il richiedente informa il writer della nuova posizione chiamando IVssBackupComponents::AddNewTarget per ogni specifica del file spostato. Il richiedente può anche decidere di ripristinare un file di intervalli specifico in un percorso diverso. Il richiedente informa il writer di questa modifica chiamando IVssBackupComponents::SetRangesFilePath.

Destinazioni dirette

Per scenari di ripristino complessi, un writer può voler eseguire il mapping di intervalli di un file di backup in intervalli diversi dello stesso file o di un file diverso. Questa operazione può essere eseguita usando il meccanismo di destinazione diretto. Il richiedente può determinare dopo la fase IVssBackupComponents::P reRestore utilizzata per un componente chiamando IVssComponent::GetRestoreTarget e verificando una restituzione di VSS_RT_DIRECTED. Il richiedente può ottenere tutti questi ripristini reindirizzati chiamando IVssComponent::GetDirectedTargetCount e IVssComponent::GetDirectedTarget. IVssComponent::GetDirectedTarget restituirà un percorso completo a un file di origine nel backup e un percorso completo a un file di destinazione che verrà ripristinato. Restituisce anche un elenco di intervalli per ognuno di questi file. Il richiedente è quindi responsabile del ripristino degli intervalli specificati nel file di origine negli intervalli mappati nel file di destinazione. Il formato della stringa di intervalli è uguale a in IVssComponent::GetPartialFile.