Microsoft MVP성태의 닷넷 이야기
Windows: 141. 설치된 Windows로부터 설치 이미지를 만드는 방법 [링크 복사], [링크+제목 복사],
조회: 14923
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

설치된 Windows로부터 설치 이미지를 만드는 방법

"Dell Venue 8 Pro 태블릿에 USB를 이용한 윈도우 운영체제 설치 방법"을 찾다가 알게 된 내용인데,

How To Image A Computer With Windows 10 Using dism
; https://jacobsalmela.com/2016/03/30/how-to-image-a-computer-with-windows-10-using-dism/

그 방법이 재미있어서 기록으로 남깁니다. ^^




우선, "설치된 Windows"를 얻기 위해 Hyper-V에 VM을 하나 만들고 윈도우를 설치합니다. (이 글에서는 x86을 기준으로 설명하고 "Windows 8.1 with Update x86" ISO 파일로 VM을 설치했습니다.)

그다음 아래의 명령어를 해당 VM 내에서 관리자 권한의 cmd.exe를 띄워 실행합니다.

cd C:\Windows\System32\Sysprep
sysprep.exe /generalize /shutdown

*** 주의 사항: 이 명령어는 윈도우 시스템을 설치 이전의 상태로 되돌리므로 절대로 실제 사용 중인 윈도우에서 sysprep 명령어를 내려서는 안 됩니다.

* "How To Image A Computer With Windows 10 Using dism" 글에서는 이 과정에서 unattended.xml 파일을 이용해 자동 설치를 구현하고 있습니다.
* 원 글에서는 unattended.xml 파일을 "C:\Windows\System32\Sysprep" 폴더에 복사해 두고, "sysprep.exe /generalize /oobe /unattend:Unattended.xml /shutdown"으로 명령을 내립니다.

위의 작업을 마치고 나면 VM은 종료될 테고 일단 그렇게 두시면 됩니다. 이것으로 "설치 이미지"를 구하는 방법이 끝났습니다. 위의 VM에 포함된 VHD 디스크를 보면 2개의 파티션이 생성되는데, 그 파티션을 그대로 wim 이미지로 구우면 되기 때문입니다.




이제 필요한 것이 PE 부팅 이미지 파일입니다. 이를 위해 ADK를 다운로드해서 설치해야 합니다.

Windows Assessment and Deployment Kit (Windows ADK) for Windows 8.1 Update 
; https://www.microsoft.com/en-US/download/details.aspx?id=39982

ADK가 설치된 컴퓨터에서 "Deployment and Imaging Tools Environment" 명령행 도구를 관리자 권한으로 실행한 후 다음의 명령을 내리면 PE 부팅 파일들이 마련됩니다.

copype x86 D:\WinPE\x86

원한다면 이때 생성된 "D:\WinPE\x86" 폴더의 내용에 다음과 같은 명령어를 통해 원하는 device driver를 추가하는 것도 가능합니다. (물론, 원하는 device driver가 없다면 이 과정을 생략해도 됩니다.)

Dism /Mount-Image /ImageFile:"D:\WinPE\x86\media\sources\boot.wim" /index:1 /MountDir:"D:\WinPE\x86\mount"

Dism /Add-Driver /Image:"D:\WinPE\x86\mount" /Driver:"C:\...your driver's INF file..."

Dism /Unmount-Image /MountDir:"D:\WinPE\x86\mount" /commit

위의 D:\WinPE\x86 폴더에 복사된 내용을 기반으로 이제 "부팅 가능한 USB"를 다음의 명령어로 만들 수 있습니다.

// USB 드라이브가 F인 경우
MakeWinPEMedia /UFD D:\WinPE\x86 F:

또는 "부팅 가능한 ISO 파일"로 만든 후 나중에 구울 수도 있습니다.

MakeWinPEMedia /ISO D:\WinPE\x86 D:\WinPE\WinPE.iso

이렇게 마련된 PE 부팅 이미지 파일로 sysprep을 실행했던 그 VM을 부팅시킬 수 있습니다. WinPE.iso 파일을 가상 머신의 DVD 드라이브로 연결해 주고 부팅 순서를 CD로 잡아줍니다. (즉, sysprep을 했던 그 VM에서 MakeWinPEMedia로 만든 이미지로 부팅이 되어야 합니다. sysprep을 했던 C 드라이브로 부팅하면 절대 안 됩니다.) 부팅하고 재빠르게 키를 눌러줘야 "CD"로 부팅이 됩니다.

