복합 저장소 백업의 작성자 역할

VSS의 모든 중요한 작업과 마찬가지로 증분차등 백업에는 요청자와 기록기 간의 긴밀한 협력이 필요합니다.

백업 유형

인프라는 5가지 유형의 백업에 대한 특별 지원을 제공합니다. 다음과 같이 설명할 수 있습니다.

  • 전체(VSS_BT_FULL). 파일은 마지막 백업 날짜에 관계없이 백업됩니다. 각 파일의 백업 기록이 업데이트되며 이 유형의 백업을 증분 또는 차등 백업의 기초로 사용할 수 있습니다. 로그 파일이 있는 경우 이 백업의 결과로 잘리게 될 수 있습니다.

    전체 백업을 복원하려면 단일 백업 이미지만 필요합니다.

  • 차등(VSS_BT_DIFFERENTIAL). VSS API는 마지막 전체 백업 이후 변경되거나 추가된 파일만 스토리지 매체에 복사되도록 하는 데 사용됩니다. 모든 중간 백업 정보는 무시됩니다. 여기에는 전체 파일 또는 파일 내의 특정 범위가 포함될 수 있습니다. 차등 백업은 전체 백업과 연결되며 일반적으로 전체 백업이 복원될 때까지 복원할 수 없습니다. 로그 파일이 있는 경우 일반적으로 이 백업의 결과로 잘리지 않습니다.

    차등 백업을 복원하려면 원래 백업 이미지와 마지막 전체 백업 이후 만든 가장 최근의 차등 백업 이미지가 필요합니다.

  • 증분(VSS_BT_INCREMENTAL). VSS API는 마지막 전체 또는 증분 백업 이후 변경되거나 추가된 파일만 스토리지 매체에 복사되도록 하는 데 사용됩니다. 여기에는 전체 파일 또는 파일 내의 특정 범위가 포함될 수 있습니다. 일부 작성기는 차등 백업과 증분 백업을 혼합할 수 없습니다. 로그 파일이 있는 경우 이 백업의 결과로 잘리게 될 수 있습니다.

    증분 백업을 복원하려면 원래 백업 이미지와 초기 백업 이후 수행된 모든 증분 백업 이미지가 필요합니다.

  • 로그 백업(VSS_BT_LOG). 기록기의 로그 파일( IVssCreateWriterMetadata::AddDataBaseLogFiles 메서드를 사용하여 구성 요소에 추가되고 IVssWMComponent::GetDatabaseLogFile 호출로 검색된 파일)만 백업됩니다. 이 백업 유형은 VSS와 관련이 있습니다. 로그 백업은 자주 수행되는 경향이 있습니다. 일반적으로 로그 파일은 이 백업의 결과로 잘립니다.

  • 백업 복사(VSS_BT_COPY). VSS_BT_FULL 백업 유형과 마찬가지로 파일은 마지막 백업 날짜에 관계없이 백업됩니다. 그러나 각 파일의 백업 기록은 업데이트되지 않으며 이 유형의 백업은 증분 또는 차등 백업의 기초로 사용할 수 없습니다. 로그 파일은 복사 백업의 결과로 잘리지 않아야 합니다.

부분 파일 지원

일부 작성기는 관리하는 파일 부분의 덮어쓰기를 통해 파일 복원을 지원합니다. 요청자는 이를 활용하도록 설계될 수 있으며, 그렇다면 IVssBackupComponents::SetBackupState에서 정보를 설정하여 이를 나타냅니다.

기록기는 Identify 이벤트를 처리하는 동안 IVssCreateWriterMetadata::SetBackupSchema를 호출하여 지원되는 백업 유형을 나타냅니다. IVssCreateWriterMetadata::SetBackupSchema 메서드에 대한 dsSchemaMask 매개 변수는 지원되는 백업 유형을 나타내는 비트 마스크입니다. 모든 기록기는 전체 백업을 지원해야 합니다.

VSS_BS_DIFFERENTIAL

