복합 저장소 백업의 요청자 역할

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에서 정보를 설정하여 이를 나타냅니다.

요청자는 IVssBackupComponents::SetBackupStatebackupType 매개 변수를 통해 수행되는 백업 유형을 지정합니다. 다른 작성기는 다양한 유형의 백업을 지원합니다. IVssBackupComponents::GatherWriterMetadata가 호출된 후 요청자는 IVssExamineWriterMetadata::GetBackupSchema를 호출하여 지정된 작성기가 지원하는 백업 유형을 확인할 수 있습니다. 반환된 값은 다양한 백업 유형에 대한 지원을 나타내는 비트 마스크입니다. VSS_BS_DIFFERENTIAL 차등 백업, 증분 백업 VSS_BS_INCREMENTAL , 로그 백업 VSS_BS_LOG 및 복사 백업에 대한 VSS_BS_COPY 대한 지원을 나타냅니다. 모든 기록기는 전체 백업을 지원해야 합니다. 기록기가 차등 백업과 증분 백업의 혼합을 지원하지 않는 경우 VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL 플래그도 추가됩니다. 요청자가 증분 또는 차등 백업을 수행하고 지정된 작성기가 해당 백업 유형을 지원하지 않는 경우 해당 기록기에서 전체 백업을 수행해야 합니다.

백업 스탬프

증분 및 차등 백업은 항상 이전 백업에 연결됩니다. 백업을 연결하는 방법에는 두 가지가 있습니다. 간단한 데이터 저장소의 경우 요청자는 백업 간의 상관 관계를 추적할 수 있습니다. 그러나 더 복잡한 데이터 저장소의 경우 기록기는 백업을 사용하여 자체 타임스탬프를 유지 관리해야 합니다. 이 타임스탬프는 로그 위치, 검사점 정보 등을 추적할 수 있습니다. 요청자는 IVssExamineWriterMetadata::GetBackupSchema에서 반환된 값에서 VSS_BS_TIMESTAMPED 비트를 확인하여 지정된 작성기가 자체 타임스탬프를 저장해야 하는지 여부를 확인할 수 있습니다.

백업에 타임스탬프를 저장하는 기록기는 IVssBackupComponents::P repareForBackup 을 처리하는 동안 또는 IVssBackupComponents::D oSnapshotSet을 처리하는 동안 타임스탬프를 추가합니다. 요청자는 IVssComponent::GetBackupStamp를 호출하여 이 타임스탬프를 가져올 수 있습니다. 증분 또는 차등 백업을 수행할 때 요청자는 현재 백업을 일부 이전 백업에 연결해야 합니다. 이 작업은 특정 구성 요소의 이전 백업에서 타임스탬프를 가져와 서 IVssBackupComponents::SetPreviousBackupStamp 함수에 전달하여 수행됩니다. 이전 백업에서 백업된 각 구성 요소에 대해 이 작업을 수행해야 합니다.

파일 백업

기록기에서 보고한 파일 백업

GatherWriterMetadata 단계 중에 기록기가 메타데이터에 추가하는 모든 파일 사양에는 파일을 백업해야 하는 시기를 지정하는 백업 형식 마스크가 포함되어 있습니다. 요청자는 IVssWMFiledesc::GetBackupTypeMask를 호출하여 이 마스크가 무엇인지 확인합니다. 이 마스크의 값은 파일 사양을 백업해야 하는 백업 형식을 결정하는 데 사용됩니다. 마스크는 다음 비트 값 중 하나 이상을 포함할 수 있습니다.

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임). 로그 백업의 경우 이 구성 요소의 모든 파일을 항상 백업해야 합니다. 그러나 전체 백업의 경우 구성 요소의 선택성이 백업되어야 한다는 의미에도 불구하고 파일을 백업할 필요가 없습니다.

마지막 수정 시간별 백업

