Bagikan melalui


Menggunakan VsS Automated System Recovery untuk Pemulihan Bencana

Aplikasi pencadangan dan pemulihan VSS yang melakukan pemulihan bencana (juga disebut pemulihan bare-metal) dapat menggunakan penulis Automated System Recovery (ASR) bersama dengan Windows Preinstallation Environment (Windows PE) untuk mencadangkan dan memulihkan volume penting dan komponen lain dari status sistem yang dapat di-boot. Aplikasi cadangan diimplementasikan sebagai pemohon VSS.

Catatan Aplikasi yang menggunakan ASR harus melisensikan Windows PE.

Windows Server 2003 dan Windows XP: ASR tidak diimplementasikan sebagai penulis VSS.

Untuk informasi tentang alat pelacakan yang dapat Anda gunakan dengan ASR, lihat Menggunakan Alat Pelacakan dengan Aplikasi VSS ASR.

Dalam artikel ini:

Gambaran Umum Tugas Fase Pencadangan

Pada waktu pencadangan, pemohon melakukan langkah-langkah berikut.

Catatan

Semua langkah diperlukan kecuali dinyatakan lain.

 

  1. Panggil fungsi CreateVssBackupComponents untuk membuat instans antarmuka IVssBackupComponents dan panggil metode IVssBackupComponents::InitializeForBackup untuk menginisialisasi instans untuk mengelola cadangan.

  2. Panggil IVssBackupComponents::SetContext untuk mengatur konteks operasi salinan bayangan.

  3. Panggil IVssBackupComponents::SetBackupState untuk mengonfigurasi cadangan. Atur parameter bBackupBootableSystemState ke true untuk menunjukkan bahwa cadangan akan menyertakan status sistem yang dapat di-boot.

  4. Pilih komponen penting mana di Dokumen Metadata Penulis penulis ASR yang akan dicadangkan dan panggil IVssBackupComponents::AddComponent untuk masing-masing komponen tersebut.

  5. Panggil IVssBackupComponents::StartSnapshotSet untuk membuat set salinan bayangan kosong baru.

  6. Panggil IVssBackupComponents::GatherWriterMetadata untuk memulai kontak asinkron dengan penulis.

  7. Panggil IVssBackupComponents::GetWriterMetadata untuk mengambil Dokumen Metadata Penulis ASR. ID penulis untuk penulis ASR adalah BE000CBE-11FE-4426-9C58-531AA6355FC4, dan string nama penulis adalah "PENULIS ASR".

  8. Panggil IVssExamineWriterMetadata::SaveAsXML untuk menyimpan salinan Dokumen Metadata Penulis ASR.

  9. Panggil IVssBackupComponents::AddToSnapshotSet untuk setiap volume yang dapat berpartisipasi dalam salinan bayangan untuk menambahkan volume ke kumpulan salinan bayangan.

  10. Panggil IVssBackupComponents::P repareForBackup untuk memberi tahu penulis untuk mempersiapkan operasi pencadangan.

  11. Panggil IVssBackupComponents::GatherWriterStatus dan IVssBackupComponents::GetWriterStatus (atau IVssBackupComponentsEx3::GetWriterStatus) untuk memverifikasi status penulis ASR.

  12. Pada titik ini, Anda dapat mengkueri pesan kegagalan yang ditetapkan oleh penulis dalam metode CVssWriter::OnPrepareBackup . Misalnya kode yang menunjukkan cara melihat pesan ini, lihat IVssComponentEx::GetPrepareForBackupFailureMsg.

  13. Panggil IVssBackupComponents::D oSnapshotSet untuk membuat salinan bayangan volume.

  14. Panggil IVssBackupComponents::GatherWriterStatus dan IVssBackupComponents::GetWriterStatus untuk memverifikasi status penulis ASR.

  15. Cadangkan data.

  16. Tunjukkan apakah operasi pencadangan berhasil dengan memanggil IVssBackupComponents::SetBackupSucceeded.

  17. Panggil IVssBackupComponents::BackupComplete untuk menunjukkan bahwa operasi pencadangan telah selesai.

  18. Panggil IVssBackupComponents::GatherWriterStatus dan IVssBackupComponents::GetWriterStatus. Memori status sesi penulis adalah sumber daya terbatas, dan penulis pada akhirnya harus menggunakan kembali status sesi. Langkah ini menandai status sesi cadangan penulis sebagai selesai dan memberi tahu VSS bahwa slot sesi cadangan ini dapat digunakan kembali oleh operasi pencadangan berikutnya.

    Catatan

    Ini hanya diperlukan pada Windows Server 2008 dengan Paket Layanan 2 (SP2) dan yang lebih lama.

     

  19. Panggil IVssBackupComponents::SaveAsXML untuk menyimpan salinan Dokumen Komponen Cadangan pemohon. Informasi dalam Dokumen Komponen Cadangan digunakan pada waktu pemulihan ketika pemohon memanggil metode IVssBackupComponents::InitializeForRestore .

