有時備份和還原僅特定的檔案區段是有用的。 VSS 提供 部分檔案 機制,如果要求者支援它,則允許寫入器指定部分文件備份和還原。
部分檔案作業經常對維護超大檔案的人特別有用,因為在備份作業之間,只有一小部分內容會發生變更。 在此情況下,只複製變更為備份媒體的區段通常很有用。 因此,部分檔案作業通常用來支援增量備份和還原作業,但不僅限於此。
如果寫入器想要實作部分檔案作業,它會使用 CVssWriter::IsPartialFileSupportEnabled 來判斷所處理的要求者是否支援此作業。
如果要求者支援部分檔案作業,而且如果它將管理檔案的元件(或定義包含檔案的元件集的元件集)新增至備份元件檔,寫入器會指出要儲存的檔案區段(通常是在處理 PrepareForBackup 或 PostSnapshot 事件時),呼叫 IVssComponent:AddPartialFile。
除了路徑和檔名之外,寫入器也會提供範圍和可選的元數據資訊給 IVssComponent::AddPartialFile。
範圍資訊會以包含下列其中一項的字串的形式提供:
要備份之檔案的偏移量組(以位元組為單位),以及要備份的區段長度(以位元組為單位),偏移量和長度以冒號分隔,每個成對的值以逗號分隔,例如,Offset1:Length1,Offset2:Length2。
每個值都是64位元整數(可以是十六進位或十進位格式),分別指定位元組偏移量和以位元組為單位的長度。
二進位範圍檔案目前系統上的完整路徑,包括檔名,包含下列內容:
- 檔案中包含的不同檔案範圍數位(以 64 位整數表示)
- 每一個範圍都以 64 位整數表示:配對的第一個成員是備份的檔案位移(以位元組為單位),而第二個成員是要備份的數據長度(以位元組為單位)
如果寫入器使用範圍檔案來指定部分檔案作業,要求者必須保證已備份此檔案(即使檔案不一定是默認備份集的一部分),或範圍資訊會以其他方式保留在備份媒體上。 如果未備份範圍檔案的資訊,則無法還原部分備份的檔案。
寫入器也可以新增包含元數據的字串。 此元數據可以是寫入器特定的格式,因為它的目的是允許寫入器驗證任何未來的還原。
透過這項資訊,支援要求者可以執行部分文件備份。
例如,考慮一個大型檔案,其檔頭(位元組 64-512)包含記錄計數和其他經常更新的資訊,其最新數據位於檔案最後的 65536 個字節內,即位於位元組 0x1239E8577A 至 0x1239E7577A。
寫入器可以將範圍清單指定為字串 「64:448,0x1239E8577A:65536」。。
在還原時,以及在實際執行還原作業之前,要求者應該檢查是否有任何檔案需要部分檔案支援。
若要這樣做,請求者會先使用 IVssBackupComponents::GetWriterComponentsCount 和 IVssBackupComponents::GetWriterComponents,逐一查看其備份元件檔中的寫入器。
IVssBackupComponents::GetWriterComponents 介面接著會用來傳回 IVssWriterComponentsExt 介面的實例, 提供 IVssWriterComponentsExt::GetComponent 和 IVssWriterComponentsExt::GetComponentCount,讓要求者取得 IVssComponent 實例。
這可讓請求者取得部分備份檔案的相關資訊,以使用 IVssComponent::GetPartialFileCount 和 IVssComponent::GetPartialFile,針對與管理該檔案的元件(或定義包含該檔案的元件集的元件集)相對應的 IVssComponent 實例參與還原。
如果部分檔案作業是由範圍檔案所控制,則應該先還原該檔案,再將數據複製到磁碟。 有可能發生請求者需要將範圍文件複製到磁碟的新位置。 在此情況下,它表示已透過 IVssBackupComponents::SetRangesFilePath完成此操作。
然後,要求者會繼續將數據複製到磁碟上已位於還原目的地的適當位置。
寫入器(在處理 PostRestore 事件時),會檢查 IVssComponent::GetFileRestoreStatusIVssComponent::GetPartialFile所指示的檔案,判斷部分檔案作業是否成功。 作者應該始終嘗試使用位移資訊和備份元件文件中包含的任何元數據來驗證此還原的正確性。
如果要求者必須將範圍檔案還原至新位置,VSS 會更新這項資訊,讓 IVssComponent::GetPartialFile 傳回的路徑正確。