충돌 및 우선 순위

파일과 설정을 포함하고, 제외하고, 경로를 조정할 때는 사용자 상태 마이그레이션 도구(USMT) 5.0에서 충돌 및 우선 순위를 처리하는 방법을 알아야 합니다. USMT로 작업할 경우 다음은 충돌 및 우선 순위에 대한 가장 중요한 지침입니다.

  • 구성 요소 내에 충돌하는 규칙이 있으면 가장 한정적인 규칙이 적용됩니다. 그러나 다른 모든 규칙보다 우선하는 <unconditionalExclude> 규칙은 예외입니다. 디렉터리 이름은 파일 확장명보다 우선합니다. 예를 보려면 이 항목 뒷부분의 <include> 규칙과 <exclude> 규칙이 충돌할 때 발생하는 동작<include> 및 <exclude> 규칙 우선 순위 예의 첫 번째 예를 참조하세요.

  • 동일한 구성 요소 내에 있는 규칙만 한정성에 따라 서로 영향을 미칠 수 있습니다. 다른 구성 요소에 있는 규칙은 서로 영향을 미치지 않습니다(<unconditionalExclude> 규칙은 예외).

  • 규칙의 한정성이 동일하면 <exclude>가 <include>보다 우선합니다. 예를 들어 <exclude> 규칙을 사용하여 파일을 제외하고 <include> 규칙을 사용하여 동일한 파일을 포함하면 파일이 제외됩니다.

  • 구성 요소의 순서는 영향을 미치지 않습니다. 모든 .xml 파일에서 각 구성 요소는 다른 구성 요소와 독립적으로 처리되므로 어떤 .xml 파일에 어떤 구성 요소가 나열되어 있는지는 중요하지 않습니다.

  • 구성 요소 내에서 <include> 및 <exclude> 규칙의 순서는 영향을 미치지 않습니다.

  • <unconditionalExclude> 요소를 사용하여 데이터를 전역으로 제외할 수 있습니다. 이 요소는 .xml 파일에 있는 다른 <include> 규칙에 관계없이 개체를 제외합니다. 예를 들어 <unconditionalExclude> 요소를 사용하여 컴퓨터에 있는 모든 MP3 파일을 제외하거나 C:\UserData에 있는 모든 파일을 제외할 수 있습니다.

동일한 구성 요소 내에 있는 규칙만 한정성에 따라 서로 영향을 미칠 수 있습니다(<unconditionalExclude> 규칙은 제외). 다른 구성 요소에 있는 규칙은 서로 영향을 미치지 않습니다. 한 구성 요소에 <include> 규칙이 있고 다른 구성 요소에 동일한 <exclude> 규칙이 있는 경우 두 규칙은 서로 독립적이므로 데이터가 마이그레이션됩니다.

한 구성 요소에 <include> 규칙이 있고 동일한 파일에 대해 다른 구성 요소에 <locationModify> 규칙이 있는 경우 파일은 두 위치에서 모두 마이그레이션됩니다. 즉, 이 파일은 <include> 규칙에 따라 포함되고 <locationModify> 규칙에 따라 마이그레이션됩니다.

다음 .xml 파일에서는 <exclude> 규칙이 별도의 구성 요소에 지정되어 있으므로 .mp3 파일을 포함하여 C:\Userdocs에 있는 모든 파일이 마이그레이션됩니다.

<migration urlid="http://www.microsoft.com/migration/1.0/migxmlext/UserDocs">
<component type="Documents" context="System">
<displayName>User Documents</displayName>
        <role role="Data">
            <rules>
                <exclude>
                    <objectSet>
                        <pattern type="File">C:\Userdocs\* [*.mp3]</pattern>
                    </objectSet>
                </exclude>
          </rules>
        </role>
</component>

<component type="Documents" context="System">
<displayName> User documents to include </displayName>
        <role role="Data">
            <rules>
                <include>
                    <objectSet>
                        <pattern type="File"> C:\Userdocs\ [*]</pattern>
                    </objectSet>
                </include>
          </rules>
        </role>
</component>
</migration>

Config.xml 파일에서 migrate="no"를 지정하는 것은 마이그레이션 .xml 파일에서 해당 구성 요소를 삭제하는 것과 같습니다. 그러나 My Documents에 대해 migrate="no"를 설정했지만 마이그레이션 .xml 파일에 아래 표시된 것과 비슷한 규칙(My Documents에 있는 모든 .doc 파일 포함)이 있는 경우 .doc 파일만 마이그레이션되고 다른 모든 파일은 제외됩니다.