차등 백업에 대한 지원을 나타냅니다.

VSS_BS_INCREMENTAL

증분 백업에 대한 지원을 나타냅니다.

VSS_BS_LOG

로그 백업에 대한 지원을 나타냅니다.

VSS_BS_COPY

복사 백업에 대한 지원을 나타냅니다.

VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL

기록기가 차등 백업과 증분 백업의 혼합을 지원하지 않음을 나타냅니다.

작성기는 CVssWriter::GetBackupType을 호출하여 수행되는 백업 유형을 확인할 수 있습니다. 이 작업을 수행할 수 있는 가장 빠른 지점은 PrepareForBackup 이벤트를 처리하는 동안입니다. CVssWriter::GetBackupTypeVSS_BACKUP_TYPE 열거형의 멤버를 반환합니다. 기록기에서 백업 유형을 지원하지 않는 경우 작성기는 백업을 전체 백업으로 처리해야 합니다.

백업 스탬프

증분 및 차등 백업은 항상 이전 백업에 연결됩니다. 백업을 연결하는 방법에는 두 가지가 있습니다. 단순 데이터 저장소의 경우 요청자는 백업 간의 상관 관계를 추적할 수 있습니다. 그러나 더 복잡한 데이터 저장소의 경우 기록기는 백업을 사용하여 자체 타임스탬프를 유지 관리해야 합니다. 이 타임스탬프는 로그 위치, 검사점 정보 등을 추적할 수 있습니다. 기록기는 IVssCreateWriterMetadata::SetBackupSchema를 호출할 때 VSS_BS_TIMESTAMPED 비트를 설정하여 자체 타임스탬프가 필요하다는 것을 나타냅니다.

작성기는 백업 중인 각 구성 요소와 함께 타임스탬프를 저장할 수 있습니다. 작성기는 IVssComponent::SetBackupStamp를 호출하고 wszBackupStamp 매개 변수에 대한 스탬프의 문자열 표현을 전달하여 타임스탬프를 저장합니다. 일반적으로 기록기는 PostSnapshot 이벤트를 처리하는 동안 이 메서드를 호출합니다. 그러나 섀도 복사본을 포함하지 않는 백업의 경우 PostSnapshot 이벤트가 전송되지 않습니다. 이 경우 PrepareForBackup 이벤트를 처리하는 동안 IVssComponent::SetBackupStamp를 호출해야 합니다.

증분 또는 차등 백업이 수행되는 경우 요청자는 기록기에 이 백업의 기본 역할을 하는 이전 백업의 백업 스탬프를 표시합니다. 작성기는 IVssComponent::GetPreviousBackupStamp를 호출하여 PrepareForBackup 또는 PostSnapshot 이벤트를 처리하는 동안 이 이전 백업 스탬프에 액세스할 수 있습니다. 작성기는 반환된 스탬프를 사용하여 백업해야 하는 사항을 결정할 수 있습니다.

백업 전략

파일 백업 파일 전략

기록기 메타데이터에 보고된 특정 파일은 특정 유형의 백업을 수행할 때만 백업해야 하는 경우가 많습니다. 일부 파일은 전체 백업을 수행할 때만 필요할 수 있습니다. 다른 파일은 증분 또는 차등 백업을 수행할 때만 필요할 수 있습니다. VSS는 기록기가 요청자에게 이 정보를 나타내는 메서드를 제공합니다. IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles 또는 IVssCreateWriterMetadata::AddFilesToFileGroup을 사용하여 구성 요소에 파일을 추가할 때 dwBackupTypeMask 매개 변수는 이러한 파일을 백업해야 하는 백업 유형을 나타냅니다. 마스크는 다음 값 중 하나 이상을 포함할 수 있습니다.

VSS_FSBT_FULL_BACKUP_REQUIRED

전체 백업에 필요합니다.

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

차등 백업에 필요합니다.

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

증분 백업에 필요합니다.

VSS_FSBT_LOG_BACKUP_REQUIRED

