다음을 통해 공유


VSS에서 레지스트리 백업 및 복원 작업

Windows 레지스트리 서비스는 요청자가 섀도 복사 볼륨에 저장된 데이터를 사용하여 시스템 레지스트리를 백업할 수 있도록 하는 레지스트리 기록기라는 VSS 기록기를 지원합니다. 레지스트리 작성기에 대한 자세한 내용은 기본 제공 VSS 기록기를 참조 하세요.

레지스트리 작성기는 레지스트리의 현재 위치 백업 및 복원을 수행합니다. 또한 레지스트리 작성기는 시스템 하이브만 보고합니다. 사용자 하이브를 보고하지 않습니다.

Windows Server 2003: 레지스트리 작성기는 중간 리포지토리 파일(스핏 파일이라고도 함)을 사용하여 레지스트리 데이터를 저장합니다. 또한 레지스트리 작성기는 시스템 하이브 및 사용자 하이브를 보고합니다.

레지스트리 작성기에 대한 기록기 ID는 AFBAB4A2-367D-4D15-A586-71DBB18F8485입니다.

Windows XP: 레지스트리 작성기가 없습니다. 레지스트리 데이터는 기록기 ID가 F2436E37-09F5-41AF-9B2A-4CA2435DBFD5인 부팅 가능한 상태 기록기에 의해 보고됩니다.

참고 항목

Microsoft는 Windows(모든 릴리스)에서 온라인 시스템 상태 복원을 구현하기 위한 개발자 또는 IT 전문가 기술 지원을 제공하지 않습니다. 

참고 항목

다음 정보는 Windows Server 2003 및 Windows XP에만 적용됩니다.

 

VSS를 사용한 레지스트리 백업

레지스트리 작성기는 System\CurrentControlSet\Control\hivelist의 키 HKEY_LOCAL_MACHINE\정의된 위치에 활성 레지스트리 파일을 내보내고 저장합니다.

이 레지스트리 항목 아래의 값 이름은 저장할 레지스트리 하이브를 식별하고, 값의 데이터는 파일(hive 파일)을 포함하는 파일을 제공합니다. hive 파일은 \Device\HarddiskVolumeX\경로\파일 이름 형식으로 지정됩니다.

예를 들어 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\hivelist 아래에 \REGISTRY\MACHINE\SOFTWARE = \Device\HarddiskVolume1\Windows\System32\config\SOFTWARE가 표시될 수 있습니다.

레지스트리 작성기는 Hive 파일이 섀도 복사본 전에 디스크에 저장되도록 합니다.

레지스트리 하이브를 백업할 때 요청자는 \Device\HarddiskVolumeX를 볼륨의 섀도 복사본의 디바이스 개체 문자열로 바꿉니다.

참고 항목

QueryDosDevice 함수를 사용하여 \Device\HarddiskVolumeX 경로를 동등한 Win32 경로로 변환할 수 있습니다. 자세한 내용은 파일 핸들에서 파일 이름 가져오기 또는 볼륨 경로 이름 표시를 참조하세요.

 

VSS Win32가 아닌 API를 사용하여 레지스트리 복원

참고 항목

레지스트리 복원은 Windows Server 2016 이상에서 지원되지 않습니다.

온라인(안전 모드 또는 전체 운영 체제) 복원의 경우 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations 레지스트리 키의 하위 키가 유지되어야 합니다.

MoveFileExMoveFileTransacted 함수는 이 레지스트리 키를 사용하여 dwFlags 매개 변수의 MOVEFILE_DELAY_UNTIL_REBOOT 값을 사용하여 이름이 변경된 파일에 대한 정보를 저장합니다.

