備份初始化概觀

此備份階段會初始化寫入器和要求者、填入其內部資料結構、指定備份,並透過 IVssBackupComponents::GatherWriterMetadata的必要呼叫建立寫入器/要求者通訊。 如需詳細資訊,請參閱 在 VSS 下處理備份的概觀

下表顯示備份初始化所需的動作和事件順序。

要求者動作 事件 寫入器動作
建立 IVssBackupComponents 介面,並將其初始化以管理備份 (請參閱 CreateVssBackupComponentsIVssBackupComponents::InitializeForBackup) ,並選擇性地啟用或停用系統上的寫入器。
選擇性地設定陰影複製作業的內容,並選擇性地查詢其 (支援的提供者和陰影複製,請參閱IVssBackupComponents::SetCoNtext、IVssBackupComponents::Query) 。
要求者可以提供處理備份和還原作業的其他資訊, (請參閱 IVssBackupComponents::SetBackupState)
使用寫入器起始非同步連絡人 (請參閱 IVssBackupComponents::GatherWriterMetadata) 識別 建立寫入器元資料檔案 (請參閱 使用寫入器元資料檔案CVssWriter::OnIdentifyIVssCreateWriterMetadata)

 

備份初始化期間的要求者動作

IVssBackupComponents物件只能用於一個備份。 因此,要求者必須繼續進行備份結尾,包括釋放 IVssBackupComponents 介面。 如果備份需要提前終止,要求者必須呼叫 IVssBackupComponents::AbortBackup ,然後釋放 IVssBackupComponents 物件, (請參閱 中止 VSS 作業 以取得詳細資訊) 。 請勿嘗試繼續 IVssBackupComponents 介面。

一般而言,要求者的備份元件檔會初始化為空白。 呼叫 IVssBackupComponents::InitializeForBackup 時,可以載入預存的備份元件檔,通常支援可傳輸的陰影複製磁片區。 在此情況下,寫入器要求者通訊會與下面所述的通訊稍微不同。 (如需詳細資訊,請參閱 匯入可傳輸的陰影複製磁片區 。)

若要將磁片區新增至陰影複製集,要求者必須先呼叫 IVssBackupComponents::SetCoNtext來設定陰影複製作業的內容。 如果未呼叫此方法,則會使用陰影複製的預設內容VSS_CTX_BACKUP。 如需設定陰影複製內容的詳細資訊,請參閱 陰影複製內容設定

若要在備份之前開始完成其設定,要求者必須呼叫 IVssBackupComponents::SetBackupState。 藉由這樣做,要求者會向寫入器指出:

  • VSS_BACKUP_TYPE) 中所定義之備份 (類型
  • 備份是否包含可開機的系統狀態
  • 要求者是否支援選取個別元件或備份整個磁片區。

參與備份和還原作業的所有要求者都必須一律呼叫 IVssBackupComponents::GatherWriterMetadata。 這個方法會藉由產生 VSS 識別 事件來起始寫入器要求者通訊,以回應寫入器建立其元資料檔案。

在呼叫 IVssBackupComponents::GatherWriterMetadata之前, 要求者有機會使用 IVssBackupComponents::EnableWriterClassesIVssBackupComponents::D isableWriterInstancesIVssBackupComponents::D isableWriterClasses (來 明確啟用或停用特定寫入器和寫入器類別,預設會啟用所有類別) 。 呼叫 IVssBackupComponents::GatherWriterMetadata之後,這些呼叫就沒有任何作用。

由於在呼叫 IVssBackupComponents::GatherWriterMetadata之前,無法取得系統上的寫入器清單,因此要求者可以考慮建立並刪除 IVssBackupComponents 的第二個實例以取得清單。

在完成 IVssBackupComponents::GatherWriterStatus 之後,就不需要呼叫 IVssBackupComponents::GatherWriterMetadata。 無法處理呼叫所產生 識別 事件的寫入器清單,將不會是提供 IVssBackupComponents::GetWriterMetadataCountIVssBackupComponents::GetWriterMetadata (判斷 寫入器狀態) 的寫入器清單。

備份初始化期間的寫入器動作

為了回應 Identify 事件,VSS 會呼叫每個寫入器的虛擬處理常式方法 CVssWriter::OnIdentify。 寫入器會覆寫 CVssWriter::OnIdentify 的預設實作,並使用 IVssCreateWriterMetadata 介面來建立其寫入器元資料檔案。

請注意,目前要求者以外的應用程式 (例如,系統應用程式) 可以產生識別必須由寫入器處理的事件。 此外,寫入器無法從 CVssWriter::OnIdentify 內判斷哪個應用程式已產生 Identify 事件。

這是這種情況,假設寫入器可能會在處理備份作業時收到數個識別事件,所以寫入器不應該在 CVssWriter::OnIdentify 處理常式中設定狀態資訊。

相反地, CVssWriter::OnIdentify 應該執行一致的演算法來建立寫入器的寫入器元資料檔案,特別是因為寫入器建立檔之後,要求者或寫入器都無法修改檔。 從這一點開始,它是唯讀的檔。

這表示與寫入器相關聯的 元件 數目和類型,哪些檔案是每個元件的一部分,而且寫入器從處理 Identify 事件傳回後,無法變更備份或還原作業中的明確排除檔案。

參與 VSS 的所有寫入器都必須執行下列動作:

  1. 使用 IVssCreateWriterMetadata::SetRestoreMethod,指出寫入器所管理之所有元件的還原方法。
  2. 使用 IVssCreateWriterMetadata::AddComponent 新增至少一個元件 (如需元件規格) 的詳細資訊,請參閱 作者的元件定義

寫入器會藉由新增 檔案集來指出參與備份或還原作業的檔案—路徑的組合, 檔案規格和遞迴旗標—使用 IVssCreateWriterMetadata::AddFilesToFileGroupIVssCreateWriterMetadata::AddDatabaseFilesIVssCreateWriterMetadata::AddDatabaseLogFiles的指定元件,視類型 (請參閱 將檔案新增至 Components.)

寫入器可能也有一或多個空白元件,其中沒有新增任何檔案的元件。 這些在組織寫入器的元件時非常有用。 (請參閱 Components 的邏輯路徑。)

寫入器會使用 IVssCreateWriterMetadata::AddExcludeFiles 明確防止備份中包含檔案。 此明確排除很有用,因為萬用字元可用來指定包含的檔案 (請參閱 排除檔案清單規格) 。 請注意,排除檔案清單的優先順序高於元件檔案清單。

IVssCreateWriterMetadata::AddAlternateLocationMapping 可用來為已新增至其中一個寫入器元件的指定檔案集建立 替代位置對應 。 當還原至檔案的原始位置時,這些對應會在還原至檔案的原始位置時使用。 (請參閱 實際檔案還原 和非 預設備份和還原位置的概觀。)

因為備份檔案集是在寫入器元資料檔案中指定,所以稍後無法修改。 因此,寫入器應該進行編碼,以便檔案集的定義會依名稱或透過萬用字元,在備份中包含所需的所有檔案。 因此,這可能包括一些可能會在識別事件之後建立的檔案。