로그 백업에 필요합니다.

VSS_FSBT_ALL_BACKUP_REQUIRED

모든 백업 유형에 필요합니다. 이것이 기본값입니다.

이 사양은 구성 요소의 선택성 사양을 재정의합니다. 예를 들어 파일이 모두 VSS_FSBT_LOG_BACKUP_REQUIRED 표시되지만 VSS_FSBT_FULL_BACKUP_REQUIRED 표시되지 않는 구성 요소를 고려해 보세요. 이 구성 요소를 백업에 선택할 수 없다고 가정합니다(IVssCreateWriterMetadata::AddComponent가 호출되었을 때 bSelectable이 false임). 로그 백업의 경우 이 구성 요소의 모든 파일을 항상 백업해야 합니다. 그러나 전체 백업의 경우 구성 요소의 선택성이 백업되어야 한다는 의미에도 불구하고 어떤 파일도 백업할 필요가 없습니다.

마지막 수정 시간별 백업

기록기가 변경된 파일을 나타내는 한 가지 방법은 차이점이 있는 파일 메커니즘을 사용하는 것입니다. 작성기는 특정 시간 이후 수정된 경우에만 구성 요소의 특정 파일을 백업해야 한다고 지정할 수 있습니다. 작성기는 파일 사양 및 마지막 수정 시간을 사용하여 IVssComponent::AddDifferencedFilesByLastModifyTime 을 호출합니다. IVssComponent::AddDifferencedFilesByLastModifyTime 은 일반적으로 PostSnapshot 이벤트를 처리하는 동안 호출되지만 PrepareForBackup 이벤트를 처리하는 동안 호출될 수 있습니다. 그런 다음 요청자는 지정된 시간 이후 변경된 파일 사양과 일치하는 모든 파일을 백업해야 합니다. 기록기가 백업 스탬프 메커니즘을 사용하는 경우 이 마지막 수정 시간은 백업 문서의 이전 백업 스탬프에 따라 결정됩니다. 기록기는 마지막 수정 시간에 대해 0을 전달할 수도 있습니다. 이는 요청자가 마지막 백업의 시간을 결정하고 해당 시간 이후 변경된 파일을 결정한다는 것을 나타냅니다.

부분 파일 백업

기록기가 요청자의 변경 내용을 나타내는 또 다른 방법은 부분 파일 메커니즘을 사용하는 것입니다. 작성기는 백업해야 하는 구성 요소 파일 내에서 바이트 범위를 지정할 수 있습니다. 기록기는 PostSnapshot 또는 PrepareForBackup 이벤트를 처리하는 동안 이러한 파일 범위를 지정할 수 있습니다. 기록기는 IVssComponent::AddPartialFile 을 호출하여 백업에 부분 파일 사양을 추가합니다. 부분 파일 사양은 백업해야 하는 파일의 범위에 대한 정보와 함께 경로 및 파일 이름으로 구성됩니다.

파일 사양 규칙

IVssComponent::AddDifferencedFilesByLastModifyTime 또는 IVssComponent::AddPartialFile 을 사용하여 식별 이벤트 중에 지정된 파일 사양을 수정하거나 완전히 새 파일을 사양에 추가할 수 있습니다. 기록기가 IVssComponent::AddDifferencedFilesByLastModifyTime을 사용하여 식별 이벤트 중에 설정된 정보를 수정하는 경우 파일 사양은 현재 구성 요소의 파일 사양 중 하나와 정확히 일치해야 합니다. 파일 사양은 현재 구성 요소의 파일과 부분적으로 겹치지 않아야 하며 다른 구성 요소의 파일과 일치해서는 안 됩니다. 그러나 IVssComponent::AddPartialFile 을 사용하여 지정된 파일은 다른 파일 사양과 부분적으로 겹칠 수 있습니다. IVssComponent::AddDifferencedFilesByLastModifyTime 또는 IVssComponent::AddPartialFile에서 설정한 정보는 식별 이벤트에 대한 응답으로 IVssCreateWriterMetadata 인터페이스를 사용하여 이전에 설정한 정보를 재정의합니다.

