VSS 增量和差異備份中的要求者角色

若要支援 增量差異 備份作業,要求者必須執行下列動作:

  1. 使用 IVssBackupComponents::GetWriterMetadata 來取得寫入器元資料檔案) 中資訊的 (存取權,特別是判斷支援哪些備份架構 (VSS_BACKUP_SCHEMA) 。
  2. 設定適當的備份狀態。
  3. 取得增量或差異備份的檔案和檔案集層級規格。
  4. 執行備份。

要求者判斷增量和差異支援和設定

要求者必須先取得寫入器支援的相關資訊,才能選取要包含在增量或差異備份中的元件,或設定自己的狀態。

判斷寫入器支援

要求者會使用 IVssEx,WriterMetadata::GetBackupSchema 方法擷取寫入器的備份架構遮罩,以判斷指定的寫入器是否支援 VSS 增量或差異備份。

支援 VSS 累加或差異技術的寫入器備份架構遮罩將包含 VSS_BS_INCREMENTALVSS_BS_DIFFERENTIAL或兩者。 寫入者也可能表示其參與 VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL 旗標的限制。 (如需備份架構) 的詳細資訊,請參閱 VSS_BACKUP_SCHEMA

設定要求者備份狀態

要求者會在產生PrepareForBackup事件之前,使用IVssBackupComponents::SetBackupState方法,將備份類型設定為VSS_BT_INCREMENTALVSS_BT_DIFFERENTIAL,以指出備份是增量或差異備份。

IVssBackupComponents::SetBackupState方法也用來指出要求者是否提供部分檔案支援,這經常用來實作特定的增量備份和還原作業。

取得增量和差異備份的寫入器規格

在成功傳回IVssBackupComponents::GatherWriterMetadata之後,每個寫入器的寫入器元資料檔案中所包含的檔案集層級檔案備份規格資訊 (VSS_FILE_SPEC_BACKUP_TYPE) 即可進行檢查。

不過,寫入器可以新增 差異檔案 或要求 部分檔案支援 ,直到其成功處理 PostSnapshot 事件為止。

差異檔案和部分檔案支援規格可以覆寫檔案規格備份類型,因此要求者可能會想要延遲有關增量和差異備份的所有寫入器規格完整分析,直到成功傳回 IVssBackupComponents::P repareForBackup之後。

取得檔案備份規格資訊

檔案集層級檔案備份規格資訊 (VSS_FILE_SPEC_BACKUP_TYPE) 包含在每個寫入器的寫入器元資料檔案中,而且可以在成功傳回 IVssBackupComponents::GatherWriterMetadata之後立即檢查。

要求者必須取得檔案備份規格遮罩, (VSS_FILE_SPEC_BACKUP_TYPE) ,每個寫入器元件的檔案集都必須包含在增量或差異備份中,不論元件是 明確隱含 包含的。

要求者可以使用 IVssBackupComponents::GetWriterComponentsCountIVssBackupComponents::GetWriterComponents::GetWriterComponents來判斷必須查詢哪些寫入者的寫入器元資料檔案。 IVssBackupComponents::GetWriterComponents 傳回的IVssWriterComponentsExt介面實例會透過IVssWriterComponentsExt::GetWriterInfo方法提供寫入器資訊。

要求者會透過 IVssWMComponent 介面實例取得元件資訊,該介面會使用 IVssExriterMetadata::GetComponent,對應至指定寫入器所管理的內含元件。

呼叫IVssWMComponent::GetFileIVssWMComponent::GetFile、IVssWMComponent::GetDatabaseFileIVssWMComponent::GetDatabaseLogFile () ,即可取得對應至IVssWMComponent介面的檔案集相關資訊。

這些呼叫可以針對每個元件的檔案集傳回 IVssWMFiledesc 介面的實例。

呼叫 IVssWMFiledesc::GetBackupTypeMask即可取得檔案集的檔案規格備份類型。

取得部分檔案和差異檔案資訊

要求者會透過 IVssComponent 介面取得部分檔案和差異檔案資訊。

要求者可以使用 IVssBackupComponents::GetWriterComponentsCountIVssBackupComponents::GetWriterComponents::GetWriterComponents來逐一查看備份中包含的所有寫入器。

IVssBackupComponents::GetWriterComponents 所傳回之IVssWriterComponentsExt介面的實例可讓您存取對應之 IVssComponent介面的所有實例 透過IVssWriterComponentsExt::GetComponentsExt::GetComponentIVssWriterComponentsExt::GetComponentCount方法明確包含的元件。

要求者必須針對架構支援累加式或差異備份的所有寫入器進行IVssComponent的所有實例,也就是備份架構遮罩所傳回的寫入器,如IVssExriterMetadata::GetBackupSchema所傳回,包括備份類型VSS_BT_INCREMENTAL時VSS_BS_INCREMENTAL,或在備份類型VSS_BS_DIFFERENTIALVSS_BS_DIFFERENTIAL

部分檔案資訊是藉由呼叫 IVssComponent::GetPartialFileCountIVssComponent::GetPartialFile 來取得 (請參閱 使用部分檔案) 。

對於支援備份作業的寫入器,其備份架構遮罩所傳回的檔案上次修改資料 (寫入器,如 IVssExriterMetadata::GetBackupSchema所傳回,包括 VSS_BS_LAST_MODIFY) ,呼叫 IVssComponent::GetDifferencedFilesCountIVssComponent::GetDifferencedFile取得差異檔案資訊。

請注意,差異檔案可能是新檔案,也就是不是目前指定寫入器寫入器元資料檔案中任何檔案集成員的檔案。

要求者不應該同時尋找部分檔案作業和差異檔案包含的檔案。 如果要求者遇到這類情況,它應該會傳回並記錄寫入器錯誤。

要求者可能仍會選擇繼續備份有問題的寫入器的檔案,但在此情況下,應該根據差異檔案資訊中找到的規格來執行此動作。

實作增量或差異備份

在實作備份之前,要求者應該具有哪些寫入器支援 增量差異 備份、所有要求的部分檔案作業、所有差異檔案,以及所有其他檔案的檔案規格備份類型的相關資訊。

非支援寫入器

其架構不支援備份架構 (寫入器的寫入器,如IVssExriterMetadata::GetBackupSchema所傳回VSS_BS_INCREMENTAL,在備份類型VSS_BT_INCREMENTAL或備份類型VSS_BS_DIFFERENTIAL時不包含VSS_BS_DIFFERENTIAL,) 無法提供增量或差異備份作業的任何直接支援。

這不一定表示寫入器的資料不會涉及增量或差異備份作業。 不過,選擇該怎麼做,是由要求者自行決定。 要求者可以執行下列任一動作:

  • (未備份屬於非支援寫入器的檔案,)
  • 備份非支援寫入器的所有檔案
  • 使用檔案系統資料和要求者自己的歷程記錄檔來執行增量備份。

最後一個替代方法應該非常小心使用,只有在要求者瞭解涉及的寫入器是否可支援與 VSS 機制無關的資料增量或差異備份和還原時。

支援寫入器

要求者必須處理 (,才能) 寫入器 的所有差異檔案,然後處理任何 部分檔案 要求,然後根據其檔案規格備份類型備份其餘檔案, (VSS_FILE_SPEC_BACKUP_TYPE) 。

  1. 備份差異檔案:

    對於支援備份作業的寫入器,其備份架構遮罩所傳回的上次修改資料 (寫入器,如 IVssExableWriterMetadata::GetBackupSchema所傳回,包括 VSS_BS_LAST_MODIFY) ,要求者會使用 IVssComponent::GetDifferencedFile 傳回的路徑、檔案規格和遞迴旗標資訊,以產生檔案清單做為增量備份或還原的候選項目。

    IVssComponent::GetDifferencedFile 也可以傳回上次修改的時間, (以 FILETIME 結構表示) 。

    如果寫入器所提供的上次修改時間不是零的,則要求者會使用它作為基礎 (,而不是檔案系統資訊或要求者自己的預存資料) ,以判斷檔案是否應該包含在 增量差異 備份中。

    例如,如果寫入器傳回的檔案上次修改時間為:

    • 最後一次完整備份之後,檔案應該同時包含在增量和差異備份中。
    • 在最後一次完整備份但上次增量備份之前,檔案應該包含在增量備份作業中,但不應該包含在差異備份中。

    如果寫入器所提供的上次修改時間為零,則要求者必須使用檔案系統資訊及其本身的儲存資料來判斷差異檔案的修改時間。

  2. 使用部分檔案作業:

    如果寫入器要求使用部分檔案作業備份檔案,要求者會使用檔案位移資訊將指定的檔案區段儲存至備份媒體。 (如需部分檔案作業的詳細資訊,請參閱 使用部分檔案) 。

    如上所述,寫入器不應將檔案同時指定為差異檔案,以及指定為部分檔案作業中的參與者。 如果要求者遇到這類情況,它應該會傳回並記錄寫入器錯誤。

    要求者可能仍會選擇繼續備份有問題的寫入器的檔案,但在此情況下,應該根據差異檔案資訊中找到的規格來執行此動作。

  3. 使用檔案規格備份類型:

    處理所有差異檔案和部分檔案作業之後,要求者現在會根據其檔案規格備份類型來處理其備份組中的所有剩餘檔案 , (VSS_FILE_SPEC_BACKUP_TYPE) 。

    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。 因此,除非寫入器明確設定檔規格備份類型,否則要求者必須複製部分檔案作業未處理的那些檔案,或大部分檔案集中指定的差異檔案通常會完整複製到備份媒體。

備份戳記

支援備份戳記的寫入器 (VSS_BS_TIMESTAMP) 可以選擇產生備份戳記資訊,以支援未來的增量和差異備份和還原作業。

包含備份戳記資訊的字串中包含的格式和資訊對產生它們的寫入器是私用的;要求者不知道如何處理這項資訊。

支援寫入器會使用 IVssComponent::SetBackupStamp 方法,將備份戳記儲存在備份元件檔中做為字串。

如果備份戳記資訊存在,要求者在處理備份戳記資訊時的角色 (,) 呼叫 IVssBackupComponents::SetPreviousBackupStamp ,以便供寫入器使用。