정상적으로 winpe.iso 이미지로 부팅했으면 화면에는 X 드라이브로 연결된 명령행 창이 뜨면서 (x:\windows\system32) 초기 "wpeinit" 명령어가 수행됩니다.

이 명령행 창에서 sysprep을 했던 윈도우의 환경을 설치 가능한 wim 이미지 파일로 만드는 것이 가능합니다.

기본적으로 설치된 VM의 Disk 0에는 파티션이 2개("System Reserved"와 "Primary")가 있는데 이것을 그대로 wim 이미지 파일로 만들어 주는 것입니다. 이를 위해 우선 다음의 명령어로 각각의 파티션에 드라이브 문자를 할당해 줍니다.

diskpart
select disk 0

select partition 1
active
assign letter=r

select partition 2
active
assign letter=c
exit

보는 바와 같이 "System Reserved" 파티션을 R로, VM의 운영체제가 설치되어 있던 Primary 파티션을 C 드라이브로 설정했습니다.

그다음, 각각의 드라이브를 개별 wim 파일로 저장해 둘 텐데요. 이를 위해 여기서는 Hyper-V 호스트 측에 "share"라는 공유 폴더를 만들어 주고 이를 네트워크 드라이브로 연결하겠습니다.

net use j: \\169.254.141.222\share

그 후, 다음의 명령어로 각각의 드라이브를 wim 파일로 저장할 수 있습니다.

Dism /capture-image /imagefile:j:\w10reserved.wim /CaptureDir:r:\ /Name:system_reserved
Dism /capture-image /imagefile:j:\w10.wim /CaptureDir:c:\ /Name:c_drive

즉, R 드라이브를 w10reserved.wim 파일로, C 드라이브를 w10.wim 파일로 만들었습니다.




이걸로 모든 준비는 끝났습니다. 이제 원하는 PC에서 다시 "PE 부팅 이미지 파일"로 부팅을 해줍니다. 그럼 wpeinit 명령행 윈도우가 뜰 것이고 마찬가지로 대상 컴퓨터에 동일하게 2개의 파티션을 diskpart로 잡아줍니다.

diskpart
select disk 0
clean

create partition primary size=500
select partition 1
active
format quick fs=ntfs
assign letter=r

create partition primary
select partition 2
active
format quick fs=ntfs
assign letter=c

select partition 1
active
exit

그리곤, 네트워크 드라이브에 .wim 파일들을 보관해두었기 때문에 이를 연결하고,

net use j: \\server\share /user:username

wim 이미지 파일 2개를 동일하게 대상 PC에 복원하는 것입니다.

Dism /apply-image /imagefile:j:\w10reserved.wim /index:1 /ApplyDir:r:\
Dism /apply-image /imagefile:j:\w10.wim /index:1 /ApplyDir:c:\

* "How To Image A Computer With Windows 10 Using dism" 글에서는 "copy /Y j:\SetupComplete.cmd c:\windows\setup\scripts\SetupComplete.cmd" 명령어로 SetupComplete.cmd 파일을 복사하는 과정까지 포함합니다.
* SetupComplete.cmd는 "del /f %windir%\system32\sysprep\unattended.xml" 명령어만 포함하는 간단한 명령행 스크립트 파일입니다.
* 이 명령어를 통해 윈도우 설치 후 민감한 정보를 담고 있는 unattended.xml 파일을 자동으로 삭제하는 역할을 합니다.

이렇게 wim 이미지를 적용했으면 이제 USB 드라이브를 빼고 부팅하시면 sysprep 이미지 처리한 부팅으로 진입하게 되고 정상적으로 윈도우 설치를 마무리할 수 있습니다.




