Peran Penulis dalam Mencadangkan Penyimpanan Kompleks

Seperti semua operasi penting di bawah VSS, pencadangan inkremental dan diferensial memerlukan kerja sama yang erat antara pemohon dan penulis.

Jenis Pencadangan

Infrastruktur ini memberikan dukungan khusus untuk lima jenis pencadangan. Langkah-langkah tersebut dapat digambarkan sebagai berikut:

  • Penuh (VSS_BT_FULL). File akan dicadangkan terlepas dari tanggal pencadangan terakhirnya. Riwayat pencadangan setiap file akan diperbarui, dan jenis cadangan ini dapat digunakan sebagai dasar pencadangan bertahap atau diferensial. Jika ada file log, file tersebut dapat dipotong sebagai akibat dari cadangan ini.

    Memulihkan cadangan penuh hanya memerlukan satu gambar cadangan.

  • Diferensial (VSS_BT_DIFFERENTIAL). VSS API digunakan untuk memastikan bahwa hanya file yang telah diubah atau ditambahkan sejak pencadangan penuh terakhir yang akan disalin ke media penyimpanan; semua informasi pencadangan perantara diabaikan. Ini mungkin termasuk seluruh file, atau rentang tertentu dalam file. Cadangan diferensial dikaitkan dengan pencadangan penuh, dan umumnya tidak dapat dipulihkan sampai pencadangan penuh telah dipulihkan. Jika ada file log, file tersebut biasanya tidak akan dipotong sebagai akibat dari cadangan ini.

    Memulihkan cadangan diferensial memerlukan gambar cadangan asli dan gambar cadangan diferensial terbaru yang dibuat sejak pencadangan penuh terakhir.

  • Inkremental (VSS_BT_INCREMENTAL). VSS API digunakan untuk memastikan bahwa hanya file yang telah diubah atau ditambahkan sejak pencadangan penuh atau inkremental terakhir yang akan disalin ke media penyimpanan. Ini mungkin termasuk seluruh file, atau rentang tertentu dalam file. Beberapa penulis tidak mengizinkan cadangan inkremental dicampur dengan cadangan diferensial. Jika ada file log, file tersebut dapat dipotong sebagai akibat dari cadangan ini.

    Memulihkan cadangan inkremental memerlukan gambar cadangan asli dan semua gambar cadangan inkremental yang dibuat sejak pencadangan awal.

  • Pencadangan Log (VSS_BT_LOG). Hanya file log penulis (file yang ditambahkan ke komponen dengan metode IVssCreateWriterMetadata::AddDataBaseLogFiles , dan diambil oleh panggilan ke IVssWMComponent::GetDatabaseLogFile) yang akan dicadangkan. Jenis cadangan ini khusus untuk VSS. Pencadangan log cenderung cukup sering diambil. Biasanya, file log akan dipotong sebagai akibat dari cadangan ini.

  • Salin Cadangan (VSS_BT_COPY). Seperti jenis pencadangan VSS_BT_FULL, file akan dicadangkan terlepas dari tanggal pencadangan terakhirnya. Namun, riwayat pencadangan setiap file tidak akan diperbarui, dan jenis cadangan ini tidak dapat digunakan sebagai dasar pencadangan inkremental atau diferensial. File log tidak boleh dipotong sebagai akibat dari cadangan salinan.

Dukungan File Parsial

Beberapa penulis mendukung pemulihan file melalui penimpaan bagian file yang mereka kelola. Pemohon dapat dirancang untuk memanfaatkan ini, dan jika demikian menunjukkan hal ini dengan mengatur informasi di IVssBackupComponents::SetBackupState.

Penulis menunjukkan jenis cadangan apa yang didukung dengan memanggil IVssCreateWriterMetadata::SetBackupSchema saat memproses peristiwa Identifikasi . Parameter dsSchemaMask ke metode IVssCreateWriterMetadata::SetBackupSchema adalah masker bit yang menunjukkan jenis cadangan apa yang didukung. Semua penulis harus mendukung pencadangan penuh.