<include>
   <objectSet>
      <pattern type="File">%CSIDL_PERSONAL%\* [*.doc] </pattern>
   </objectSet>
</include> 

구성 요소의 순서는 중요하지 않습니다. 각 구성 요소는 다른 구성 요소와 독립적으로 처리됩니다. 예를 들어 한 구성 요소에 <include> 규칙이 있고 동일한 파일에 대해 다른 구성 요소에 <locationModify> 규칙이 있는 경우 파일은 두 위치에서 모두 마이그레이션됩니다. 즉, 이 파일은 <include> 규칙에 따라 포함되고 <locationModify> 규칙에 따라 마이그레이션됩니다.

규칙의 범주는 크게 다음 두 가지로 볼 수 있습니다.

  • ScanState 및 LoadState 도구의 동작에 모두 영향을 미치는 규칙. 예를 들어 <include>, <exclude> 및 <unconditionalExclude> 규칙은 .xml 파일의 각 구성 요소에 대해 처리됩니다. USMT는 각 구성 요소에 대해 포함 목록과 제외 목록을 만듭니다. 구성 요소에 있는 규칙 중 일부는 한정성에 따라 무시될 수도 있지만, 나머지 규칙은 모두 처리됩니다. 각 <include> 규칙의 경우 USMT는 전체 요소에서 반복하여 제외해야 할 위치가 있는지 확인합니다. USMT 는 모든 개체를 열거하고 각 사용자에 대해 수집할 개체 목록을 만듭니다. 목록이 완성되면 각 개체는 대상 컴퓨터에 저장되거나 마이그레이션됩니다.

  • LoadState 도구의 동작에만 영향을 미치는 규칙. 예를 들어 <locationModify>, <contentModify> 및 <destinationCleanup> 규칙은 ScanState에 영향을 미치지 않습니다. 이러한 규칙은 LoadState에서만 처리됩니다. 먼저 LoadState 도구는 <locationModify> 및 <contentModify> 규칙을 기반으로 하여 각 구성 요소의 내용과 위치를 확인합니다. 그런 다음 LoadState는 모든 <destinationCleanup> 규칙을 처리하고 대상 컴퓨터에서 데이터를 삭제합니다. 마지막으로 LoadState는 구성 요소를 컴퓨터에 적용합니다.

USMT 는 .xml 파일을 이름이나 내용을 기반으로 하여 구별하지 않습니다. 대신 파일 내에 있는 각 구성 요소를 개별적으로 처리합니다. USMT 는 여러 개의 .xml 파일을 지원하므로 각 파일 내의 구성 요소를 더 쉽게 유지 관리하고 구성할 수 있습니다. USMT는 urlid를 사용하여 각 구성 요소를 구별하므로 명령줄에서 지정하는 각 .xml 파일에는 고유한 마이그레이션 urlid가 있어야 합니다.

구성 요소 내에 충돌하는 규칙이 있을 경우 다른 모든 규칙보다 우선하는 <unconditionalExclude> 규칙을 제외하고 가장 한정적인 규칙이 적용됩니다. 규칙의 한정성이 동일하면 데이터가 마이그레이션되지 않습니다. 예를 들어 파일을 제외하고 동일한 파일을 포함하면 파일이 마이그레이션되지 않습니다. 각 구성 요소는 독립적으로 처리되므로 서로 다른 구성 요소 내에 충돌하는 규칙이 있을 경우 규칙은 서로 영향을 미치지 않습니다.

다음 예에서 mp3 파일은 마이그레이션에서 제외되지 않습니다. 이는 디렉터리 이름이 파일 확장명보다 우선하기 때문입니다.

<include>
     <objectSet>
          <pattern type="File">C:\Data\* [*]</pattern>
     </objectSet>
</include>
<exclude>
     <objectSet>
          <pattern type="File"> C:\* [*.mp3]</pattern>
     </objectSet>
</exclude>  

다음 예에서는 USMT가 <include> 및 <exclude> 규칙을 처리하는 방식을 설명합니다. 규칙이 서로 다른 구성 요소에 있는 경우에는 구성 요소가 동일한 마이그레이션 .xml 파일에 있거나 다른 파일에 있는지에 관계없이 결과 동작은 같습니다.

 