Memilih Komponen Penting mana yang akan Dicadangkan

Dalam fase inisialisasi cadangan, penulis ASR melaporkan jenis komponen berikut dalam Dokumen Metadata Penulisnya:

  • Volume penting, seperti volume boot, sistem, dan Windows Recovery Environment (Windows RE) dan partisi Windows RE yang terkait dengan instans Windows Vista atau Windows Server 2008 yang saat ini sedang berjalan. Volume adalah volume penting jika berisi informasi status sistem. Volume boot dan sistem disertakan secara otomatis. Pemohon harus menyertakan semua volume yang berisi komponen penting sistem yang dilaporkan oleh penulis, seperti volume yang berisi Direktori Aktif. Komponen penting sistem ditandai sebagai "tidak dapat dipilih untuk pencadangan." Dalam VSS, "tidak dapat dipilih" berarti "tidak opsional." Dengan demikian, pemohon diperlukan untuk mencadangkannya sebagai bagian dari status sistem. Untuk informasi selengkapnya, lihat Mencadangkan dan Memulihkan Status Sistem. Komponen yang bendera VSS_CF_NOT_SYSTEM_STATE diatur tidak penting bagi sistem.

    Catatan

    Komponen ASR adalah komponen penting sistem yang dilaporkan oleh penulis ASR.

     

  • Disk. Setiap disk tetap pada komputer diekspos sebagai komponen di ASR. Jika disk tidak dikecualikan selama pencadangan, disk akan ditetapkan selama pemulihan dan dapat dibuat ulang dan diformat ulang. Perhatikan bahwa selama pemulihan, pemohon masih dapat membuat ulang disk yang dikecualikan selama pencadangan dengan memanggil metode IVssBackupComponents::SetRestoreOptions . Jika satu disk dalam paket disk dinamis dipilih, semua disk lain dalam paket tersebut juga harus dipilih. Jika volume dipilih karena merupakan volume penting (yaitu, volume yang berisi informasi status sistem), setiap disk yang berisi sejauh mana volume tersebut juga harus dipilih. Untuk menemukan jangkauan volume, gunakan kode kontrol IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS .

    Catatan

    Selama pencadangan, pemohon harus menyertakan semua disk tetap. Jika disk yang berisi kumpulan cadangan pemohon adalah disk lokal, disk ini harus disertakan. Selama pemulihan, pemohon harus mengecualikan disk yang berisi kumpulan cadangan pemohon untuk mencegahnya ditimpa.

     

    Dalam lingkungan pengklusteran, ASR tidak membuat ulang tata letak disk bersama kluster. Disk tersebut harus dipulihkan secara online setelah sistem operasi dipulihkan di Windows RE.

  • Penyimpanan Data Konfigurasi Boot (BCD). Komponen ini menentukan jalur direktori yang berisi penyimpanan BCD. Pemohon harus menentukan komponen ini dan mencadangkan semua file di direktori penyimpanan BCD. Untuk informasi selengkapnya tentang penyimpanan BCD, lihat Tentang BCD.

    Catatan

    Pada komputer yang menggunakan Extended Firmware Interface (EFI), EFI System Partition (ESP) selalu disembunyikan dan tidak dapat disertakan dalam salinan bayangan volume. Pemohon harus mencadangkan konten partisi ini. Karena partisi ini tidak dapat disertakan dalam salinan bayangan volume, cadangan hanya dapat dilakukan dari volume langsung, bukan dari salinan bayangan. Untuk informasi selengkapnya tentang EFI dan ESP, lihat Panduan memunculkan.