VSS_BS_DIFFERENTIAL

Menunjukkan dukungan untuk pencadangan diferensial.

VSS_BS_INCREMENTAL

Menunjukkan dukungan untuk pencadangan inkremental.

VSS_BS_LOG

Menunjukkan dukungan untuk pencadangan log.

VSS_BS_COPY

Menunjukkan dukungan untuk cadangan salinan.

VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL

Menunjukkan bahwa penulis tidak mendukung pencampuran cadangan inkremental dengan cadangan diferensial.

Penulis dapat menentukan jenis cadangan apa yang sedang dilakukan dengan memanggil CVssWriter::GetBackupType. Titik paling awal ketika ini dapat dilakukan adalah saat memproses peristiwa PrepareForBackup. CVssWriter::GetBackupType akan mengembalikan anggota enumerasi VSS_BACKUP_TYPE . Jika jenis cadangan tidak didukung oleh penulis, maka penulis harus memperlakukan cadangan sebagai cadangan penuh.

Stempel Cadangan

Pencadangan inkremental dan diferensial selalu terkait dengan cadangan sebelumnya. Ada dua cara untuk mengikat cadangan. Untuk penyimpanan data sederhana, pemohon dapat melacak korelasi antara cadangan. Namun, untuk penyimpanan data yang lebih kompleks, penulis harus mempertahankan tanda waktunya sendiri dengan cadangan; tanda waktu ini dapat melacak posisi log, informasi titik pemeriksaan, dan sebagainya. Penulis menunjukkan bahwa ia membutuhkan tanda waktunya sendiri dengan mengatur bit VSS_BS_TIMESTAMPED ketika memanggil IVssCreateWriterMetadata::SetBackupSchema.

Penulis dapat menyimpan tanda waktu dengan setiap komponen yang sedang dicadangkan. Penulis menyimpan tanda waktu dengan memanggil IVssComponent::SetBackupStamp, dan meneruskan representasi string stempel untuk parameter wszBackupStamp . Umumnya, penulis akan memanggil metode ini saat memproses peristiwa PostSnapshot . Namun, untuk cadangan yang tidak melibatkan salinan bayangan, peristiwa PostSnapshot tidak akan dikirim. Dalam hal ini, IVssComponent::SetBackupStamp harus dipanggil saat memproses peristiwa PrepareForBackup .

Ketika pencadangan inkremental atau diferensial sedang dilakukan, pemohon akan menunjukkan kepada penulis stempel cadangan cadangan sebelumnya yang berfungsi sebagai basis untuk cadangan ini. Penulis dapat mengakses stempel cadangan ini sebelumnya saat memproses peristiwa PrepareForBackup atau PostSnapshot, dengan memanggil IVssComponent::GetPreviousBackupStamp. Penulis dapat menggunakan stempel yang dikembalikan untuk menentukan apa yang perlu dicadangkan.

Strategi Pencadangan

Strategi File Cadangan File

Seringkali, file tertentu yang dilaporkan dalam metadata penulis hanya perlu dicadangkan saat melakukan jenis cadangan tertentu. Beberapa file mungkin hanya diperlukan saat melakukan pencadangan penuh. File lain mungkin hanya diperlukan saat melakukan pencadangan inkremental atau diferensial. VSS menyediakan metode bagi penulis untuk menunjukkan informasi ini kepada pemohon. Saat menambahkan file ke komponen menggunakan IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles, atau IVssCreateWriterMetadata::AddFilesToFileGroup, parameter dwBackupTypeMask menunjukkan jenis cadangan file ini harus dicadangkan. Masker dapat berisi satu atau beberapa nilai berikut:

VSS_FSBT_FULL_BACKUP_REQUIRED

Diperlukan untuk pencadangan penuh.

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