PendingFileRenameOperations 레지스트리 키의 내용을 유지하려면 백업 애플리케이션이 RegLoadKey 함수를 호출하여 레지스트리 파일을 활성 레지스트리에 복원할 수 있도록 연결해야 합니다. 그런 다음 백업 애플리케이션은 다양한 레지스트리 함수를 사용하여 원하는 키와 값을 로드된 하이브에 복사할 수 있습니다. 복사가 완료되면 RegFlushKeyRegUnloadKey 함수를 호출해야 합니다.

오프라인(Windows 복구 환경 또는 Windows PE) 복원의 경우 PendingFileRenameOperations 레지스트리 키를 적용할 필요가 없습니다.

Windows Server 2003에서 비 VSS Win32 API를 사용하여 레지스트리 복원

참고 항목

다음 정보는 Windows Server 2003에서 수행되는 재해 복구(완전 복구라고도 함)와 관련된 복원 작업에만 적용됩니다.

 

레지스트리를 복원할 때 백업 애플리케이션은 현재 레지스트리의 일부 하위 키를 복원할 레지스트리로 이동해야 합니다.

이를 위해 백업 애플리케이션은 RegLoadKey를 호출하여 현재 활성 레지스트리에 복원할 레지스트리 파일을 연결할 수 있습니다. 그런 다음 다양한 레지스트리 함수를 사용하여 원하는 키와 값을 로드된 하이브에 복사할 수 있습니다. 복사가 완료되면 RegFlushKeyRegUnloadKey 가 호출됩니다.

복원 시 덮어쓰지 않아야 하는 HKEY_LOCAL_MACHINE\SYSTEM 아래의 레지스트리 키를 복원 애플리케이션(요청자)에게 나타내는 레지스트리 키가 있습니다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

시스템 상태 복원 프로세스의 일부에는 이전에 백업된 레지스트리를 복원하는 작업이 포함됩니다.

Windows 운영 체제의 임시 버전을 설치하는 프로세스에서 새로 설치된 시스템 하이브에 키가 설정되므로 백업 애플리케이션은 HKEY_LOCAL_MACHINE\SYSTEM 하이브를 복원할 때 특별히 주의해야 합니다.

예를 들어 교체 시스템에 원래 시스템과 다른 네트워크 인터페이스 카드가 있는 경우 이전 카드의 원래 키를 복원하면 예기치 않은 결과가 발생합니다. 이는 플러그 앤 플레이 서비스가 적절한 서비스 및 드라이버 레지스트리 항목을 검색하여 레지스트리에 배치했기 때문입니다. 시스템 복원 후 제대로 부팅하려면 이러한 값을 유지해야 합니다.

이 섹션에서는 백업 애플리케이션이 HKEY_LOCAL_MACHINE\SYSTEM 하이브의 복원을 실행할 때 보존할 키와 파일을 검색하는 방법을 설명합니다. 경우에 따라 새로 설치된 설치 하이브의 키를 복원할 하이브에 프로그래밍 방식으로 복사하는 작업이 포함됩니다. 다른 경우에는 제품의 레지스트리 키를 교체하지 않도록 하는 것은 제품의 INF 구성 파일에서 이러한 키를 지정하는 것만큼 간단합니다.

보존할 키(및 키 데이터)는 아래의 HKEY_LOCAL_MACHINE\SYSTEM 하이브에 열거됩니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\BackupRestore\KeysNotToRestore

키는 REG_MULTI_SZ 문자열 집합으로 사용됩니다(이 문서에서 키 문자열이라고 함).

모든 애플리케이션 또는 서비스가 언제든지 값을 추가할 수 있으므로 백업 애플리케이션(요청자)은 활성 레지스트리 및 새로 복원된 레지스트리에서 이러한 키의 값을 검사해야 합니다.

