Microsoft MVP성태의 닷넷 이야기
Windows: 141. 설치된 Windows로부터 설치 이미지를 만드는 방법 [링크 복사], [링크+제목 복사]
조회: 14757
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




... 31  32  [33]  34  35  36  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12796정성태8/21/20218298.NET Framework: 1099. C# 10 - (4) 상수 문자열에 포맷 식 사용 가능파일 다운로드1
12795정성태8/20/20218876.NET Framework: 1098. .NET 6에 포함된 신규 BCL API - 스레드 관련
12794정성태8/20/20218328스크립트: 23. 파이썬 - WSGI를 만족하는 최소한의 구현 코드 및 PyCharm에서의 디버깅 방법 [1]
12793정성태8/20/20219059.NET Framework: 1097. C# 10 - (3) 개선된 변수 초기화 판정파일 다운로드1
12792정성태8/19/20219489.NET Framework: 1096. C# 10 - (2) 전역 네임스페이스 선언파일 다운로드1
12791정성태8/19/20217891.NET Framework: 1095. C# COM 개체를 C++에서 사용하는 예제 [3]파일 다운로드1
12790정성태8/18/202110095.NET Framework: 1094. C# 10 - (1) 구조체를 생성하는 record struct파일 다운로드1
12789정성태8/18/20219112개발 환경 구성: 597. PyCharm - 윈도우 환경에서 WSL을 이용해 파이썬 앱 개발/디버깅하는 방법
12788정성태8/17/20217690.NET Framework: 1093. C# - 인터페이스의 메서드가 다형성을 제공할까요? (virtual일까요?)파일 다운로드1
12787정성태8/17/20217871.NET Framework: 1092. (책 내용 수정) "4.5.1.4 인터페이스"의 "인터페이스와 다형성"
12786정성태8/16/20219387.NET Framework: 1091. C# - Python range 함수 구현 (2) INumber<T>를 이용한 개선 [1]파일 다운로드1
12785정성태8/16/20217639.NET Framework: 1090. .NET 6 Preview 7에 추가된 숫자 형식에 대한 제네릭 연산 지원 [1]파일 다운로드1
12784정성태8/15/20217038오류 유형: 757. 구글 메일 - 아웃룩에서 메일 전송 시 Sending' reported error (0x800CCC0F, 0x800CCC92)
12783정성태8/15/20216671.NET Framework: 1089. C# - Indexer에 Range 및 람다 식을 이용한 필터 구현 [1]파일 다운로드1
12782정성태8/14/20216443오류 유형: 756. 파이썬 - 윈도우 환경에서 pytagcloud의 한글 출력 방법
12781정성태8/14/20218587오류 유형: 755. 파이썬 - konlpy 사용 시 JVM과 jpype1 관련 오류
12780정성태8/13/20216983.NET Framework: 1088. C# - 버스 노선 및 위치 정보 조회 API 사용을 위한 기초 라이브러리 [2]
12779정성태8/13/20218808개발 환경 구성: 596. 공공 데이터 포털에서 버스 노선 및 위치 정보 조회 API 사용법
12778정성태8/12/20216134오류 유형: 755. PyCharm - "Manage Repositories"의 목록이 나오지 않는 문제
12777정성태8/12/20217794오류 유형: 754. Visual Studio - Input or output cannot be redirected because the specified file is invalid.
12776정성태8/12/20217097오류 유형: 753. gunicorn과 uwsgi 함께 사용 시 ERR_CONNECTION_REFUSED
12775정성태8/12/202117194스크립트: 22. 파이썬 - 윈도우 환경에서 개발한 Django 앱을 WSL 환경의 gunicorn을 이용해 실행
12774정성태8/11/20218689.NET Framework: 1087. C# - Collection 개체의 다중 스레드 접근 시 "Operations that change non-concurrent collections must have exclusive access" 예외 발생
12773정성태8/11/20217831개발 환경 구성: 595. PyCharm - WSL과 연동해 Django App을 윈도우에서 리눅스 대상으로 개발
12772정성태8/11/20219336스크립트: 21. 파이썬 - 윈도우 환경에서 개발한 Django 앱을 WSL 환경의 uwsgi를 이용해 실행 [1]
12771정성태8/11/20217723Windows: 196. "Microsoft Windows Subsystem for Linux Background Host" / "Vmmem"을 종료하는 방법
... 31  32  [33]  34  35  36  37  38  39  40  41  42  43  44  45  ...