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

비밀번호

댓글 작성자
 




[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13982정성태8/2/2025229개발 환경 구성: 753. CentOS 7 컨테이너 내에서 openssh 서버 호스팅
13981정성태8/1/2025297오류 유형: 971. CentOS 7에서 yum 사용 시 "Could not resolve host: mirrorlist.centos.org; Unknown error"
13980정성태7/31/2025360Linux: 119. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ (2)
13979정성태7/30/2025366Linux: 118. eBPF - BPF_PROG_TYPE_CGROUP_SOCK 유형에서 정상 동작하지 않는 BPF_CORE_READ
13978정성태7/29/2025451오류 유형: 970. 파일 복사 시 "Data error (cyclic redundancy check). (0x80070017)" 에러
13977정성태7/28/2025603닷넷: 2349. C# 14 - (5) 문자열 리터럴을 utf-8 인코딩으로 저장파일 다운로드1
13976정성태7/25/2025874닷넷: 2348. C# - 카카오 카나나 모델 + Microsoft.ML.OnnxRuntimeGenAI 예제파일 다운로드1
13975정성태7/23/20251013닷넷: 2347. C# 14 - (4) 형식 인자가 없는 제네릭 타입의 nameof 지원파일 다운로드1
13974정성태7/22/20251373닷넷: 2346. C# 14 - (3) Span 타입과 배열 간의 암시적 형변환파일 다운로드1
13973정성태7/21/20251256닷넷: 2345. C# - 배열 및 Span의 공변성파일 다운로드1
13972정성태7/21/20251407닷넷: 2344. C#의 Identity conversion 의미파일 다운로드1
13971정성태7/17/20251454닷넷: 2343. C# 14 - (2) 속성 구문에서 문맥 키워드로 추가되는 field 예약어파일 다운로드1
13970정성태7/17/20251392닷넷: 2342. C# 14 - (1) (예약)
13969정성태7/17/20251444닷넷: 2341. snap으로 설치한 .NET 리눅스 실행 환경
13968정성태7/16/20251330오류 유형: 969. lddtree - TypeError: 'type' object is not subscriptable
13967정성태7/16/20251857오류 유형: 968. snap으로 설치한 "dotnet run" 실행 시 "undefined symbol: _dl_audit_symbind_alt, version GLIBC_PRIVATE" 오류
13966정성태7/15/20252404디버깅 기술: 223. WinDbg - .kframes 명령어
13965정성태7/11/20251681오류 유형: 967. 디버깅 모드로 실행 시 "Could not find file 'C:\Program Files\IIS Express\Oracle.DataAccess.Common.Configuration.Section.xsd'" 예외
13964정성태7/10/20252360닷넷: 2340. C# - Win32 Multimedia Timer 주기파일 다운로드1
13963정성태7/8/20251904VS.NET IDE: 202. Visual Studio 2022 + Copilot 기본 사용법
13962정성태7/7/20251919스크립트: 79. 파이썬 - onnxruntime_genai에서 지원하지 않는 모델 사용
13961정성태7/5/20251641디버깅 기술: 222. WinDbg 분석 사례 - IISreset 시점에 w3wp.exe의 crash 발생
13960정성태7/3/20252808개발 환경 구성: 752. ProcDump - C/C++ 예외 코드 필터를 지정한 덤프 생성 [2]
13959정성태6/25/20251823오류 유형: 966. Ubuntu - ping: connect: Network is unreachable
13958정성태6/21/20252502닷넷: 2339. C# - Phi-4-multimodal 모델의 GPU 가속 방법 (ORT 사용)파일 다운로드1
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...