일반 파일 사양에는 백업 시 파일을 가져올 대체 위치를 나타내는 대체 위치 값(IVssCreateWriterMetadata::AddFilesToFileGroupwszAlternateLocation 매개 변수에 의해 설정됨)이 있을 수 있습니다. 차등 파일 또는 부분 파일 메커니즘을 통해 설정된 파일 사양이 대체 위치가 있는 기존 파일 사양과 일치하는 경우 백업 애플리케이션은 이 대체 위치에서 데이터를 가져옵니다.

IVssComponent::AddDifferencedFilesByLastModifyTime 또는 IVssComponent::AddPartialFile에 설정된 파일 사양이 일치하지 않고 백업되는 구성 요소의 파일이 모두 백업에 추가됩니다. 이 작업을 수행하는 동안 기록기에서 이미 섀도 복사 중인 볼륨에 있는 파일만 추가하는 것을 주의해야 합니다. 그렇지 않으면 요청자가 이러한 파일을 백업하지 못할 수 있습니다. PostSnapshot 이벤트를 처리하는 동안 이러한 함수가 호출되는 경우 CVssWriter::IsPathAffected 메서드를 사용하여 확인할 수 있습니다. PrepareForBackup 이벤트를 처리하는 동안 호출된 경우 기록기는 다른 메서드를 사용하여 이 결정을 내려야 합니다.

섀도 복사본이 없는 백업

특정 유형의 파일을 섀도 복사본 볼륨에서 백업할 필요가 없습니다. 예를 들어 데이터베이스 로그 파일의 경우도 마찬가지입니다. 로그 파일은 단조롭게 증가하고 기록기는 부분 파일을 사용하여 백업할 파일의 일부를 정확히 지정할 수 있으므로 원래 볼륨에서 로그를 백업할 수 있는 경우가 많습니다. 최적화로 작성기는 IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles::AddDatabaseLogFiles 또는 IVssCreateWriterMetadata::AddFilesToFileGroupdwBackupTypeMask 매개 변수에 설정된 플래그를 사용하여 다양한 백업 형식에 대해 섀도 복사본이 필요한 파일을 표시할 수 있습니다. 지원되는 플래그는 다음과 같습니다.

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

전체 백업에 섀도 복사본이 필요합니다.

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

차등 백업에 필요한 섀도 복사본입니다.

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

증분 백업에 섀도 복사본이 필요합니다.

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

로그 백업에 필요한 섀도 복사본입니다.

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

모든 백업 유형에 섀도 복사본이 필요합니다. 이것이 기본값입니다.

특정 볼륨에 이 백업에 대한 섀도 복사본이 필요하지 않은 구성 요소만 포함된 경우 요청자는 이 볼륨에 대한 섀도 복사본을 만드는 단계를 건너뛸 수 있습니다. 이 볼륨의 모든 데이터는 원래 볼륨에서 직접 백업 미디어에 복사할 수 있습니다.

백업 정리

기록기가 로그 잘림 또는 다른 백업 후 정리를 수행해야 하는 경우 BackupComplete 이벤트를 처리하는 동안 이 작업을 수행할 수 있는 적절한 위치입니다. BackupShutdown 이벤트는 BackupComplete 이후 일정 시간 동안 전송되므로 BackupShutdown 이벤트 처리기에서도 일부 정리가 수행될 수 있습니다.

BackupShutdown 이벤트는 백업이 종료된 후 항상 전송됩니다. 백업을 수행하는 동안 요청자가 비정상적으로 종료되면 BackupComplete를 먼저 보내지 않고 BackupShutdown이 즉시 전송됩니다. 작성자가 상태를 정리해야 하는 경우 여기에서 수행할 수 있습니다. 그러나 백업이 반드시 완료되지는 않았기 때문에 이 이벤트에서 로그 잘림이 발생하지 않아야 합니다.