Nama komponen menggunakan format berikut:

  • Untuk komponen disk, formatnya adalah

    <COMPONENT logicalPath="Disks" componentName="harddiskn" componentType="filegroup" />

    di mana n adalah nomor disk. Hanya nomor disk yang direkam. Untuk mendapatkan nomor disk, gunakan kode kontrol IOCTL_STORAGE_GET_DEVICE_NUMBER .

  • Untuk komponen volume, formatnya adalah

    <COMPONENT logicalPath="Volumes" componentName="Volume{GUID}" componentType="filegroup" />

    di mana GUID adalah GUID volume.

  • Untuk komponen penyimpanan BCD, formatnya adalah

    <COMPONENT logicalPath="BCD" componentName="BCD" componentType="filegroup" componentCaption = "Ini adalah jalur ke penyimpanan boot BCD dan manajer boot... Semua file dalam direktori ini perlu dicadangkan...">

    Jika partisi sistem memiliki nama GUID volume, komponen ini dapat dipilih. Jika tidak, itu tidak dapat dipilih.

    Catatan

    ASR menambahkan file ke grup file komponen penyimpanan BCD sebagai berikut:

    • Untuk disk EFI, ASR menambahkan

      SystemPartitionPath\EFI\Microsoft\Boot\*.*

      di mana SystemPartitionPath adalah jalur ke partisi sistem.

    • Untuk disk GPT, ASR menambahkan

      SystemPartitionPath\Boot\*.*

      di mana SystemPartitionPath adalah jalur ke partisi sistem.

    • Jalur partisi sistem dapat ditemukan di bawah kunci registri berikut: HKEY_LOCAL_MACHINE\System\Setup\SystemPartition

     

Saat pemulihan, semua komponen yang ditandai sebagai volume penting harus dipulihkan. Jika satu atau beberapa volume penting tidak dapat dipulihkan, operasi pemulihan gagal.

Dalam fase PreRestore dari urutan pemulihan, disk yang tidak dikecualikan selama pencadangan dibuat ulang dan diformat ulang secara default. Namun, mereka tidak dibuat ulang atau diformat ulang jika memenuhi kondisi berikut:

  • Disk dasar tidak dibuat ulang jika tata letak disknya utuh atau hanya perubahan aditif yang dilakukan padanya. Tata letak disk utuh jika kondisi berikut ini benar:

    • Tanda tangan disk, gaya disk (GPT atau MBR), ukuran sektor logis, dan offset mulai volume tidak diubah.
    • Ukuran volume tidak berkurang.
    • Untuk disk GPT, pengidentifikasi partisi tidak diubah.
  • Disk dinamis tidak dibuat ulang jika tata letak disknya utuh atau hanya perubahan aditif yang dilakukan padanya. Agar disk dinamis utuh, semua kondisi untuk disk dasar harus dipenuhi. Selain itu, seluruh struktur volume paket disk harus utuh. Struktur volume paket disk utuh jika memenuhi kondisi berikut, yang berlaku untuk disk MBR dan GPT:

    • Jumlah volume yang tersedia dalam paket fisik selama pemulihan harus lebih besar dari atau sama dengan jumlah volume yang ditentukan dalam metadata penulis ASR selama pencadangan.

    • Jumlah pleks per volume harus tidak berubah.

    • Jumlah anggota harus tidak berubah.

    • Jumlah cakram fisik harus lebih besar dari jumlah jangkauan disk yang ditentukan dalam metadata penulis ASR.

    • Paket utuh tetap utuh ketika volume tambahan ditambahkan, atau jika volume dalam paket diperluas (misalnya, dari volume sederhana ke volume yang membentangan).

      Catatan

      Jika volume sederhana dicerminkan, paket tidak utuh dan akan dibuat ulang untuk memastikan bahwa status volume BCD dan boot tetap konsisten setelah pemulihan. Jika volume dihapus, paket akan dibuat ulang.

       

  • Jika struktur volume paket disk dinamis utuh dan hanya perubahan aditif yang telah dilakukan padanya, disk dalam paket tidak dibuat ulang.

    Windows Vista: Disk dinamis selalu dibuat ulang. Perhatikan bahwa perilaku ini telah berubah dengan Windows Server 2008 dan Windows Vista dengan Paket Layanan 1 (SP1).

