류짱:Beyond MySelf

인터넷이 안되는 환경의 서버에서 Livekd를 이용한 Full dump 수집 방법

인터넷이 안되는 환경의 서버에서 간혹 LiveKD를 이용해서 메모리 덤프 수집을 해야 하는 경우가 간혹 있는데 예전에는 해당 머신과
동일 빌드 버전의 OS를 인터넷  환경에 설치하거나 인터넷이 연결 된 동일 환경 OS에서 Windbg 설치 후 LiveKD를 이용하여 심볼을
다운 받고 그 심볼을 인터넷이 안되는 환경에 복사 후 Livekd를 이용하여 Full dump를 수집 하였습니다.
그런데 인터넷이 안되는 환경과 인터넷이 되는 환경의 같은 OS도 빌드 버전이 보안 업데이트 설치 여부에 따라 달라지는 경우가 많아
같은 OS의 심볼을 받아도 LiveKD가 실행 되지 않는 경우가 다반사 였습니다.

최근 서버에서 online 중에 덤프 수집이 필요하여 여러번 삽집을 하면서 keyboard 나 NMI 혹은 notmyfault로 덤프 수집을 해야 하나
고민하다가 우연찮게...블로그를 발견해서.. 얼마나 고맙든지.. (오래 됬는데 왜 이제서야 알게 되었을까요? ㅎㅎ)

Livekd를 이용한 덤프 수집 방법은 http://ryuchan.kr/145 에 오래 전에 정리 해 두었었는데... windbg 파일 다운로드 링크는 업데이트가
좀 필요 하네요^^

여튼 방법은 이렇습니다.

먼저 LiveKD를 이용해서 덤프를 수집 할 인터넷이 안되는 환경의 서버에서 Kernel32.dll, Ntdll.dll, ntoskrnl.exe 파일을 복사하여
인터넷이 되는 PC에 복사를 합니다.
아래 예에서는 인터넷이 되는 제 PC에 D:\Testsymbols\system32 폴더를 만들고 온라인 덤프 수집이 필요한 서버의 해당 파일을 복사
하였습니다.


제 PC에는 Windows debugging tool이 설치 되어 있고 Livekd 또한 미리 복사 되어 있기 때문에 명령 프롬프트를 실행 후 해당 폴더로
이동을 합니다. 그리고 아래와 같은 명령어를 입력 합니다.

symchk /if d:\testsymbols\system32\*.* /s srv*d:\testsymbols*http://msdl.microsoft.com/download/symbols

명령어를 실행 하면 아래와 같이 tessymbols 폴더에 3개의 .pdb 폴더가 다운로드 됩니다.

제 PC에 다운로드 된 3개의 *.pdb 폴더를 인터넷이 안되는 덤프 수집이 필요한 서버에 복사합니다.
해당 서버에도 미리 Windows debugging tool설치하고 Livekd를 복사 해 놓았기 때문에 c:\testsysmbols라는 폴더에 해당 파일을 복사 하였습니다.

해당 서버에서 명령프롬프트를 실행하여 Windows debugging tool이 설치 된 , Livekd가 복사 된 폴더로 이동하여 Livekd.exe를 실행합니다.

정상적으로 라이브 커널 디버깅이 연결 된 것이 확인 됩니다. 이제 full dump 수집을 위해서 아래 명령어를 실행하고 덤프가 수집 되는 것을 확인 합니다. 

덤프 수집이 완료되면 q 명령어로 kernel debugging 연결을 끊고 수집 된 덤프를 분석 합니다.

[참고 자료]
Online Kernel Memory Dump using LiveKd.exe
https://blogs.technet.microsoft.com/carlh/2009/11/30/online-kernel-memory-dump-using-livekd-exe/


Comment 0

LiveKD.exe를 이용하여 운영중인 시스템에서 Full Memory Dump 수집하는 방법

참고
아래 방법은 현재 운영중인 시스템에 Crash 등 어떠한 영향도 주지 않습니다. 단지 File I/O 가 많이 발생하여, Dump를 수집하는 동안 성능에 약간의 문제가 있을 수 있습니다. 참조하십시오.

준비사항
1. 아래 링크에서 Debugging 툴인 windbg (Debugging Tools for Windows)를 다운로드하여 설치를 합니다.
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx

C:\Program Files\Debugging Tools for Windows (x86) 폴더가 생성 됩니다.


참고
위 링크는 32Bit 용 windbg를 다운로드할 수 있습니다. 만약 문제의 시스템이 64Bit 시스템이라면, 아래 링크를 이용하십시오.

http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

2. 아래 링크에서 LiveKD.exe를 다운로드하신 후 C:\Program Files\Debugging Tools for Windows (x86)폴더에 복사해 넣습니다.
http://technet.microsoft.com/en-us/sysinternals/bb897415.aspx

3. 명령 프롬프트(cmd.exe)를 수행합니다. C:\ 루트로 이동합니다.

4. LivdKD 를 통해 특정 시스템의 Memory dump를 수집하기 위해서는 Public symbol을 캐쉬로 가져야 합니다. 따라서 아래와 같이 특정 폴더를 생성해 줍니다.
MD C:\Symbols

5. 아래 명령을 통해 위에서 생성한 폴더에 Symbol 이 캐쉬될 수 있도록 설정합니다.
CD C:\Program Files\Debugging Tools for Windows (x86)
Livekd -y SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
참고 : 위 명령을 처음 수행할 때, 웹에서 해당 시스템의 Symbol 테이블을 확인하고, 다운로드하기 때문에 조금 반응이 늦어질 수 있습니다.
수행 화면은 아래와 같습니다.
C:\Program Files\Debugging Tools for Windows (x86)
livekd -y SRV*c:\symbols*http://msdl.microsoft.com/download/symbols


 

  C:\Program Files\Debugging Tools for Windows (x86)>livekd.exe -y srv*c:\symbols*
http://msdl.microsoft.com/download/symbols\
LiveKd v5.0 - Execute kd/windbg on a live system
Sysinternals - www.sysinternals.com
Copyright (C) 2000-2010 Mark Russinovich and Ken Johnson
Launching C:\Program Files\Debugging Tools for Windows (x86)\kd.exe:
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:\WINDOWS\livekd.dmp]
Kernel Complete Dump File: Full address space is available
Comment: 'LiveKD live system view'
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols
\
Executable search path is:
Windows Server 2003 Kernel Version 3790 (Service Pack 2) UP Free x86 compatible
Product: LanManNt, suite: Enterprise TerminalServer
Built by: 3790.srv03_sp2_gdr.100216-1301
Machine Name:
Kernel base = 0x80800000 PsLoadedModuleList = 0x808a8e48
Debug session time: Sun Feb 13 11:34:57.897 17420 (UTC + 9:00)
System Uptime: 5 days 17:52:55.604
WARNING: Process directory table base 0280C000 doesn't match CR3 0F8F4000
WARNING: Process directory table base 0280C000 doesn't match CR3 0F8F4000
Loading Kernel Symbols
...............................................................
...............................................
Loading User Symbols
...........
Loading unloaded module list
...............
kd>


[전체 메모리 덤프 수집 방법]

1. LiveKD를 수행합니다. 만약 LiveKD가 수행 중일 때, "Execute KD again? (y/n)" 메시지에서 Y 를 선택하셔도 됩니다. 새로 LivdKD를 수행하려면 아래와 같이 수행합니다.

CD C:\Program Files\Debugging Tools for Windows (x86)
Livekd -y SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols

참고
LivdKD.exe 파일이 C:\Debuggers 폴더에 있기 때문에 위와 같이 명령 프롬프트 창에서 C:\Debuggers 폴더 아래에서 명령을 수행해야 합니다.

2. 시스템에 Crash 나 서비스 프로그램 등에 영향을 주지 않고 Full Memory Dump를 수집하기 위해 LiveKD세션에서 아래와 같이 명령을 수행합니다.
.dump /f /o X:\fulldump.dmp

참고
위 명령에서의 X: 드라이브는 현재 시스템의 Physical 메모리보다 큰 가용공간을 가져야 합니다.
즉, 실제 메모리가 8GB 라면, X: 드라이브의 여유 공간이 최소 8GB 이상이어야 합니다. 물론 fulldump.dmp 파일명과 X: 드라이브는 다른 것으로 변경이 가능합니다.

3. Dump 저장 프로세스가 모두 끝나면, Q 명령을 수행하여 LiveKD를 종료합니다.

감사합니다.

Comment 0