복원 전략

복원 시 기록기의 기본 작업은 복원이 PreRestore 이벤트를 처리할 때 발생할 수 있고 PostRestore 이벤트 처리 시 복원이 발생했는지 확인하는 것입니다. 더 복잡한 저장소는 PostRestore 처리기에서도 복구 프로세스를 수행합니다. 복원이 증분 또는 차등 복원의 일부인 경우 기록기는 일반적으로 모든 증분 또는 차등 복원이 완료될 때까지 이 복구 프로세스를 지연하려고 합니다. IVssComponent::GetAdditionalRestores 는 이 구성 요소의 최종 복원인지 또는 더 많은 복원이 있는지 여부를 나타냅니다. IVssComponent::GetAdditionalRestorestrue를 반환하는 경우 기록기는 해당 구성 요소에 대한 복구 절차를 수행하면 안 됩니다.

새 대상

기록기에서 지원하는 경우 요청자는 원래 백업 시간 위치가 아닌 다른 위치로 데이터 파일을 복원할 수 있습니다. 작성기는 IVssCreateWriterMetadata::SetBackupSchema를 호출할 때 dsSchemaMask 매개 변수에서 VSS_BS_WRITER_SUPPORTS_NEW_TARGET 비트를 설정하여 이 복원 모드에 대한 지원을 나타냅니다. 작성기는 IVssComponent::GetNewTargetCount 및 IVssComponent::GetNewTarget을 호출하여 복원 시 구성 요소 파일의 새 위치를 가져옵니다.

지시 대상

복잡한 복원 시나리오의 경우 기록기는 백업된 파일의 범위를 동일하거나 다른 파일의 다른 범위에 매핑할 수 있습니다. 이 작업은 직접 대상 메커니즘을 사용하여 수행할 수 있습니다. 이렇게 하려면 먼저 기록기에서 IVssComponent::SetRestoreTarget을 호출하고 대상 매개 변수에 대한 VSS_RT_DIRECTED 전달하여 이런 일이 발생함을 나타내야 합니다. 그런 다음 각 매핑에 대해 작성기는 IVssComponent::AddDirectedTarget을 호출합니다. 이 메서드는 백업의 원본 파일에 대한 전체 경로와 복원될 대상 파일의 전체 경로를 사용합니다. 또한 이러한 각 파일에 대한 범위 목록을 사용합니다. 기록기는 PreRestore 이벤트를 처리하는 동안 이러한 함수를 호출하고, 요청자는 원본 파일의 지정된 범위를 대상 파일의 매핑된 범위로 복원합니다. 범위 문자열의 형식은 IVssComponent::AddPartialFile에서와 같습니다.

개인 기록기 메타데이터

증분 또는 차등 복원을 제대로 수행하려면 기록기에서 백업을 사용하여 프라이빗 메타데이터를 유지하는 것이 유용한 경우가 많습니다. 기록기는 PrepareForBackup 또는 PostSnapshot을 처리하여 메타데이터를 저장하는 동안 IVssComponent::SetBackupMetadata 를 호출할 수 있습니다. IVssComponent::GetBackupMetadata를 호출하여 PreRestore 또는 PostRestore 중에 기록기에서 이 메타데이터에 액세스할 수 있습니다. IVssComponent::AddPartialFilewszMetadata 매개 변수를 사용하여 메타데이터를 부분 파일 사양으로 저장할 수도 있습니다. 이 메타데이터는 IVssComponent::GetPartialFilepbstrMetadataparameter를 통해 액세스됩니다. 작성기는 CVssWriter::OnPreRestore와 CVssWriter::OnPostRestore 간에 메타데이터를 자체에 전달할 수도 있습니다. CVssWriter::OnPreRestore에서 메타데이터는 IVssComponent::SetRestoreMetadata를 호출하여 설정됩니다. CVssWriter::OnPostRestore에서 IVssComponent::GetRestoreMetadata를 호출하여 메타데이터를 검색합니다.