참고로, 제가 원하는 상황과 맞지 않았기 때문에 저도 위의 /apply-image 단계는 실습해 보지 않았습니다. 그래도 저런 식의 설치도 가능하다는 것이 알아둘 만 했습니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 5/3/2017]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  48  [49]  50  51  52  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12405정성태11/8/202010462.NET Framework: 965. C# 9.0 - (14) 부분 메서드에 대한 새로운 기능(New features for partial methods)파일 다운로드1
12404정성태11/7/202010958.NET Framework: 964. C# 9.0 - (13) 모듈 이니셜라이저(Module initializers)파일 다운로드1
12403정성태11/7/202011024.NET Framework: 963. C# 9.0 - (12) foreach 루프에 대한 GetEnumerator 확장 메서드 지원(Extension GetEnumerator)파일 다운로드1
12402정성태11/7/202011604.NET Framework: 962. C# 9.0 - (11) 공변 반환 형식(Covariant return types) [1]파일 다운로드1
12401정성태11/5/202010535VS.NET IDE: 153. 닷넷 응용 프로그램에서의 "My Code" 범위와 "Enable Just My Code"의 역할 [1]
12400정성태11/5/20207572오류 유형: 679. Visual Studio - "Source Not Found" 창에 "Decompile source code" 링크가 없는 경우
12399정성태11/5/202011198.NET Framework: 961. C# 9.0 - (10) 대상으로 형식화된 조건식(Target-typed conditional expressions)파일 다운로드1
12398정성태11/4/20209681오류 유형: 678. Windows Server 2008 R2 환경에서 Powershell을 psexec로 원격 실행할 때 hang이 발생하는 문제
12397정성태11/4/20209793.NET Framework: 960. C# - 조건 연산자(?:)를 사용하는 경우 달라지는 메서드 선택 사례파일 다운로드1
12396정성태11/3/20208185VS.NET IDE: 152. Visual Studio - "Tools" / "External Tools..."에 등록된 외부 명령어에 대한 단축키 설정 방법
12395정성태11/3/20209497오류 유형: 677. SSMS로 DB 접근 시 The server principal "..." is not able to access the database "..." under the current security context.
12394정성태11/3/20207918오류 유형: 676. cacls - The Recycle Bin on ... is corrupted. Do you want to empty the Recycle Bin for this drive?
12393정성태11/3/20208392오류 유형: 675. Visual Studio - 닷넷 응용 프로그램 디버깅 시 Disassembly 창에서 BP 설정할 때 "Error while processing breakpoint." 오류
12392정성태11/2/202012527.NET Framework: 959. C# 9.0 - (9) 레코드(Records) [4]파일 다운로드1
12390정성태11/1/202010669디버깅 기술: 173. windbg - System.Configuration.ConfigurationErrorsException 예외 분석 방법
12389정성태11/1/202010556.NET Framework: 958. C# 9.0 - (8) 정적 익명 함수 (static anonymous functions)파일 다운로드1
12388정성태10/29/20209950오류 유형: 674. 어느 순간부터 닷넷 응용 프로그램 실행 시 System.Configuration.ConfigurationErrorsException 예외가 발생한다면?
12387정성태10/28/202010703.NET Framework: 957. C# - static 필드의 정보가 GC Heap에 저장될까요? [3]파일 다운로드1
12386정성태10/28/202010968Linux: 34. 사용자 정보를 함께 출력하는 리눅스의 ps 명령어 사용 방법
12385정성태10/28/20208708오류 유형: 673. openssl - req: No value provided for Subject Attribute CN, skipped
12384정성태10/27/20209956오류 유형: 672. AllowPartiallyTrustedCallers 특성이 적용된 어셈블리의 struct 멤버 메서드를 재정의하면 System.Security.VerificationException 예외 발생
12383정성태10/27/202010925.NET Framework: 956. C# 9.0 - (7) 패턴 일치 개선 사항(Pattern matching enhancements) [3]파일 다운로드1
12382정성태10/26/20208549오류 유형: 671. dotnet build - The local source '...' doesn't exist
12381정성태10/26/202010179VC++: 137. C++ stl map의 사용자 정의 타입을 key로 사용하는 방법 [1]파일 다운로드1
12380정성태10/26/20207664오류 유형: 670. Visual Studio - Squash_FailureCommitsReset
12379정성태10/21/202010634.NET Framework: 955. .NET 메서드의 Signature 바이트 코드 분석 [1]파일 다운로드2
... 46  47  48  [49]  50  51  52  53  54  55  56  57  58  59  60  ...