VSS_RESTOREMETHOD_ENUM列舉 (vswriter.h)
寫入器會在備份時使用 VSS_RESTOREMETHOD_ENUM 列舉,以透過寫入器元數據檔指定預設檔案還原方法,以用於其管理之所有元件中的所有檔案。
還原方法是全寫入器,也稱為原始還原目標,並以VSS_RT_ORIGINAL的VSS_RESTORE_TARGET值表示。
Syntax
typedef enum VSS_RESTOREMETHOD_ENUM {
VSS_RME_UNDEFINED = 0,
VSS_RME_RESTORE_IF_NOT_THERE,
VSS_RME_RESTORE_IF_CAN_REPLACE,
VSS_RME_STOP_RESTORE_START,
VSS_RME_RESTORE_TO_ALTERNATE_LOCATION,
VSS_RME_RESTORE_AT_REBOOT,
VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE,
VSS_RME_CUSTOM,
VSS_RME_RESTORE_STOP_START
} ;
常數
VSS_RME_UNDEFINED 值: 0 未定義還原方法。 這表示寫入器部分發生錯誤。 Express 寫入器不支持這個值。 |
VSS_RME_RESTORE_IF_NOT_THERE 只有在沒有版本的 時,要求者才應該還原所選元件或元件集的檔案 這些檔案目前位於磁碟上。 除非已針對檔案還原定義替代位置對應,否則如果 由 管理的任何檔案版本 選取的元件或元件集目前位於磁碟上,未由選取的檔案管理 應該還原元件或元件集。 如果已定義檔案的替代位置對應,且磁碟上存在檔案的版本 原始位置,只有當檔案版本不存在時,才應該將檔案寫入替代位置 替代位置。 |
VSS_RME_RESTORE_IF_CAN_REPLACE 只有在磁碟上目前檔案可以覆寫時,要求者才應該還原所選元件或元件集的檔案。 除非已針對檔案還原定義替代位置對應,否則如果有任何檔案的版本 無法覆寫磁碟上選取的元件或元件集,且未由 管理任何檔案 應該還原元件或元件集。 如果定義了檔案的替代位置對應,則應該將檔案寫入替代位置。 |
VSS_RME_STOP_RESTORE_START 要求者應該執行還原作業,如下所示:
呼叫 IVssCreateWriterMetadata::SetRestoreMethod 方法時,會事先指定要停止的服務。 要求者可以藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 方法來取得服務的名稱。 請注意,如果寫入器裝載於正在停止的服務中,該寫入器將不會收到 PostRestore 事件,因為寫入器實例標識元會在服務停止並重新啟動時變更。 |
VSS_RME_RESTORE_TO_ALTERNATE_LOCATION 要求者應該將所選元件或元件的檔案還原為 所指定位置的檔案 寫入器元件元數據檔案中指定的替代位置對應。 (請參閱 IVssCreateWriterMetadata::AddAlternateLocationMapping, IVssComponent::GetAlternateLocationMapping, IVssEx surveyWriterMetadata::GetAlternateLocationMapping, 和 IVssWMFiledesc::GetAlternateLocation.) Express 寫入器不支持這個值。 |
VSS_RME_RESTORE_AT_REBOOT 要求者應該在重新啟動計算機之後還原所選元件或元件集的檔案。 要還原的檔案應該複製到暫存位置,而且要求者應該使用 MoveFileEx 與 MOVEFILE_DELAY_UNTIL_REBOOT 旗標,以完成這些檔案還原至其檔案 計算機重新啟動之後的適當位置。 |
VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE 可能的話,要求者應該將所選元件或元件的檔案還原為正確的檔案 立即定位。 如果磁碟上已設定所選元件或元件所管理的任何檔案版本 無法覆寫,則應該還原所選元件或元件集所管理的所有檔案 重新啟動計算機之後。 在此情況下,要還原的檔案應該複製到磁碟上的暫存位置,而且要求者應該 搭配 使用MoveFileEx 與 MOVEFILE_DELAY_UNTIL_REBOOT 旗標,以完成這些檔案還原至其檔案 計算機重新啟動之後的適當位置。 |
VSS_RME_CUSTOM 要求者應該使用自定義還原方法來還原所選所管理的檔案 元件或元件集。 自訂還原可能會使用指定寫入器私用的檔案擷取 API 函式或通訊協定 應用程式。 這類還原不需要使用寫入器元件元數據檔案中的資訊。 (請參閱 自訂備份和還原 以取得更多內容 information.) Express 寫入器不支持這個值。 |
VSS_RME_RESTORE_STOP_START 要求者應該執行還原作業,如下所示:
呼叫 IVssCreateWriterMetadata::SetRestoreMethod 方法時,寫入器會事先指定要停止的服務。 要求者可以藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 方法來取得服務的名稱。 |
備註
寫入器會在備份期間呼叫 IVssCreateWriterMetadata::SetRestoreMethod ,在寫入器元數據文件中設定還原方法,以指定其所需的還原方法。
要求者藉由呼叫 IVssEx,WriterMetadata::GetRestoreMethod 來擷取寫入器要求的還原方法,並據以運作。
還原方法會套用至指定寫入器之所有元件中的所有檔案。
如果寫入器使用 IVssComponent::SetRestoreTarget 設定VSS_RT_ORIGINAL以外的VSS_RESTORE_TARGET值,則還原方法可能會在還原時逐一覆寫元件。
未定義替代位置對應的 VSS_RME_RESTORE_TO_ALTERNATE_LOCATION 還原方法會構成寫入器錯誤,而要求者應該回報它。
當還原方法需要檢查目前磁碟 上檔案的狀態 ( (VSS_RME_RESTORE_IF_NOT_THERE、 VSS_RME_RESTORE_IF_CAN_REPLACE或 VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE) ,在理想情況下,您應該使用檔案 I/O 作業來確認可以還原整個元件,然後再實際繼續進行還原。
若要這樣做,最簡單的方法是在 還原之前以 獨佔方式開啟 (沒有共用) 所有目標檔案。
在 VSS_RME_RESTORE_IF_NOT_THERE的情況下,也應該設定 建立CREATE_NEW 處置旗標。
如果開啟作業成功,還原可以繼續進行,而且應該使用 CreateFile 傳回的句柄,實際將數據寫入磁碟。
如果沒有,可以傳回錯誤,視方法而定,或檢查替代位置對應,並 (是否可用) 使用,或下一次重新啟動時暫存以進行還原的元件檔案。
這可能是非常大型元件的問題, (其中某些元件可能會因為系統額外負荷而) 數千個檔案。
在此情況下,雖然較不可靠,但可用的選項是執行下列動作:
- 複製磁碟上目前的所有檔案,並還原至暫存快取。
- 嘗試將目前在磁碟上的檔案取代為備份的檔案, (可能是位於第二個暫存區域中的磁碟上,或是備份媒體) 上。
- 如果有任何檔案無法還原,請終止還原作業,並從其暫存位置複製源檔,並在重新啟動作業時繼續進行替代位置對應或還原。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限桌面應用程式] |
標頭 | vswriter.h |
另請參閱
IVssBackupComponents::AddAlternativeLocationMapping
IVssComponent::GetAlternateLocationMapping
IVssCreateWriterMetadata::AddAlternateLocationMapping
IVssCreateWriterMetadata::SetRestoreMethod
IVssEx在Metadata::GetAlternateLocationMapping
IVssExriterMetadata::GetRestoreMethod