백업 애플리케이션에서 키 문자열을 해석하는 방법은 해당 터미널 문자에 의해 결정됩니다.

  1. 백슬래시('\')로 종료된 키 문자열은 하위 키로 해석됩니다. 이러한 하위 문자열이 발견되면 백업 애플리케이션은 모든 데이터와 모든 하위 키를 유지해야 합니다.

    예를 들어 다음은 모든 하위 키와 데이터를 복원 작업 전체에서 보존하도록 지정합니다.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dmio\boot info\

    이를 위해 이 키와 모든 하위 키와 데이터를 기존 레지스트리(즉, Windows 설치로 만든 레지스트리)에서 새로 복원된 레지스트리로 복사해야 합니다. 이를 키 바꾸기 작업이라고 합니다. 이 작업은 복원된 레지스트리의 해당 키를 대체합니다.

  2. 종료 문자가 별표('*')인 키 문자열은 모든 하위 키를 병합할 것을 지정합니다. 예를 들어 키 문자열은 다음과 같습니다.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\*

    는 기존 레지스트리의 서비스 키(예: Windows 설치에 의해 생성된 서비스 키)를 복원된 레지스트리에 병합해야 한다고 지정합니다. 이를 키 병합 작업이라고 하며, 하위 키가 기존 하이브와 복원된 하이브 모두에 있는 경우 복원된 디렉터리의 키는 다음과 같은 예외를 제외하고 유지됩니다.

    • 기존 하이브의 하위 키에 "start"라는 값이 포함되어 있고 복원된 하위 키가 포함되지 않은 경우
    • 기존 하이브와 복원된 하이브의 하위 키에 "start"라는 값이 포함되어 있고 기존 하이브의 해당 숫자 값이 더 적습니다.

    레지스트리의 "start" 값은 서비스 또는 드라이버가 시작되는 시기를 지정하고 0-4의 숫자 값을 가질 수 있습니다. 값이 낮을수록 부팅 프로세스에서 서비스가 더 빨리 시작됩니다.

    이 키가 기존 디렉터리와 복원된 디렉터리에 모두 있는 경우 각 하이브에서 시작 키의 값을 검사해야 합니다. 기존 하이브의 값이 복원된 디렉터리의 값보다 낮으면 더 낮은 값을 유지해야 합니다.

    다시 한 번 이 키를 사용하여 서비스 또는 드라이버를 부팅 시, 시스템 시간에, 수동으로, 자동으로 시작하거나, 사용하지 않도록 설정할지 여부를 결정합니다. 더 낮은 값은 이전 시작 시간을 나타냅니다. 서비스 또는 드라이버가 다음 부팅 시 제대로 시작되도록 새 레지스트리에 이전 시작 시간을 적용해야 합니다.

  3. 종료 문자가 백슬래시나 별표가 없는 키 문자열은 보존할 레지스트리 값으로 해석됩니다.

    예를 들어 키 문자열은 다음과 같습니다.

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations

    키를 프로그래밍 방식으로 보존할 수 있는 메커니즘에는 Win32 레지스트리 API가 포함됩니다. 예를 들어 한 알고리즘은 아래에 열거되어 있습니다.

    1. 백업된 시스템 하이브 파일을 파일로 복원합니다. 이 예제에서는 이름을 System.reg.

    2. RegLoadKey를 사용하여 임시 이름으로 HKEY_LOCAL_MACHINE System.reg 로드합니다. 예를 들어 이러한 이름 중 하나는 일 수 있습니다.

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

    3. 두 레지스트리 복사본에서 KeysNotToRestore 하위 키의 값을 열거하고 목록의 상위 집합을 만듭니다. 기존 키에서 각 키 복사

      HKEY_LOCAL_MACHINE\SYSTEM

      에 대한 키

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      위에서 설명한 의미 체계에 따른 키입니다.

    4. 완료되면 RegFlushKeyRegUnloadKey 진입점을 사용하여 다음을 저장합니다.

      HKEY_LOCAL_MACHINE\TMP_SYSTEM

      키를 다시 System.reg.

    5. 마지막으로 RegReplaceKey를 사용하여 System.reg

      HKEY_LOCAL_MACHINE\SYSTEM

      hive 파일, SYSTEM.