IVssBackupComponents::GatherWriterMetadata 단계에 지정된 파일 사양 정보는 요청자에게 마지막 백업 이후 변경된 내용에 대한 정보를 제공하지 않습니다. 기록기가 요청자에 대한 변경 내용을 나타내는 한 가지 방법은 차이점이 있는 파일 메커니즘을 사용하는 것입니다. 작성기는 특정 시간 이후 수정된 경우에만 구성 요소의 특정 파일을 백업해야 한다고 지정할 수 있습니다. 작성기는 IVssBackupComponents::P repareForBackup 또는 IVssBackupComponents::D oSnapshotSet에서 이러한 파일을 지정할 수 있습니다. 요청자는 IVssComponent::GetDifferencedFilesCountIVssComponent::GetDifferencedFile을 호출하여 이러한 파일을 확인할 수 있습니다. 파일 사양이 IVssBackupComponents::GatherWriterMetadata (현재 백업 형식 마스크에 따라 유효함)의 집합과 일치하는 경우 차이점이 있는 파일 정보는 이전 정보를 재정의합니다. 즉, 해당 파일 사양과 일치하는 파일은 지정된 시간 이후 수정된 경우에만 백업됩니다. 마지막 수정 시간은 FILETIME 구조를 사용하여 전달됩니다. 이 구조체의 값이 0이면 마지막 백업 시간에 대한 요청자의 레코드에 따라 마지막 수정 시간을 결정해야 합니다.

부분 파일 백업

기록기가 요청자의 변경 내용을 나타내는 또 다른 방법은 부분 파일 메커니즘을 사용하는 것입니다. 작성기는 백업해야 하는 구성 요소 파일 내에서 바이트 범위를 지정할 수 있습니다. 작성기는 IVssBackupComponents::P repareForBackup 또는 IVssBackupComponents::D oSnapshotSet에서 이러한 파일 범위를 지정할 수 있습니다. 요청자는 IVssComponent::GetPartialFileCountIVssComponent::GetPartialFile을 호출하여 이러한 파일을 확인할 수 있습니다. IVssComponent::GetPartialFile 은 파일을 가리키는 경로와 파일 이름과 파일에서 백업해야 할 내용을 나타내는 범위 문자열을 반환합니다. 다른 파일과 마찬가지로 경로 및 파일 이름이 IVssBackupComponents::GatherWriterMetadata의 기록기에서 설정한 파일 사양과 일치하는 경우 부분 파일 정보는 이전 설정을 재정의합니다. 범위 문자열에는 두 가지 형식이 있을 수 있습니다. 즉, 범위를 직접 지정하거나 범위 정보를 포함하는 파일을 지정할 수 있습니다. 범위를 직접 지정하는 경우 구문은 오프셋1:length1, offset2:length2 형식의 쉼표로 구분된 목록입니다. 여기서 각 오프셋과 길이는 64비트 부호 없는 정수입니다. 범위 파일을 지정하는 경우 범위 문자열을 File= filename으로 설정해야 합니다. 여기서 filename 은 범위 파일의 전체 경로입니다. 범위 파일 자체는 64비트 부호 없는 정수 목록으로 서식이 지정된 이진 파일입니다. 첫 번째 정수는 파일에 표시되는 범위 수를 나타냅니다. 이후의 각 정수 쌍은 범위의 오프셋 및 길이를 나타냅니다. 요청자는 이 범위 파일도 백업하고 복원하는 데 주의해야 합니다.

파일 사양 규칙

differenced-file 및 partial-file 메커니즘을 통해 추가된 파일 사양은 IVssBackupComponents::GatherWriterMetadata 에 설정된 파일 사양을 수정하거나 완전히 새 파일을 추가합니다. 부분 파일 메커니즘을 사용하여 IVssBackupComponents::GatherWriterMetadata 에 설정된 파일 사양을 수정하는 경우 요청자는 파일 사양이 IVssBackupComponents::GatherWriterMetadata의 구성 요소에 설정된 파일 사양 중 하나와 정확히 일치할 것으로 예상할 수 있습니다. 파일 사양은 다른 파일 사양과 부분적으로 겹치지 않으며 다른 기록기 구성 요소의 파일 사양과 일치하지 않습니다. 부분 파일 메커니즘을 사용하여 추가된 파일 사양은 다른 파일 사양과 부분적으로 겹칠 수 있습니다. 이 경우 differenced-file 또는 partial-file 사양은 IVssBackupComponents::GatherWriterMetadata에 설정된 사양을 재정의합니다. 일반 파일 사양에는 백업 시 파일을 가져올 대체 위치를 나타내는 대체 위치 값( IVssWMFiledesc::GetAlternateLocation에서 반환됨)이 있을 수 있습니다. differenced-file 또는 partial 파일 메커니즘을 통해 설정된 파일 사양이 대체 위치가 있는 기존 파일 사양과 일치하는 경우 이 대체 위치에서 데이터를 선택해야 합니다. differenced-file 또는 partial-file 메커니즘을 통해 설정된 파일 사양이 구성 요소의 기존 사양과 일치하지 않는 경우 이제 이러한 파일 범위를 백업에 추가해야 합니다. 요청자는 이러한 메커니즘 중 하나를 사용하여 섀도 복사본 집합에 이미 포함된 볼륨의 파일만 추가될 것으로 예상할 수 있습니다.

