VSS 增量和差異備份中的寫入器角色

寫入器的增量備份和差異備份通常會在處理 識別 (CVssWriter::OnIdentify) 、 PrepareForBackup (CVssWriter:OnPrepareBackup) ,以及 PostSnapshot (CVssWriter:OnPostSnapshot) 事件時發生。 寫入器參與的方式是支援備份戳記和上次修改時間,以及執行備份的要求者是否支援 部分檔案作業

在增量和差異備份期間處理識別事件

處理 Identify 事件時,寫入器會透過備份架構 (VSS_BACKUP_SCHEMA) 和檔案規格備份類型, (VSS_FILE_SPEC_BACKUP_TYPE) 遮罩 ,建立其增量和差異備份作業的基本架構。

寫入器會藉由建立 VSS_BACKUP_SCHEMA 值的位元遮罩,並將它傳遞至 IVssCreateWriterMetadata::SetBackupSchema 方法,以指出其在其寫入器元資料檔案中支援的作業。 透過此,寫入器可以指出它是否支援下列專案:

  • 增量備份 (VSS_BS_INCREMENTAL)
  • 差異備份 (VSS_BS_DIFFERENTIAL)
  • 增量和差異備份無法混合 (VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL)
  • 使用備份戳記的增量備份和差異備份 (VSS_BS_TIMESTAMPED)
  • 根據檔案上次修改的相關資訊進行增量和差異備份 (VSS_BS_LAST_MODIFY)

寫入器會使用檔案規格備份類型遮罩,為要求者提供檔案集層級資訊,以瞭解如何在增量或差異備份中包含檔案。

寫入器可以藉由建立 VSS_FILE_SPEC_BACKUP_TYPE 值的位元遮罩,並將它傳遞至 IVssCreateWriterMetadata::AddDatabaseFilesIVssCreateWriterMetadata::AddDatabaseLogFiles::AddDatabaseLogFilesIVssCreateWriterMetadata::AddFilesToFileGroup,來設定檔案集的檔案規格備份類型遮罩。

VSS_FILE_SPEC_BACKUP_TYPE 列舉有 三個「需要備份」值,會影響差異和增量備份:

  • VSS_FSBT_ALL_BACKUP_REQUIRED
  • VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

有三個「需要陰影複製」值:

  • VSS_FSBT_ALL_SNAPSHOT_REQUIRED
  • VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

使用「需要陰影複製」檔案規格備份類型的檔案集,指出要求者在執行 INCREMENTAL、DIFFERENTIAL 或 ALL (時是否需要從陰影複製複製資料,其中包含增量和差異作業) 備份作業。

套用至 INCREMENTAL、DIFFERENTIAL 或 ALL 備份作業的「需要備份」旗標,表示寫入器預期在還原任何備份作業之後,可以使用目前版本的檔案集複本。 一般而言,這表示如果檔案集標記為「需要備份」,其所有成員都會在增量或差異備份期間複製到備份媒體,而不論上次發生備份或修改的時間為何。

根據預設,檔案集會新增至具有檔案規格備份類型的元件VSS_FSBT_ALL_BACKUP_REQUIRED | VSS_FSBT_ALL_SNAPSHOT_REQUIRED。 因此,除非寫入器開發人員決定不要使用預設 (,方法是選擇其他檔案規格備份類型、使用部分檔案作業或使用差異檔案) ,否則大部分檔案集中的檔案通常會完整複製到備份媒體。

此時,寫入器的寫入器元資料檔案會填入要求者需要啟動差異或增量備份的大部分資訊。 在 PrepareForBackup 事件期間,將會處理支援備份的檔案集或檔案層級資訊規格。

在增量備份和差異備份期間處理 PrepareForBackup 事件

在要求者繼續進行實際的備份作業之前,寫入器可以透過IVssComponent介面改變要求者的備份元件檔,來修改增量差異備份的規格。

由於寫入器會使用 IVssComponent 介面,因此它們通常會在處理 PrepareForBackup 事件時執行這些準備。

CVssWriter:OnPrepareBackup中,寫入器可以更精確地指定要如何評估某些檔案以進行備份、指定備份時應該使用哪些機制,以及可能設定備份戳記。

部分檔案

如果要求者支援它們,寫入器可以選擇使用部分檔案作業實作增量或差異備份。 (寫入器可以呼叫 CVssWriter::IsPartialFileSupportEnabled.) 來判斷要求者是否支援部分檔案作業

寫入器會使用 IVssComponent::AddPartialFile 來指出在增量或差異作業期間要備份之所選檔案的那些部分。 要求者必須遵守此規格,而且必須一律備份檔案的指定區段。 (如需部分檔案作業的詳細資訊,請參閱 使用部分檔案 。)

使用IVssComponent::AddPartialFile,寫入器可以將檔案新增至先前未新增至其其中一個元件 (集的備份,由IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseLogFilesIVssCreateWriterMetadata::AddFilesToFileGroup) 為部分檔案。 以這種方式新增至備份的任何新檔案都必須位於已經為此備份複製陰影的磁片區上。

如果檔案涉及部分檔案作業,這會取代任何會忽略的檔案規格備份類型。

差異檔案

支援上次修改備份架構的寫入器 (VSS_BS_SCHEMA) 可以將 差異檔案 新增至增量或差異備份。

在指定差異檔案時,寫入器會使用 IVssComponent::AddDifferencedFileByLastModifyTime 並指定路徑、檔案名和遞迴旗標,不過,這些不需要比對任何元件中包含的檔案集。

事實上,寫入器可以透過IVssCreateWriterMetadata::AddDatabaseFiles、IVssCreateWriterMetadata::AddDatabaseLogFilesIVssCreateWriterMetadata::AddDatabaseLogFiles 或 IVssCreateWriterMetadata::AddFilesToFileGroup將檔案新增 (至備份) 為差異檔案。 以這種方式新增至備份的任何新檔案都必須位於已經為此備份複製陰影的磁片區上。

一般而言,寫入器也會根據寫入器自己的歷程記錄機制,在新增差異檔案時指定上次修改的時間。 如果指定這個上次修改時間,要求者必須一律使用,以判斷檔案是否需要包含在增量或差異備份中。

將差異檔案新增至增量或差異備份集時,寫入器可能會選擇不要指定上次修改時間。 如果是這種情況,要求者可以使用自己的機制,例如先前備份或檔案系統資訊的記錄,以判斷差異檔案是否應該包含在增量或差異備份中。

會忽略任何差異檔案的檔案規格備份類型。

備份戳記

支援備份戳記的寫入器 (VSS_BS_TIMESTAMP) 有自己的私用格式,可用來儲存上次發生備份時的相關資訊。 這項資訊是由寫入器在備份期間產生。

備份戳記會儲存在備份元件檔中,做為 IVssComponent::SetBackupStamp 方法的字串。 備份戳記會套用至元件 (或元件集中的所有檔案集,) 對應至 IVssComponent實例。

如果要求者可以存取先前備份的備份戳記,則會藉由呼叫 IVssBackupComponents::SetPreviousBackupStamp,讓寫入器可以使用它。

然後,寫入器可以使用 IVssComponent::GetPreviousBackupStamp來檢查此時間戳記。

請注意,要求者只會儲存並傳回包含備份戳記的字串。 它不知道字串格式或如何使用它的任何專案;只有寫入器具有該資訊。

寫入器可以選擇在呼叫IVssComponent::GetPreviousBackupStamp之後,使用IVssComponent::SetBackupStamp來更新目前的備份戳記,因此以自己的格式錄製目前增量或差異備份作業的日期。