Kapan saja sebelum fase pemulihan dimulai, pemohon dapat menentukan bahwa disk harus diformat cepat dengan mengatur kunci registri HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession . Di bawah kunci ini, ada nilai bernama QuickFormat dengan jenis data REG_DWORD. Jika nilai ini tidak ada, Anda harus membuatnya. Atur data nilai QuickFormat ke 1 untuk pemformatan cepat atau 0 untuk pemformatan lambat.

Jika nilai QuickFormat tidak ada, disk akan diformat lambat.

Pemformatan cepat secara signifikan lebih cepat daripada pemformatan lambat (juga disebut pemformatan penuh). Namun, pemformatan cepat tidak memverifikasi setiap sektor pada volume.

Gambaran Umum Tugas Fase Pemulihan

Pada waktu pemulihan, pemohon melakukan langkah-langkah berikut:

Catatan

Semua langkah diperlukan kecuali dinyatakan lain.

 

  1. Panggil fungsi CreateVssBackupComponents untuk membuat instans antarmuka IVssBackupComponents dan panggil metode IVssBackupComponents::InitializeForRestore untuk menginisialisasi instans untuk dipulihkan dengan memuat Dokumen Komponen Cadangan pemohon ke dalam instans.

  2. [Langkah ini diperlukan hanya jika pemohon perlu mengubah apakah "IncludeDisk" atau "ExcludeDisk" ditentukan untuk satu atau beberapa disk.] Panggil IVssBackupComponents::SetRestoreOptions untuk mengatur opsi pemulihan untuk komponen penulis ASR. Penulis ASR mendukung opsi berikut: "IncludeDisk" memungkinkan pemohon untuk menyertakan disk pada sistem target untuk dipertimbangkan untuk pemulihan, bahkan jika tidak dipilih selama fase pencadangan. "ExcludeDisk" memungkinkan pemohon untuk mencegah disk pada sistem target dibuat ulang. Perhatikan bahwa jika "ExcludeDisk" ditentukan untuk disk yang berisi volume penting, panggilan berikutnya ke IVssBackupComponents::P reRestore akan gagal.

    Contoh berikut menunjukkan cara menggunakan SetRestoreOptions untuk mencegah disk 0 dan disk 1 dibuat ulang dan menyuntikkan driver pihak ketiga ke dalam volume boot yang dipulihkan.

    Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: Injeksi driver pihak ketiga tidak didukung.

    Contoh mengasumsikan bahwa penunjuk IVssBackupComponents , m_pBackupComponents, valid.

        m_pBackupComponents->SetRestoreOptions(
            AsrWriterId,
            VSS_CT_FILEGROUP,
            NULL,
            TEXT("ASR"),
            TEXT("\"ExcludeDisk\"=\"0\", \"ExcludeDisk\"=\"1\" "),
            TEXT("\"InjectDrivers\"=\"1\" ")
            );
    

    Untuk mengecualikan semua disk untuk volume tertentu, lihat "Mengecualikan Semua Disk untuk Volume" berikut ini.

  3. Panggil IVssBackupComponents::P reRestore untuk memberi tahu penulis ASR untuk mempersiapkan operasi pemulihan. Panggil IVssAsync::QueryStatus sebanyak yang diperlukan sampai nilai status yang dikembalikan dalam parameter pHrResult tidak VSS_S_ASYNC_PENDING.

  4. Pulihkan data. Dalam fase pemulihan, ASR mengonfigurasi ulang jalur GUID volume (\\?\Volume{GUID}) untuk setiap volume agar sesuai dengan jalur GUID volume yang digunakan selama fase pencadangan. Namun, huruf drive tidak dipertahankan, karena ini akan menyebabkan tabrakan dengan huruf drive yang secara otomatis ditetapkan di lingkungan pemulihan. Dengan demikian, saat memulihkan data, pemohon harus menggunakan jalur GUID volume, bukan huruf drive, untuk mengakses volume.

  5. Atur kunci registri HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession untuk menunjukkan kumpulan volume yang telah dipulihkan atau diformat ulang.

    Di bawah kunci ini, ada nilai bernama RestoredVolumes dengan jenis data REG_MULTI_SZ. Jika nilai ini tidak ada, Anda harus membuatnya. Di bawah nilai ini, pemohon Anda harus membuat entri GUID volume untuk setiap volume yang telah dipulihkan. Entri ini harus dalam format berikut: \\?\Volume{78618c8f-aefd-11da-a898-806e6f6e6963}. Setiap kali pemulihan bare-metal dilakukan, ASR menetapkan nilai RestoredVolumes ke set volume yang dipulihkan ASR. Jika pemohon memulihkan volume tambahan, pemohon harus mengatur nilai ini ke penyatuan kumpulan volume yang dipulihkan pemohon dan set volume yang dipulihkan ASR. Jika pemohon tidak menggunakan ASR, pemohon harus menggantikan daftar volume.

    Anda juga harus membuat nilai bernama LastInstance dengan jenis data REG_SZ. Kunci ini harus berisi cookie acak yang secara unik mengidentifikasi operasi pemulihan saat ini. Cookie semacam itu dapat dibuat dengan menggunakan fungsi UuidCreate dan UuidToString . Setiap kali pemulihan bare-metal dilakukan, ASR mengatur ulang nilai registri ini untuk memberi tahu pemohon dan aplikasi cadangan non-VSS bahwa pemulihan telah terjadi.

  6. Panggil IVssBackupComponents::P ostRestore untuk menunjukkan akhir operasi pemulihan. Panggil IVssAsync::QueryStatus sebanyak yang diperlukan sampai nilai status yang dikembalikan dalam parameter pHrResult tidak VSS_S_ASYNC_PENDING.

Dalam fase pemulihan, ASR dapat membuat atau menghapus partisi untuk memulihkan komputer ke status sebelumnya. Pemohon tidak boleh mencoba memetakan nomor disk dari fase pencadangan ke fase pemulihan.

Saat pemulihan, pemohon harus mengecualikan disk yang berisi kumpulan cadangan pemohon. Jika tidak, kumpulan cadangan dapat ditimpa oleh operasi pemulihan.

Saat pemulihan, disk dikecualikan jika tidak dipilih sebagai komponen selama pencadangan, atau jika secara eksplisit dikecualikan dengan memanggil IVssBackupComponents::SetRestoreOptions dengan opsi "ExcludeDisk" selama pemulihan.

Penting untuk dicatat bahwa selama pemulihan bencana WinPE, fungsionalitas penulis ASR ada, tetapi tidak ada penulis lain yang tersedia, dan layanan VSS tidak berjalan. Setelah pemulihan bencana WinPE selesai, komputer telah dimulai ulang, dan sistem operasi Windows berjalan normal, layanan VSS dapat dimulai, dan pemohon dapat melakukan operasi pemulihan tambahan yang memerlukan partisipasi penulis selain penulis ASR.

Jika selama sesi pemulihan, aplikasi cadangan mendeteksi bahwa ID unik volume tidak berubah, dan oleh karena itu semua volume dari waktu cadangan ada dan utuh di WinPE, aplikasi cadangan dapat melanjutkan untuk memulihkan hanya konten volume, tanpa melibatkan ASR. Dalam hal ini, aplikasi cadangan harus menunjukkan bahwa komputer dipulihkan dengan mengatur kunci registri berikut dalam sistem operasi yang dipulihkan: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession

Di bawah kunci ini, tentukan LastInstance untuk nama nilai, REG_SZ untuk jenis nilai, dan cookie acak (seperti GUID yang dibuat oleh fungsi UuidCreate ) untuk data nilai.

Jika selama sesi pemulihan, aplikasi cadangan mendeteksi bahwa satu atau beberapa volume diubah atau hilang, aplikasi cadangan harus menggunakan ASR untuk melakukan pemulihan. ASR akan membuat ulang volume persis seperti pada saat pencadangan dan mengatur kunci registri RestoreSession .

Mengecualikan Semua Disk untuk Volume

Contoh berikut menunjukkan cara mengecualikan semua disk untuk volume tertentu.

HRESULT BuildRestoreOptionString
(
    const WCHAR             *pwszVolumeNamePath,
    CMyString               *pstrExclusionList
)
{
    HANDLE                  hVolume           = INVALID_HANDLE_VALUE;
    DWORD                   cbSize            = 0;
    VOLUME_DISK_EXTENTS     * pExtents        = NULL;
    DISK_EXTENT             * pExtent         = NULL;
    ULONG                   i                 = 0;
    BOOL                    fIoRet            = FALSE;
    WCHAR                   wszDest[MAX_PATH] = L"";
    CMyString               strVolumeName;
    CMyString               strRestoreOption;

    // Open a handle to the volume device.
    strVolumeName.Set( pwszVolumeNamePath );
    // If the volume name contains a trailing backslash, remove it.
    strVolumeName.UnTrailing( L'\\' );
    hVolume = ::CreateFile(strVolumeName, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, 0);
    // Check whether the call to CreateFile succeeded.

    // Get the list of disks used by this volume.
    cbSize = sizeof(VOLUME_DISK_EXTENTS);
    pExtents = (VOLUME_DISK_EXTENTS *)::CoTaskMemAlloc(cbSize);

    ::ZeroMemory(pExtents, cbSize);

    fIoRet = ::DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, pExtents, cbSize, &cbSize, 0);
    if ( !fIoRet && GetLastError() == ERROR_MORE_DATA )
    {
        // Allocate more memory.
        cbSize = FIELD_OFFSET(VOLUME_DISK_EXTENTS, Extents) + pExtents->NumberOfDiskExtents * sizeof(DISK_EXTENT);
        ::CoTaskMemFree(pExtents);
        pExtents = NULL;

        pExtents = (VOLUME_DISK_EXTENTS *) ::CoTaskMemAlloc(cbSize);
        // Check whether CoTaskMemAlloc returned an out-of-memory error.
        ::ZeroMemory(pExtents, cbSize);

        // Now the buffer should be big enough.
        ::DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, pExtents, cbSize, &cbSize, 0);
        // Check whether the IOCTL succeeded.
    }
    // Check for errors; note that the IOCTL can fail for a reason other than insufficient memory.

    // For each disk, mark it to be excluded in the Restore Option string.
    for (i = 0; i < pExtents->NumberOfDiskExtents; i++)
    {
        pExtent = &pExtents->Extents[i];

        *wszDest = L'\0';
        StringCchPrintf(wszDest, MAX_PATH, L"\"ExcludeDisk\"=\"%d\", ", pExtent->DiskNumber); // check errors

        strRestoreOption.Append(wszDest);
        // Check for an out-of-memory error.
    }

    // Remove the trailing comma.
    strRestoreOption.TrimRight();
    strRestoreOption.UnTrailing(',');

    // Set the output parameter.
    strRestoreOption.Transfer( pstrExclusionList );

Exit:
    if( pExtents )
    {
        ::CoTaskMemFree(pExtents);
        pExtents = NULL;
    }

    if( hVolume != INVALID_HANDLE_VALUE )
    {
        ::CloseHandle(hVolume);
        hVolume = INVALID_HANDLE_VALUE;
    }

    return ( hr );
}