Diperlukan untuk pencadangan diferensial.

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

Diperlukan untuk pencadangan inkremental.

VSS_FSBT_LOG_BACKUP_REQUIRED

Diperlukan untuk pencadangan log.

VSS_FSBT_ALL_BACKUP_REQUIRED

Diperlukan untuk semua jenis cadangan; ini adalah defaultnya.

Spesifikasi ini menggantikan spesifikasi selektivitas komponen. Misalnya, pertimbangkan komponen yang semua filenya ditandai dengan VSS_FSBT_LOG_BACKUP_REQUIRED tetapi tidak dengan VSS_FSBT_FULL_BACKUP_REQUIRED. Misalkan komponen ini tidak dapat dipilih untuk cadangan (bSelectable salah ketika IVssCreateWriterMetadata::AddComponent dipanggil). Dalam kasus pencadangan log, ini berarti bahwa semua file dalam komponen ini harus selalu dicadangkan. Namun, dalam kasus pencadangan penuh, tidak ada file yang perlu dicadangkan, terlepas dari fakta bahwa selektivitas komponen menyiratkan bahwa itu harus dicadangkan.

Pencadangan Berdasarkan Waktu Modifikasi Terakhir

Salah satu cara bagi penulis untuk menunjukkan file apa yang telah berubah adalah dengan menggunakan mekanisme file yang berbeda. Penulis dapat menentukan bahwa file tertentu dalam komponen hanya boleh dicadangkan jika telah dimodifikasi sejak waktu tertentu. Penulis memanggil IVssComponent::AddDifferencedFilesByLastModifyTime dengan spesifikasi file dan waktu modifikasi terakhir. IVssComponent::AddDifferencedFilesByLastModifyTime biasanya dipanggil saat memproses peristiwa PostSnapshot, meskipun dapat dipanggil saat memproses peristiwa PrepareForBackup. Pemohon kemudian harus mencadangkan semua file yang cocok dengan spesifikasi file yang telah berubah sejak waktu yang ditentukan. Jika penulis menggunakan mekanisme stempel cadangan, waktu modifikasi terakhir ini akan ditentukan berdasarkan stempel cadangan sebelumnya dalam dokumen cadangan. Penulis juga dapat meneruskan nol untuk waktu modifikasi terakhir, yang menunjukkan bahwa pemohon bertanggung jawab untuk menentukan waktu pencadangan terakhir dan file berubah sejak waktu itu.

Pencadangan File Parsial

Cara lain bagi penulis untuk menunjukkan perubahan pada pemohon adalah dengan menggunakan mekanisme file parsial. Penulis dapat menentukan rentang byte dalam file komponen yang perlu dicadangkan; penulis dapat menentukan rentang file ini saat memproses peristiwa PostSnapshot atau PrepareForBackup. Penulis memanggil IVssComponent::AddPartialFile untuk menambahkan spesifikasi file parsial ke cadangan. Spesifikasi file parsial terdiri dari jalur dan nama file bersama dengan informasi tentang rentang apa dalam file yang perlu dicadangkan.

Aturan Spesifikasi File

IVssComponent::AddDifferencedFilesByLastModifyTime atau IVssComponent::AddPartialFile keduanya dapat digunakan untuk memodifikasi spesifikasi file yang diberikan selama peristiwa Identifikasi, atau untuk menambahkan file yang sama sekali baru ke spesifikasi. Jika penulis memodifikasi informasi yang ditetapkan selama peristiwa Identifikasi menggunakan IVssComponent::AddDifferencedFilesByLastModifyTime, maka spesifikasi file harus sama persis dengan salah satu spesifikasi file dalam komponen saat ini. Spesifikasi file tidak boleh tumpang tindih sebagian dalam komponen saat ini, dan tidak boleh cocok dengan file di komponen lain. File yang ditentukan menggunakan IVssComponent::AddPartialFile dapat, namun sebagian tumpang tindih dengan spesifikasi file lain. Informasi yang ditetapkan oleh IVssComponent::AddDifferencedFilesByLastModifyTime atau IVssComponent::AddPartialFile mengambil alih informasi yang ditetapkan sebelumnya menggunakan antarmuka IVssCreateWriterMetadata sebagai respons terhadap peristiwa Identifikasi.