동일한 구성 요소에 다음 코드 포함 결과 동작 설명
  • 포함 규칙: <pattern type="File">C:\Dir1\* [*]</pattern>

  • 제외 규칙: <pattern type="File">C:\* [*.txt]</pattern>

C:에 있는 모든 .txt 파일을 포함하여 Dir1에 있는 모든 파일과 하위 폴더를 마이그레이션합니다.

<include> 규칙이 더 한정적이므로 <exclude> 규칙은 마이그레이션에 영향을 미치지 않습니다.

  • 포함 규칙: <pattern type="File">C:\Dir1\* [*]</pattern>

  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

C:\Dir1\Dir2와 해당 하위 폴더에 있는 .txt 파일을 제외하고 C:\Dir1에 있는 모든 파일과 하위 폴더를 마이그레이션합니다.

두 규칙이 모두 의도한 대로 처리됩니다.

  • 포함 규칙: <pattern type="File">C:\Dir1\* [*]</pattern>

  • 제외 규칙: <pattern type="File">C:\Dir1\ * [*.txt]</pattern>

C:\Dir1과 해당 하위 폴더에 있는 .txt 파일을 제외하고 C:\Dir1에 있는 모든 파일과 하위 폴더를 마이그레이션합니다.

두 규칙이 모두 의도한 대로 처리됩니다.

  • 포함 규칙: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

어떤 파일이나 폴더도 마이그레이션되지 않습니다.

규칙의 한정성이 동일하므로 <exclude> 규칙이 <include> 규칙보다 우선합니다.

  • 포함 규칙: C:\Dir1\* [*.txt]

  • 제외 규칙: C:\Dir1\Dir2\* [*]

Dir1에 있는 .txt 파일과 Dir2를 제외한 하위 폴더에 있는 .txt 파일을 마이그레이션합니다.

Dir2 또는 해당 하위 폴더에 있는 파일은 모두 마이그레이션되지 않습니다.

두 규칙이 모두 의도한 대로 처리됩니다.

  • 포함 규칙: C:\Dir1\Dir2\* [*]

  • 제외 규칙: C:\Dir1\* [*.txt]

Dir1과 Dir1의 모든 하위 폴더(Dir2 포함)에 있는 .txt 파일을 제외하고 Dir2에 있는 모든 파일과 하위 폴더를 마이그레이션됩니다.

두 규칙이 모두 의도한 대로 처리됩니다.

 

서로 다른 구성 요소에 다음 코드 포함 결과 동작 설명

구성 요소 1:

  • 포함 규칙: <pattern type="File">C:\Dir1\* [*]</pattern>

  • 제외 규칙: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

구성 요소 2:

  • 포함 규칙: <pattern type="File">C:\Dir1\Dir2\* [*.txt]</pattern>

  • 제외 규칙: <pattern type="File">C:\Dir1\* [*]</pattern>

C:\Dir1\Dir2\를 포함하여 C:\Dir1\에 있는 모든 파일과 하위 폴더를 마이그레이션합니다.

<unconditionalExclude> 규칙을 제외하고 다른 구성 요소에 있는 규칙은 서로 영향을 미치지 않습니다. 따라서 이 예에서는 구성 요소 1이 처리될 때 일부 .txt 파일이 제외되더라도 구성 요소 2가 처리될 때 이 파일이 포함됩니다.

구성 요소 1:

  • 포함 규칙: C:\Dir1\Dir2\* [*]

구성 요소 2:

  • 제외 규칙: C:\Dir1\* [*.txt]

C:\Dir1과 해당 하위 폴더에 있는 .txt 파일을 제외하고 Dir2에 있는 모든 파일과 하위 폴더를 마이그레이션합니다.

두 규칙이 모두 의도한 대로 처리됩니다.

구성 요소 1:

  • 제외 규칙: C:\Dir1\Dir2\* [*]

구성 요소 2:

  • 포함 규칙: C:\Dir1\* [*.txt]

Dir1과 하위 폴더에 있는 모든 .txt 파일을 마이그레이션합니다.

구성 요소 1에는 <include> 규칙이 포함되어 있지 않으므로 <exclude> 규칙은 처리되지 않습니다.

 

동일한 구성 요소에 다음 코드 포함 결과 동작 설명
  • 포함 규칙: HKLM\Software\Microsoft\Command Processor\* [*]

  • 제외 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