섀도 복사본 없이 백업

특정 유형의 파일을 섀도 복사본 볼륨에서 백업할 필요가 없습니다. 예를 들어 데이터베이스 로그 파일의 경우도 마찬가지입니다. 로그 파일은 단조롭게 증가하고 기록기는 부분 파일을 사용하여 백업할 파일의 부분을 정확히 지정할 수 있으므로 원래 볼륨에서 로그를 백업할 수 있는 경우가 많습니다. 최적화로 기록기는 백업 형식 마스크를 사용하여 다양한 백업 유형에 대해 섀도 복사본이 필요한 파일을 표시할 수 있습니다. IVssWMFiledesc::GetBackupTypeMask에서 반환된 값은 다음 비트 값 중 하나 이상을 포함할 수 있습니다.

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

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

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

파일 복원

순차 복원

요청자가 복원 작업을 수행한 후 모든 기록기에 PostRestore 이벤트를 보냅니다. 일반적으로 기록기는 복구 또는 기타 복원 후 작업을 수행하여 이 이벤트를 처리합니다. 그러나 증분 백업의 복원은 일반적으로 증분 백업당 하나씩 일련의 복원 작업으로 발생합니다. 요청자는 복원이 완전히 완료될 때까지 복구 또는 기타 바람직하지 않은 작업이 발생하지 않도록 이러한 복원이 진행 중임을 기록자에게 알려야 합니다. 이 작업은 IVssBackupComponents::SetAdditionalRestores를 호출하여 수행됩니다. 이 메서드는 구성 요소별로 호출되며 작성기에 해당 구성 요소에 대해 더 많은 복원이 제공되고 있음을 나타냅니다. 시퀀스의 최종 복원의 경우 추가 복원 플래그를 false(기본값)로 설정해야 합니다. 이는 이 플래그가 해당 구성 요소에 대한 시퀀스의 마지막 복원임을 나타냅니다.

새 대상

기록기에서 지원되는 경우 요청자는 원래 백업 시간 위치가 아닌 다른 위치로 데이터 파일을 복원할 수 있습니다. 요청자는 IVssExamineWriterMetadata::GetBackupSchema를 호출하여 이 지원을 검사 수 있습니다. 작성기가 이 동작을 지원하는 경우 VSS_BS_WRITER_SUPPORTS_NEW_TARGET 비트가 설정됩니다. 요청자는 재배치된 각 파일 사양에 대해 IVssBackupComponents::AddNewTarget 을 호출하여 작성자에게 새 위치를 알릴 수 있습니다. 요청자는 특정 범위 파일을 다른 위치로 복원하도록 결정할 수도 있습니다. 요청자는 IVssBackupComponents::SetRangesFilePath를 호출하여 이 변경 사항을 작성자에게 알릴 수 있습니다.

지시된 대상

복잡한 복원 시나리오의 경우 기록기는 백업된 파일의 범위를 동일하거나 다른 파일의 다른 범위에 매핑할 수 있습니다. 이 작업은 지시된 대상 메커니즘을 사용하여 수행할 수 있습니다. 요청자는 IVssComponent::GetRestoreTarget을 호출하고 VSS_RT_DIRECTED 반환을 확인하여 IVssBackupComponents::PreRestore 단계 이후에 이 메커니즘이 구성 요소에 사용되고 있는지 확인할 수 있습니다. 요청자는 IVssComponent::GetDirectedTargetCount 및 IVssComponent::GetDirectedTarget 을 호출하여 이러한 리디렉션 복원을 모두 가져올 수 있습니다. IVssComponent::GetDirectedTarget 은 백업의 원본 파일에 대한 전체 경로와 복원될 대상 파일의 전체 경로를 반환합니다. 또한 이러한 각 파일에 대한 범위 목록을 반환합니다. 그런 다음 요청자는 원본 파일의 지정된 범위를 대상 파일의 매핑된 범위로 복원해야 합니다. 범위 문자열의 형식은 IVssComponent::GetPartialFile과 동일합니다.