Spesifikasi file umum dapat memiliki nilai lokasi alternatif (diatur oleh parameter wszAlternateLocation dari IVssCreateWriterMetadata::AddFilesToFileGroup) yang menunjukkan lokasi alternatif untuk mendapatkan file pada waktu pencadangan. Jika spesifikasi file yang ditetapkan melalui mekanisme file yang dibedakan atau file parsial cocok dengan spesifikasi file yang ada yang memiliki lokasi alternatif, aplikasi cadangan akan mendapatkan data dari lokasi alternatif ini.

Jika spesifikasi file yang diatur dalam IVssComponent::AddDifferencedFilesByLastModifyTime atau di IVssComponent::AddPartialFile tidak cocok dan file dalam komponen yang sedang dicadangkan, semua file yang cocok sekarang ditambahkan ke cadangan. Perhatian harus diambil bahwa penulis hanya menambahkan file yang ada pada volume yang sudah disalin bayangan saat melakukan ini; jika tidak, pemohon mungkin gagal mencadangkan file-file ini. Jika fungsi-fungsi ini dipanggil saat memproses peristiwa PostSnapshot, ini dapat ditentukan dengan menggunakan metode CVssWriter::IsPathAffected . Jika dipanggil saat menangani peristiwa PrepareForBackup, penulis harus membuat penentuan ini menggunakan metode lain.

Pencadangan Tanpa Salinan Bayangan

Jenis file tertentu mungkin tidak perlu dicadangkan dari volume salinan bayangan. Misalnya, ini akan sering benar dari file log database. Karena file log tumbuh secara monoton, dan penulis dapat menentukan dengan tepat bagian file apa yang akan dicadangkan menggunakan file parsial, sering kali dimungkinkan untuk mencadangkan log dari volume asli. Sebagai pengoptimalan, penulis dapat menandai file mana yang memerlukan salinan bayangan untuk jenis cadangan yang berbeda menggunakan bendera yang diatur dalam parameter dwBackupTypeMask dari IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles, atau IVssCreateWriterMetadata::AddFilesToFileGroup. Bendera yang didukung meliputi yang berikut ini:

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

Salinan bayangan diperlukan untuk pencadangan penuh.

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

Salinan bayangan diperlukan untuk pencadangan diferensial.

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

Salinan bayangan diperlukan untuk pencadangan inkremental.

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

Salinan bayangan diperlukan untuk cadangan log.

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

Salinan bayangan diperlukan untuk semua jenis cadangan; ini adalah defaultnya.

Jika volume tertentu hanya berisi komponen yang tidak memerlukan salinan bayangan untuk cadangan ini, pemohon dapat melewati langkah pembuatan salinan bayangan untuk volume ini. Semua data pada volume ini dapat disalin ke media cadangan langsung dari volume asli.

Pembersihan Cadangan

Jika penulis perlu melakukan pemotongan log atau pembersihan pasca-pencadangan lainnya, tempat yang tepat untuk melakukan ini adalah saat memproses peristiwa BackupComplete . Peristiwa BackupShutdown akan dikirim beberapa saat setelah BackupComplete, sehingga beberapa pembersihan juga dapat dilakukan di penanganan aktivitas BackupShutdown.

Peristiwa BackupShutdown selalu dikirim setelah penghentian cadangan. Jika pemohon berakhir secara tidak normal saat melakukan pencadangan, BackupShutdown akan segera dikirim, tanpa terlebih dahulu mengirim BackupComplete. Jika penulis perlu membersihkan status apa pun, yang mungkin dilakukan di sini; namun, pemotongan log tidak boleh terjadi dalam peristiwa ini karena pencadangan tidak selalu selesai.

Pulihkan Strategi

Tugas dasar penulis saat pemulihan adalah memverifikasi bahwa pemulihan dapat terjadi dalam menangani peristiwa PreRestore, dan bahwa pemulihan telah terjadi dalam menangani peristiwa PostRestore. Penyimpanan yang lebih kompleks juga akan melakukan proses pemulihan di handler PostRestore. Jika pemulihan adalah bagian dari pemulihan inkremental atau diferensial, penulis umumnya ingin menunda proses pemulihan ini sampai semua pemulihan bertambah bertahap atau diferensial telah selesai. IVssComponent::GetAdditionalRestores akan menunjukkan apakah ini adalah pemulihan akhir komponen ini, atau apakah ada lebih banyak pemulihan yang akan datang. Jika IVssComponent::GetAdditionalRestores mengembalikan true, penulis tidak boleh melakukan prosedur pemulihannya pada komponen tersebut.

Target Baru

Jika didukung oleh penulis, pemohon dapat memulihkan file data ke lokasi selain lokasi waktu pencadangan asli. Penulis menunjukkan dukungan untuk mode pemulihan ini dengan mengatur bit VSS_BS_WRITER_SUPPORTS_NEW_TARGET dalam parameter dsSchemaMask saat memanggil IVssCreateWriterMetadata::SetBackupSchema. Penulis mendapatkan lokasi baru untuk file komponen pada waktu pemulihan dengan memanggil IVssComponent::GetNewTargetCount dan IVssComponent::GetNewTarget.

Target Terarah

Untuk skenario pemulihan yang rumit, penulis mungkin ingin memetakan rentang file yang dicadangkan ke rentang yang berbeda dari file yang sama atau berbeda. Ini dapat dilakukan dengan menggunakan mekanisme target yang diarahkan. Untuk melakukan ini, penulis harus terlebih dahulu menunjukkan hal ini terjadi dengan memanggil IVssComponent::SetRestoreTarget, meneruskan VSS_RT_DIRECTED untuk parameter target . Kemudian, untuk setiap pemetaan, penulis memanggil IVssComponent::AddDirectedTarget. Metode ini mengambil jalur lengkap ke file sumber pada cadangan dan jalur lengkap ke file tujuan yang akan dipulihkan. Dibutuhkan juga daftar rentang untuk masing-masing file ini. Penulis memanggil fungsi-fungsi ini saat menangani peristiwa PreRestore, dan pemohon kemudian bertanggung jawab untuk memulihkan rentang yang ditentukan dalam file sumber ke rentang yang dipetakan dalam file tujuan. Format string rentang sama seperti di IVssComponent::AddPartialFile

Metadata Penulis Privat

Seringkali berguna bagi penulis untuk mempertahankan metadata privat dengan cadangan untuk melakukan pemulihan bertahap atau diferensial dengan benar. Penulis dapat memanggil IVssComponent::SetBackupMetadata saat menangani PrepareForBackup atau PostSnapshot untuk menyimpan metadata. Metadata ini dapat diakses oleh penulis selama PreRestore atau PostRestore dengan memanggil IVssComponent::GetBackupMetadata. Metadata juga dapat disimpan dengan spesifikasi file parsial dengan menggunakan parameter wszMetadataIVssComponent::AddPartialFile; metadata ini diakses melalui parameter pbstrMetadataIVssComponent::GetPartialFile. Penulis juga dapat meneruskan metadata ke dirinya sendiri antara CVssWriter::OnPreRestore dan CVssWriter::OnPostRestore. Di CVssWriter::OnPreRestore, metadata diatur dengan memanggil IVssComponent::SetRestoreMetadata. Di CVssWriter::OnPostRestore, metadata diambil dengan memanggil IVssComponent::GetRestoreMetadata.