DefaultColor를 제외하고 HKLM\Software\Microsoft\Command Processor에 있는 모든 키를 마이그레이션합니다.

두 규칙이 모두 의도한 대로 처리됩니다.

  • 포함 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • 제외 규칙: HKLM\Software\Microsoft\Command Processor\* [*]

HKLM\Software\Microsoft\Command Processor의 DefaultColor만 마이그레이션합니다.

<include> 규칙이 <exclude> 규칙보다 더 한정적이므로 DefaultColor가 마이그레이션됩니다.

  • 포함 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • 제외 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

DefaultColor를 마이그레이션하지 않습니다.

규칙의 한정성이 동일하므로 <exclude> 규칙이 <include> 규칙보다 우선합니다.

 

서로 다른 구성 요소에 다음 코드 포함 결과 동작 설명

구성 요소 1:

  • 포함 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

  • 제외 규칙: HKLM\Software\Microsoft\Command Processor\* [*]

구성 요소 2:

  • 포함 규칙: HKLM\Software\Microsoft\Command Processor\* [*]

  • 제외 규칙: HKLM\Software\Microsoft\Command Processor [DefaultColor]

HKLM\Software\Microsoft\Command Processor 아래에 있는 모든 키와 값을 마이그레이션합니다.

<unconditionalExclude> 규칙을 제외하고 다른 구성 요소에 있는 규칙은 서로 영향을 미치지 않습니다. 따라서 이 예에서는 구성 요소 1이 처리될 때 개체가 제외되더라도 구성 요소 2가 처리될 때 이 개체가 포함됩니다.

<merge> 규칙이 없는 경우 레지스트리에 대한 기본 동작은 원본이 대상을 덮어쓰는 것입니다. 파일에 대한 기본 동작은 원본에 증분식으로 번호를 매겨 이름을 바꾸는 것입니다(예: OriginalFileName(1).OriginalExtension, OriginalFileName(2).OriginalExtension 등).

충돌이 발견될 경우 USMT는 가장 한정적인 <merge> 규칙을 선택한 다음 이 규칙을 적용하여 충돌을 해결합니다. 예를 들어 C:\* [*]에 대한 <merge> 규칙이 sourcePriority()로 설정되어 있고 C:\subfolder\* [*]에 대한 다른 <merge> 규칙이 destinationPriority()로 설정되어 있는 경우 destinationPriority() 규칙이 가장 한정적이므로 USMT는 이 규칙을 사용합니다.

원본 컴퓨터에는 다음 파일이 포함되어 있습니다.

  • C:\Data\SampleA.txt

  • C:\Data\SampleB.txt

  • C:\Data\Folder\SampleB.txt

대상 컴퓨터에는 다음 파일이 포함되어 있습니다.

  • C:\Data\SampleB.txt

  • C:\Data\Folder\SampleB.txt

다음 코드가 포함된 사용자 지정 .xml 파일이 있습니다.

<include> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</include> 

이 예에 대해 다음 표에서는 첫 번째 열의 코드를 사용자 지정 .xml 파일에 추가하는 경우 결과 동작에 대해 설명합니다.

 

다음 코드 지정 결과 동작
<merge script="MigXmlHelper.DestinationPriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</merge>

ScanState 중에 모든 파일이 저장소에 추가됩니다.

LoadState 중에 C:\Data\SampleA.txt만 복원됩니다.

<merge script="MigXmlHelper.SourcePriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\* [*]</pattern> 
   </objectSet> 
</merge> 

ScanState 중에 모든 파일이 저장소에 추가됩니다.

LoadState 중에 모든 파일이 복원되고 대상 컴퓨터에 있는 기존 파일을 덮어씁니다.

<merge script="MigXmlHelper.SourcePriority()"> 
   <objectSet> 
      <pattern type="File">c:\data\ [*]</pattern> 
   </objectSet> 
</merge> 

ScanState 중에 모든 파일이 저장소에 추가됩니다.

LoadState 중에 다음 동작이 발생합니다.

  • C:\Data\SampleA.txt가 복원됩니다.

  • C:\Data\SampleB.txt가 복원되고 대상 컴퓨터에 있는 기존 파일을 덮어씁니다.

  • C:\Data\Folder\SampleB.txt는 복원되지 않습니다.

기타 리소스

USMT XML 참조

표시: