Condividi tramite


Ruolo richiedente nel backup di archivi complessi

Come per tutte le operazioni importanti in VSS, i backup incrementali e i backup 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 descritti come segue:

  • Completo (VSS_BT_FULL). Verrà eseguito il backup dei file indipendentemente dalla data dell'ultimo backup. La cronologia di 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. 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 fino a quando non viene ripristinato il backup completo. 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 dopo l'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. 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 dopo il 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 per VSS. I backup del log tendono a essere eseguiti molto frequentemente. In genere, il file di log verrà troncato a seguito di questo backup.

  • Backup copia (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 di 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 programmi supportano il ripristino dei file attraverso la sovrascrittura di parti dei file che gestiscono. Un richiedente può essere progettato per sfruttare questo vantaggio e, in tal caso, lo indica impostando queste informazioni in IVssBackupComponents::SetBackupState.

Il richiedente specifica il tipo di backup eseguito tramite il parametro backupType di IVssBackupComponents::SetBackupState. I diversi writer supporteranno diversi tipi di backup. Dopo aver chiamato 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 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.

Francobolli 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, l'autore dovrà mantenere il proprio timestamp durante 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 verificando il 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::PrepareForBackup o durante l'elaborazione di IVssBackupComponents::DoSnapshotSet. Il richiedente può ottenere questo timestamp chiamando IVssComponent::GetBackupStamp. Quando si esegue un backup incrementale o differenziale, il richiedente deve associare 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.

Salvataggio dei file

Backup dei 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 qual è la maschera chiamando IVssWMFiledesc::GetBackupTypeMask. I valori in questa maschera vengono usati per determinare per quali tipi di backup è necessario eseguire 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_BACKUP_INCREMENTALE_RICHIESTO

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 sostituisce la 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, non è necessario eseguire il backup di nessuno dei file, 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 di 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::PrepareForBackup o in IVssBackupComponents::DoSnapshotSet. 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 differenziati sostituiscono le informazioni precedenti; ovvero, i file corrispondenti alla specifica del file vengono ora sottoposti a backup solo se sono stati modificati dopo l'ora specificata. L'ora dell'ultima modifica viene comunicata utilizzando una strutturaFILETIME. 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::PrepareForBackup o in IVssBackupComponents::DoSnapshotSet. 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 sottoposto a 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= nome file, dove nome file è il percorso completo del file degli intervalli. Il file degli intervalli è un file binario formattato come un elenco di numeri interi senza segno a 64 bit. Il primo numero intero indica il numero di intervalli rappresentati nel file. Ogni coppia di interi successiva rappresenta l'offset e la lunghezza di un intervallo. Il richiedente deve occuparsi anche del backup e del ripristino di questo file di intervalli.

Regole specifiche dei file

Le specifiche dei file aggiunte tramite i file differenziati e i meccanismi di file parziali 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 potrà sovrapporsi parzialmente a un'altra specifica di file e non corrisponderà a nessuna specifica di file in nessun altro componente di quel writer. Le specifiche dei file aggiunte usando il meccanismo di file parziale possono tuttavia sovrapporsi parzialmente a un'altra specifica di file. In questo caso, la specifica del file differenziato o del file parziale sostituisce la serie di specifiche in IVssBackupComponents::GatherWriterMetadata. Le specifiche di file generali possono avere un valore di percorso alternativo (restituito da IVssWMFiledesc::GetAlternateLocation) che indica una posizione alternativa da cui ottenere il file in fase di backup. Se le specifiche dei file impostate tramite i meccanismi di file differenziati o parziali corrispondono a una specifica di file esistente con un percorso alternativo, i dati devono essere prelevati da questo percorso alternativo. Se le specifiche dei file impostate tramite i meccanismi di file differenze o di file parziali non corrispondono a specifiche esistenti per il componente, questi intervalli di file dovrebbero ora essere aggiunti al backup. Il richiedente può aspettarsi che verranno aggiunti solo i file sui volumi che sono già stati inclusi nel set di copie shadow utilizzando uno di questi meccanismi.

Backup senza Copia Shadow

Alcuni tipi di file potrebbero non dover essere sottoposti a backup dal volume di copia shadow. Ad esempio, spesso si tratta di file di log del database. Poiché i file di registro aumentano in modo monotonico e un writer può specificare esattamente quali parti del file fare il backup utilizzando file parziali, spesso sarà possibile effettuare il backup del registro su un volume diverso dall'originale. Come ottimizzazione, un writer può contrassegnare i file che richiedono copie shadow per diversi tipi di backup usando la maschera di tipo backup. Il valore restituito da IVssWMFiledesc::GetBackupTypeMask può contenere uno o più dei valori di bit seguenti:

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

Copia ombra 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 ombra necessaria per i backup dei registri.

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

Al termine dell'esecuzione di un'operazione di ripristino, il richiedente invia l'evento PostRestore a tutti i writer. In genere, i writer gestiscono questo evento eseguendo operazioni di recupero o altre operazioni successive al ripristino. Il ripristino dei backup incrementali, tuttavia, in genere avviene come sequenza di operazioni di ripristino, una per backup incrementale. Il richiedente deve informare il writer che tale ripristino è in corso per impedire il ripristino o altre operazioni indesiderate fino a quando il ripristino non viene completato completamente. Ciò viene fatto chiamando IVssBackupComponents::SetAdditionalRestores. Questo metodo viene chiamato per componente e indica allo scrittore che sono previsti ulteriori ripristini per tale componente. Per il ripristino finale nella sequenza, il flag additional-restores deve essere impostato su false (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 da quello del momento del backup originale. Il richiedente può verificare la presenza di questo supporto chiamando IVssExamineWriterMetadata::GetBackupSchema. Il bit VSS_BS_WRITER_SUPPORTS_NEW_TARGET sarà impostato se il programma di scrittura supporta questo comportamento. Il richiedente informa il writer del nuovo percorso chiamando IVssBackupComponents::AddNewTarget per ogni specifica del file ricollocata. 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.

Obiettivi Diretti

Per scenari di ripristino complessi, un writer può voler mappare gli intervalli di un file sottoposto a 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 di IVssBackupComponents::PreRestore che questo meccanismo viene usato per un componente chiamando IVssComponent::GetRestoreTarget e verificando un ritorno di VSS_RT_DIRECTED. Il richiedente può ottenere tutti questi ripristini reindirizzati chiamando IVssComponent::GetDirectedTargetCount e IVssComponent::GetDirectedTarget. IVssComponent::GetDirectedTarget restituirà un percorso completo di un file di origine nel backup e un percorso completo di un file di destinazione in cui 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.