류짱:Beyond MySelf

지난번 포스팅때 말씀 드렸던 C게임 서버의 bloated registry 파일의 압축을 위해서 아래 KB를 참고해서 작업을 시도했지만

How to Compress "Bloated" Registry Hives

https://support.microsoft.com/en-us/help/2498915/how-to-compress-bloated-registry-hives

While there may be 3rd party tools available for this scenario, the process listed below could be followed to compress the affected hives.
1)  Boot from a WinPE disk. (http://technet.microsoft.com/en-us/library/cc766093(WS.10).aspx)
2)  Open regedit while booted in WinPe, load the bloated hive under HLKM.  (e.g. HKLM\Bloated)
3)  Once the bloated hive has been loaded, export the loaded hive as a "Registry Hive" file with a unique name.  (e.g. %windir%\system32\config\compressedhive)
      a)  You can use dir from a command line to verify the old and new sizes of the registry hives.
4) Unload the bloated hive from regedit. (If you get an error here, close the registry editor. Then reopen the registry editor and try again.)
5) Rename the hives so that you will boot with the compressed hive.
e.g.
c:\windows\system32\config\ren software software.old
c:\windows\system32\config\ren compressedhive software

역시나... 가이드는 가이드 일뿐... 아래 그림처럼 실패 되었습니다.



서버 점검 시간에 조금 여유가 있어서 당황하지 않고 다른 방법을 찾아 보다가 아래 블로그를 통해서  Sysinternal에서 제공하는 RU라는 Registry 프로그램을 이용하여 레지스트리의 압축이 가능 한 것을 확인하고.. 서버에 힘들게 해당 파일을 카피 한 후 작업을 시도 해 보았지만 역시나 실패 했습니다.

Unable to restart server due to registry bloat over 2GB

https://blogs.technet.microsoft.com/askperf/2014/10/22/unable-to-restart-server-due-to-registry-bloat-over-2gb/

블로그에는 RU를 이용해서 압축이 된다는 설명만 해 놓았지 어떤 환경에서 해야된다는 설명이 없어서 난감했지만.. 혹시나 제 PC에서는 되지 않을까 하는 생각에 게임 서버의 software 레지스트리 파일을 제 PC로 복사 해 와서 아래와 같이 명령어를 실행하였습니다.

RU -h software

운좋게도  레지스트리 파일의 압축이 정상적으로 진행 되었습니다. 우와^^

2G -> 35Mb

이에 압축이 성공 된 레지스트리를 게임 서버의 Windows\system32\Config폴더에 다른이름으로 복사 한 후
다시 해당 서버를 WinpE
로 부팅 후 ren 커멘드를 이용해서 레지스트리 이름 변경하였습니다.


그리고 서버를 재 시작 후 정상 부팅 하여  paged pool 사이즈를 확인 하니 하하하...
기존
2G 에서 현재 281M로 변경 됨 확인(게임서버 구동 중)


추가로 이전에 문제가 되었던  Windows update 파일도 설치가 잘 되었습니다.

마침내 시름 시름 앓고 있던 서버를 가까스로 살렸습니다.^^


[참고 자료]

How to Compress "Bloated" Registry Hives

https://support.microsoft.com/en-us/help/2498915/how-to-compress-bloated-registry-hives

 

Unable to restart server due to registry bloat over 2GB

https://blogs.technet.microsoft.com/askperf/2014/10/22/unable-to-restart-server-due-to-registry-bloat-over-2gb/

Comment 0

Windows Server 2008R2 기반 WinPE ISO 만드는 법

먼저 아래 사이트에서 he Windows® Automated Installation Kit (AIK) for Windows® 7을 다운로드 후 설치합니다.
https://www.microsoft.com/en-us/download/details.aspx?id=5753

다운로드 및 설치가 완료 되면 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Windows AIK로 이동해
Deployment Tools Command Prompt을 관리자 모드로 실행합니다.

명령 프롬프트가 실행 되면 copype.cmd amd64 c:\winpe 명령을 입력 후 실행합니다.


더보기


위 와 같은 로그를 확인 하고 위 명령어로 생성 된 C:\Winpe 폴더로 이동하여 아래 명령어를 실행합니다.
copy winpe.wim ISO\Sources\boot.wim

카피가 완료 되면 아래 명령어를 실행하여 ISO 파일을 만듭니다.

더보기

 

정상적으로 생성 되었다는 로그가 확인이 되면 생성 된 ISO파일을 이용하여 OS를 부팅 합니다.

아래 그림은 VMware에서 운영 중인 Windows Server 2008R2를 방금 생성한 WinPE로 부팅 하는 화면 입니다.
VMWare에서 ISO로 부팅하는 방법은 따로 설명드리지 않겠습니다.

ISO로 부팅을 하기 위해서 화면에서 처럼 아무 키나 누르면 아래 그림 처럼 원래 설치 된 OS가 아닌
WinPE로 부팅이 됩니다.

Windows Server 2008R2로 만든 WinPE이기 때문에 아래 처럼 Windows 7과 동일한 로그온 하면을 볼 수 있습니다.

부팅이 완료 되면 아래와 같이 CMD가 자동으로 시작 됩니다.

명령프롬트에 커멘드 입력이 가능 해지면 regedit 와 같은 커멘드를 실행 해서 기존 OS의 레지스트리 등을 hive 하거나
다른 작업을 합니다.


[참고 자료]

Best Practices for Recovering Windows Server 2008, Windows Server 2008 R2, Windows 7, and Windows Vista

https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Tivoli%20Storage%20Manager/page/Best%20Practices%20for%20Recovering%20Windows%20Server%202008,%20Windows%20Server%202008%20R2,%20Windows%207,%20and%20Windows%20Vista


감사합니다.

Comment 0

최근 C게임의 게임 서버에서 게임 서버 프로세스가 얘기치 않게 종료되는 장애가 발생하여  담당자의 요청으로 해당 서버를 살펴 보니 시스템이 시작 된지 얼마 되지 않았음에도 paged pool의 사용률이 매우 높았습니다.
담당자에게 물어보니 게임서버 프로세스가 종료 된 시점이 주말, 사용자가 그나마 가장 많은 시점이었고 물리 메모리가 90%이상 사용중이었으며 리소스 부족으로 게임 프로세스가 얘기치 않게 종료 되었다고 하여 아무래도 Paged pool이 2G이상의 물리 메모리를 사용하고 있어서 게임프로세스에 추가로 할당 할 메모리기 부족했었던 것 같아서 먼저 paged pool의 사이즈가 2G이상인  원인을 찾아보기로 했습니다.

인터넷이 안되는 서버라 Windows Debugging tool과 Sysinternals에서 제공하는 livekd를 설치 후 해당 서버에 필요한 MS Public symbol을 복사 한 후 Livekd를 이용해서 paged pool의 사용률 및 pool tag를 확인 해보니  "CM31"이라는 Pool tag가 약 1.95G 정도의 Paged pool을 사용하고 있었고 해당  "CM31" pool tag는 Windows registry에서 사용하는 것임을 알게 되었습니다.

이에 해당 서버의 Windows\system32\config 폴더에서 레지스트리 파일을 확인 해보니 software 파일의 사이즈가 1.95G
Paged pool 메모리에는 레지스트리 파일이 로드 되기 때문에... 해당 서버의 paged pool의 사용량은 높을 수 밖에 없었던... ㅎㅎ

Pushing the Limits of Windows: Paged and Nonpaged Pool
https://blogs.technet.microsoft.com/markrussinovich/2009/03/10/pushing-the-limits-of-windows-paged-and-nonpaged-pool/
The largest consumer of paged pool, at least on Windows Vista and later, is typically the Registry, since references to registry keys and other registry data structures are stored in paged pool. The data structures that represent memory mapped files, called sections internally, are also stored in paged pool.

서버를 좀더 살펴 보니 Windows update 또한 2014년 이후 계속 실패되고 있어서.. 큰맘 먹고 해당 서버를 살려 보기로 하였습니다. ㅎ
이번 포스트팅에서는 우선 paged pool의 사용률이 tag를 확인 하는 방법을 설명하고 레지스트리 압축 후 paged pool 사이즈의 변경과 Windows update까지 되게끔 하여 해당 서버를 살려 낸 방법은 다음 포스팅에 소개 하겠습니다.

Livekd와 Windbg을 이용한 Page pool 확인 방법
[환 경]
OS : Windows Server 2008R2 SE on VMWare
Physical Memory : 12G

[증 상]

1. 게임 프로세스의 얘기치 않은 종료 발생

2. Paged pool의 사용량이 동일 환경의 다른 서버들보다 매우 높음

3. Windows update 실패

[Livekd와 Windbg를 이용한 Paged pool 상세 확인 방법]

우선 paged pool의 사용률이 높은 서버에 Windows debugging tool을 설치하고 liveked를 복사합니다.
그리고  p 해당 서버는 인터넷이 안되는 환경이기 때문에 이전에 포스팅한 적이 있는"인터넷이 안되는 환경의 서버에서 Livekd를 이용한 Full dump 수집 방법"(http://ryuchan.kr/510)에 소개 한 것처럼  paged pool의 사용률이 높은 서버의 system32폴더에서 Kernel32.dll, Ntdll.dll, ntoskrnl.exe 3개의 파일을 복사하여 인터넷이 되는 Windows debugging tool이 설치 된 PC로 옮긴 후 해당 pc에서 아래와 같이 symchk 명령어를 실행해서 public symbol을 다운로드 받은 후 해당 파일들을 livekd를 실행 서버로 다시 옮깁니다.

명령 프롬프트를 관리자 권한으로 실행하고 Windows debugging tool이 설치 된 폴더로 이동하여 미리 복사 해 놓은 livked 커멘드를 심볼을 fix하는 명령어와 함께 실행 합니다.

livekd -y D:\sytem_sys32

위 명령어 실행 후 정상적으로 로컬 심볼이 로드 되면 아래와 같이 !poolused /t10 4 명령어를 실행합니다.

해당 명령어를 실행하면 아래와같이 paged pool의 사용률이 가장 높은 10개의 pool tag와 함께 사용량을 확인 할 수 있습니다.

아래 그림에서 학인 되는 것처럼 CM31이라는 pool tag가 약 1.95G의 메모리를 사용하고 있습니다.

CM31 tag는 레지스트리가 사용하는 tag임을 확인하고 실제 해당 서버의 레지스트리 파일을 확인 해보니 아래와 같이 software 레지스트리 파일의 사이즈가 1.95G가 이상입니다.

추가로 Windows update도 2014년 이후에 계속 설치가 실패되고 있어서 해당 서버의  CBS를 로그를 살펴 보았습니다.

CBS 로그를 보니 아래와 같이 시스템 리소스  오류 메시지가 발생하고 있네요. 흐흐흐.


[조치 방법]

아무래도 손상된 소프트웨어 레지스트리와도 관련이 있는 듯해서 해당 레지스트리를 Fix 가 필요 해 보여서 아래 KB를 참고하여 레지스트리 파일을 압축 하려고 하였지만 실패 하였습니다.
How to Compress "Bloated" Registry Hives
https://support.microsoft.com/en-us/help/2498915/how-to-compress-bloated-registry-hives
그러나  다행히도 다른 방법을 이용해서 겨우 레지스트리를 압축을 성공하여 Paged pool 메모리도 정상사이즈로 변경 되었고
추가로 업데이트도 성공적으로 진행하였습니다.

레지스트리의 Fix 에 관한 자세한 내용은 다음 포스팅(http://ryuchan.kr/533)을 참고 하십시오^^


[참고 자료]

Debugging Tools for Windows (WinDbg, KD, CDB, NTSD)
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/

인터넷이 안되는 환경의 서버에서 Livekd를 이용한 Full dump 수집 방법
http://ryuchan.kr/510

LiveKd v5.62
https://docs.microsoft.com/en-us/sysinternals/downloads/livekd

감사합니다.

Comment 0

C드라이브의 공간을 여유있게 할당 하지 않은 가상화로 운영 중인 Windows Server 2008R2 게임서버들의 디스크 공간확보를 위해서 아래 블로그를 이용해서 Windows update 관련 파일들을 삭제하곤 하였습니다만......
How to Clean up the WinSxS Directory and Free Up Disk Space on Windows Server 2008 R2 with New Update
https://blogs.technet.microsoft.com/askpfeplat/2014/05/13/how-to-clean-up-the-winsxs-directory-and-free-up-disk-space-on-windows-server-2008-r2-with-new-update/
위 방법은
Kb2852386 설치 후 Windows Feature에서 Desktop experience를 설치 해야했고시스템의 재 시작도 필요하여 많은 번거로움이 있었습니다.

이에 다른 방법을 찾아 보다가 최근에 아래와 같은 방법을 찾아서 실 서비스에 적용해 보았으며 문제 없이 동작 하였으니 참고 하시기 바랍니다.

아래 소개 해 드리는 방법은 동일하게 Cleanmgr을 사용하는 것입니다만 Kb2852386Desktop experience를 설치 하지 않은 상태에서 Cleanmgr를 실행하여 불필요 파일의 삭제가 가능 하므로 현재 실행 중인 서버에서 바로 적용이 가능하다는 장점이 있습니다.
물론 파일 삭제 후 재시작은 한번 필요 하지만요..
자세한 방법은 아래와 같습니다.

[Windows Server 디스크 용량 확보 방법]
- 대상 서버 : Windows Server 2008R2

- 상세 방법

먼저 용량이 부족한 서버에 로그온을 합니다.  아래 폴더 위치로 이동하여 cleanmgr.exe 파일을 해당 서버의 c:\windows\system32 폴더에 복사 합니다.

C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr_31bf3856ad364e35_6.1.7600.16385_none_c9392808773cd7da\



다음으로 아래 폴더로 이동하여 cleanmgr.exe.mui 파일을 해당 OS의 설치 언어를 확인하고 c:\windows\system32\(en-us or ja-jp)  OS의 언어에 맞는 폴더에 cleanmgr.exe.mui를 복사합니다. 

C:\Windows\winsxs\amd64_microsoft-windows-cleanmgr.resources_31bf3856ad364e35_6.1.7600.16385_ja-jp_e89ba9cb6f9dcbc3\

ex) English

 

Ex) Japanese



위 두 파일의 복사가 완료 되면 관리자 권한으로 명령프롬프트를 실행 한 후 cleamgr.exe 명령어를 실행 한 후 삭제가 가능한 Windows update 관련 파일들을 삭제하고 시스템을 재 시작 합니다.



만약 작업을 하려는 서버에 위 두 폴더가 존재 하지 않는다면 아래 hotfix를 설치 후위 방법을 진행 하시면 됩니다. (핫픽스 설치 재 시작 필요..-__-)

Disk Cleanup Wizard addon lets users delete outdated Windows updates on Windows 7 SP1 or Windows Server 2008 R2 SP1
http://support.microsoft.com/kb/2852386

그리고 Windows Server
2012R2의 경우에는 기본적으로 드라이브 등록 정보에 Disk cleanup이 제공 되므로 해당 등록정보에서 Disk Cleanup 클릭 후 Windows update cleanup 체크 하시고 삭제 진행 후 시스템 재 시작하면 됩니다.


만약  Disk Cleanup 이 보이지 않는다면 아래 블로그를 통해서 확인 가능 합니다만 dism 명령어를 이용해서 용량 확보가 가능하니 참고 하시기 바랍니다.
How to: Disk Cleanup in Windows Server 2012 (R2) – DISM
https://www.saotn.org/windows-server-2012-r2-disk-cleanup-dism/

[참고 자료]
Disk Cleanup option on drive’s general properties and cleanmgr.exe is not present in Windows Server 2008 or Windows Server 2008 R2 by default
https://technet.microsoft.com/en-us/library/ff630161(WS.10).aspx


감사합니다.


Comment 0

테스트 환경의 시스코 UCS 블레이드에  Windows Sever 2016 를 설치  Hyper-V Role 인스톨 후 최근 릴리즈 된 Window Server 2016 insider preview 16257을 Guest VM 으로 설치하고 해당 VM에 Windows Subsystem for Linux (WSL) 설치 후 Ubuntu를 설치 하는 방법을 정리합니다.
아래 MS 사이트에 설명이 잘 되어 있지만 저의 경우에는 호스트 머신과 Window Server 2016 insider preview  VM이 인터넷이 안되는 환경이라 Hyper-v 호스트 서버에 Window Server 2016 insider preview VM을 설치하고 인터넷이 되는 환경에서 우분투를 다운 받고 해당 파일을 VM으로 복사후 설치 하였으니 참고 부탁 드립니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server

[Window Server 2016 inside preview 16257버전에 Ubuntu 설치 하기]
1. 먼저 Hyper-v 호스트 서버에 Window Server 2016 inside preview 16257 설치 ISO파일을 다운로드 후 VM을 설치 합니다.
   VM 설치 방법은 워낙 간단하고 많이 알려져 있어서 간단하게 축약합니다.^^

Window Server 2016 inside preview 16257 Datacenter 버전을 선택하고 설치를 완료 합니다.

설치가 완료되면 패스워드 설정 후 해당 머신을 로그온 하여 IP 할당 및  Remote Management 등의 세팅을 완료 합니다.
Configure a Server Core installation of Windows Server 2016 with Sconfig.cmd
https://docs.microsoft.com/en-us/windows-server/get-started/sconfig-on-ws2016

그리고 Powershell을 실행 후 설치 된 VM의 버전을 확인 후

아래와 같은 커멘드로 Windows-subsystem-Linux Feature를 설치 합니다.

 

Windows-subsystem-Linux Feature의 설치가 완료되면 해당 VM은 인터넷이 안되는 환경이기 때문에 인터넷이 가능한 PC나 서버에서
Ubuntu설치 파일을 다운로드 합니다.
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server
download Ubuntu app
Ubuntu

파워셀로 다운로 예

다운로드 한 Ubuntu설치 파일을 Hyper-v 호스트에 복사 후 해당 파일을 copy-vmfile 명령어를 이용해서 해당 VM으로 복사 합니다

VM에 copy된 Ubuntu 압축 파일을 폴더를 생성 한 후 expand-archive 명령어를 이용해서 압축을 해제 합니다.

압축을 푼 후 해당 폴더로 이동하여 Ubuntu.exe 파일을 실행하여 인스톨을 진행합니다.

인스톨이 완료 되면 root 패스워드를 입력하고 정상 동작 하는지 확인을 합니다.

SSH 커멘트를 이용해서 해당 VM의 gateway인 시스토 스위치에도 접속을 해 보고

Top 커멘드로 메모리 리소스 사용률도 확인하고

lscpu 커멘드로 CPU의 상태와 lsb_release -a 커멘드로 설치 된 우분투의 버전도 확인 해 보았습니다.

WSL의 동작 방식을 공부 좀 하고 포스팅 후
그 다음엔 해당 머신에 Ansible을 설치하고 구성 하고 공유해보겠습니다.

Usng Ansible through Windows 10's Subsystem for Linux
https://www.jeffgeerling.com/blog/2017/using-ansible-through-windows-10s-subsystem-linux

Windows Support
http://docs.ansible.com/ansible/latest/intro_windows.html

감사합니다.

[참고 자료]
Windows Server 2016 Installation Guide
https://msdn.microsoft.com/commandline/wsl/install-on-server


Copy-VMFile
https://technet.microsoft.com/en-us/itpro/powershell/windows/hyper-v/copy-vmfile

Details on How Linux Runs Natively on Windows
https://www.infoq.com/news/2016/04/linux-windows

Windows Subsystem for Linux: Architectural Overview
https://channel9.msdn.com/Blogs/Seth-Juarez/Windows-Subsystem-for-Linux-Architectural-Overview

Comment 0

조직에서 WSUS를 이용 하고 있다면  WUinstall이라는 툴을 이용하면 Windows update를 좀더 편하게 할 수 있습니다.
해당 프로그램을 작업 스케줄로 등록하여 자동으로 업데이트 파일 다운로드 및 설치, 재 시작이 가능 하며 ,
psexec를 이용한다면
작업 스케줄 등록이 아니더라도 Remote 서버의 업데이트를 관리 서버 한 대에서 일괄적으로 진행 할 수 있습니다.

WUinstall 프로그램은 아래사이트에서 다운로드가 가능 한데 현재 제공하는 버전은 Free Trial 과 구매 버전 밖에 없습니다.
https://wuinstall.com/

최신 Free trial 버전의 경우 일정 기간이 지나면 무료 이용이 불가능 합니다만 구글링을 조금해서 약간 오래 된 
Wuinstall 1.x 버전을 구하신다면 옵션에 제약이 있긴 하지만 기본적으로 업데이트를 search, download, install,reboot 하는 것이
가능 하니 굳이 최신 버전이 필요하지 않다면 조금의 구글링으로 이전 버전을 다운로드 후 테스트 해 보시기 바랍니다.

예전에는 아래 그림 처럼 Free 버전과 Pro버전으로 제공 되었는데 이게  Free Trial 버전과 구매 버전으로 바뀐 것 같습니다.


Wuinstall을 이용해서 Windows update를 작업 스케줄에 등록하여 업데이트의 설치 및 재 시작을 하는 상세 방법은 아래와 같습니다.

먼저 Wuinstall을 다운로드 받아 적당한 곳에 압축을 풉니다. 그럼 아래 그림에서 처럼 Wuinstall.exe 파일과 관련 문서 폴더가 있습니다. 



Wuisntall.exe파일을 적당한 곳에 옮겨 놓고 작업 스케줄 등록을 위한 스크립으를 만듭니다. Wuinsall의 이용 방법은
다운로드 받은 폴더의 docs를 이용하시면 됩니다.

cmd /c c:\tools\wuinstall\WUInstall.exe /install /reboot 10 >> c:\tools\wuinstall\insall.log 2>>&1

위 커멘드를 update.cmd로 저장합니다.

작업 스케줄을 실행하고 작업 스케줄을 실행할 계정과 권한을 적용하고 작업 스케줄 이름을 입력합니다.
만약 로그파일을 로컬이 아닌 원격 서버의 공유 폴더에 저장하고 싶을 경우에는 system 계정이 아닌 별도
계정을 적용하시면 됩니다만 해당 계정이 반드시 작업 스케줄이 실행되는 서버의 local admin 그룹에 포함 되어 있어야
Windows update가 가능 하니 참고 하시기 바랍니다.

Action탭에서 위에서 만든 실행 할 스크립트를 선택후 적용합니다.

스크립트와 작업 스케줄에서 정상 등록하는지 실행을 해 봅니다.
이 부분은 주의가 필요한데 최소 스크립트를 만들 때 위 에서처럼 /install 옵션이 아닌 /search 옵션만
준다면 search만 하므로 테스트가 용이하니 참고 하십시오.

위 스크립트처럼 install까지 테스트가 필요하다면 반드시 테스트 환경에서^^


여튼 위 작업을 실행하게 되면 로그를 통해서를 wuinstall이 /insall과 /reboot 10 옵션으로 실행 된 것을 확인 할 수 
있습니다.

미리 적영 되어 있는 WSUS를 찾아서 자동으로 업데이트를 시작하고 업데이트의 설치가 완료되면 10초 후 시스템을
재 시작 합니다.



테스트가 잘 되었다면 Trigger를 통해서 점검과 같은 특정 시간에 예약 스케줄을 등록하고 업데이트를 진행하시면 됩니다.


참고로 작업 스케줄을 각 서버마다 등록하고 한대의 서버에서 파워셀로 해당 작업을 실행하는 커멘드를 실행하거나
혹은 Psexec를 이용해서 특정 서버에서 원격 서버의 Windowus update도 가능하니 자세한 내용은 메뉴얼을 참고 하시기 바랍니다.

고맙습니다.

[참고자료]
Wuinstall
https://wuinstall.com/

Automatically updating a new windows installation
https://www.experts-exchange.com/articles/6852/Automatically-updating-a-new-windows-installation-scripted.html


Comment 0

인터넷이 안되는 환경의 서버에서 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

Windows Server 2012R2 로 구성 된 클러스터 된 파일 서버에서 Nonpaged Pool 사용률이 비 정상적으로 높아
어떤 녀석이 많은 메모리를 사용 중인지 확인 하기 위해서 Livekd를 이용해서 라이브 디버깅을 해 보았습니다. 

[환 경]
 OS : Fail Over Cluster File Server on Windows Server 2012R2

[증 상]
 Nonpaged Paginng Pool의 메모리 사용률이 비 정상적으로 높앞으며 시스템 프로세스가 사용하는 핸들 수 도 2만이 
 넘었음.


[확인 사항]

  • 파일 서버 이기 때문에 오픈 된 파일이나 연결 된 사용자 사세션이 많은 지 확인 해 보았으나 연결 된 세션이 많지 않았음
  • 각 노드의 TCP 커넥션 수 확인

  

원인 분석을 위해서
Windows debugging tool 설치 후 해당 설치 디렉터리에 Livekd 를 복사한다.

  

디버깅을 위한 심볼 Fix를 위해서

파일 서버에서 MS 심볼 서버로 접근 할 수 없기 때문에 로컬 컴퓨터(Windows 8.1)에서 widbg를 실행 후 덤프를 하나 열고
심볼을 받아서 해당 심볼 중 아래 두 폴더를 라이브 디브깅을 할 폴더로 복사한다.
 



분석을 진행 할 서버에서 명령 프롬프트를 이용해서 Windows debugging 폴더로 이동하여
Livekd -y c:\symbols 

명령어 입력 후
정상적으로 로컬 디비깅이 실행 되면 리소스 확인에 필요한 커멘드를 이용해서 리소스 사용률 확인
   

0: kd> !vm 4

*** Virtual Memory Usage ***

Physical Memory: 6288149 ( 25152596 Kb)
Page File: \??\C:\pagefile.sys
Current: 26214400 Kb Free Space: 25872832 Kb
Minimum: 26214400 Kb Maximum: 75497472 Kb
unable to get nt!MmSystemLockPagesCount
Error reading free nonpaged PTEs 0000000000000004
Available Pages: 1703176 ( 6812704 Kb)
ResAvail Pages: 2875193 ( 11500772 Kb)
Locked IO Pages: 0 ( 0 Kb)
Free System PTEs: 59377 ( 237508 Kb)
Free NP PTEs: 0 ( 0 Kb)
Modified Pages: 8080 ( 32320 Kb)
Modified PF Pages: 8089 ( 32356 Kb)
NonPagedPool 0 Used: 1455190 ( 5820760 Kb)
NonPagedPool 1 Used: 1651617 ( 6606468 Kb)
NonPagedPool Usage: 3250905 ( 13003620 Kb)
NonPagedPool Max: 4294967296 (17179869184 Kb)
PagedPool 0 Usage: 147291 ( 589164 Kb)
PagedPool 1 Usage: 42232 ( 168928 Kb)
PagedPool 2 Usage: 35308 ( 141232 Kb)
PagedPool Usage: 224831 ( 899324 Kb)
PagedPool Maximum: 4160749568 (16642998272 Kb)
Shared Commit: 348374 ( 1393496 Kb)
Special Pool: 0 ( 0 Kb)
Shared Process: 11828 ( 47312 Kb)
PagedPool Commit: 224941 ( 899764 Kb)
Driver Commit: 55834583195 (223338332780 Kb)
Committed pages: 4696802 ( 18787208 Kb)
Commit limit: 12841749 ( 51366996 Kb)

Nopaged Pool을 가장 많이 사용하는 top5 Pool tag 확인 

0: kd> !poolused /t5 2

Sorting by NonPaged Pool Consumed
Pool Used:
NonPaged Paged

Tag Allocs Used Allocs Used

MPP. 49781288 10354777664 0 0 UNKNOWN pooltag ' MPP', please update pooltag.txt
VoSm 3689 240181440 0 0 Bitmap allocations , Binary: volsnap.sys
Mdl 81341 170719024 0 0 Io, Mdls
ConT 387 140668928 0 0 UNKNOWN pooltag 'ConT', please update pooltag.txt
Cont 1112 106383968 0 0 Contiguous physical memory allocations for device dr
TOTAL 51007260 11496509728 604302 758159552


MPP 풀태그를 사용하는 시스템 드라이버 확인
   

C:\Windows\System32\drivers>findstr /l /m MPP *.sys

afd.sys
ClusDisk.sys
CsvFlt.sys
CsvFs.sys
ds4dsm.sys
ds4utm.sys
dxgkrnl.sys
FWPKCLNT.SYS
http.sys
mup.sys
ndis.sys
ndiswan.sys
pacer.sys
rassstp.sys
sdstor.sys
SerCx.sys... 등등


대부 분 MS에서 제공하는 드라이브 이나 Ds4dsm.sys와 Ds4utm.sys만 IBM 에서 제공한 모듈로 해당 모듈의 최신 버전 확인 필요
추가로 서치를 좀 해보니 해당 모듈에서 메모리 릭이 발생 한 사례가 있네요.

http://www-01.ibm.com/support/docview.wss?uid=ssg1S1005069


[참고자료]

http://ryuchan.kr/145

http://ryuchan.kr/344

http://blogs.technet.com/b/askperf/archive/2011/09/23/getting-to-know-the-mmst-pool-tag.aspx

https://windowsarchitecture.wordpress.com/2015/01/12/windows-2012-r2-poolmon/

   

   

   

  

Comment 0

Domain admin 패스워드 리셋 방법 

ERD 커멘드를 이용해서 로컬 admin의 패스워드를 리셋 하는 것은 알고 있었고 실제로 몇 번 변경을 해봤습니다만 
도메인 admin의 패스워드를 변경 할 수 있는 방법은 없는 것으로 알고 있었는데.. 그게 아니었네요.
지인(?)이 운영하는 회사의 AD+ SQL cluster 2대 구성 된 서버의 domain admin 패스워드가 분실 되 도움을 요청하여
방법을 찾다가 보니 아래와 같이 아주 쉽게 domain admin의 패스워드 리셋이 가능 하더군요..

방법은 아래와 같습니다.

먼저 Window Server 2008 R2 설치 CD를 이용해서 서버를 부팅하여 부팅 중 아래와 같은 화면이 나오면
Repair your computer를 클릭 합니다.

 시스템 복구 옵션 팝업창에서 현재 서버의 OS와 Disk가 선택 된 것을 확인하고 다음을 클릭합니다.

 시스템 복구 옵션 화면에서 명령 프롬프트를 클릭 합니다.

명령 프롬프트가 시작 되면 기존 OS가 로드 된 D: 드라이브로 이동하여 아래의 명령어를 실행하여 utilman.exe 파일을 백업 합니다..
move d:\windows\system32\utilman.exe d:\windows\system32\utilman.exe.bak

Umtiman.exe 파일의 백업이 완료 되면 아래의 명령어를 실행하여 Cmd.exe를 utilman.exe로 copy 합니다. 
Copy d:\windows\system32\CMD.exe d:\windows\system32\utilman.exe

 카피가 완료 되면 시스템을 재 시작 합니다.

 시스템이 재 시작 되면 로그온 화면에서 아래 접근성 아이콘을 클릭 합니다.

접근성 아이콘 클릭 시 명령 프롬프트가 실행 되면 net user 명령어를 이용하여 Domain admin의 패스워드를 변경 합니다.

 

패스워드 변경이 완료 되면 로그온 화면에서 Ctntrl+Alt+Del 를 실행 후 변경 된 패스워드로 로그온을 합니다.

 로그온이 완료 되면 C:\windows\system32폴더로 이동하여 utilman.exe를 삭제 합니다.

그리고 utilman.exe.bak를 원래 이름인 utilman.exe로 변경 합니다.

만약 utilman.exe.bak의 이름 변경시 권한 문제로 변경 할 수 없다는 메시지가 팝업 된다면 설치 CD로 부팅 후 복원 모드에서 파일 이름을 변경 하시기 바랍니다.

   

 이름 변경 시 권한이 없다는 메시지 발생시 설치 CD로 부팅 후 복원 모드에서 파일 네임을 변경 하시면 됩니다.

감사합니다.

[참고자료]
ERD Commander를 이용한 패스워드 복구 방법
http://ryuchan.kr/55

http://www.bursky.net/index.php/2012/04/reset-domain-administrator-password-windows-server-2008/

http://www.howtogeek.com/106333/how-to-reset-your-forgotten-domain-admin-password-on-server-2008-r2/

 

Comment 0

이런저런 테스트를 위해서 Hyper-V 호스트에 가상 머신을 운영하기 위해서 MS 다운로드 센터를 통해서 VHD를 다운받아서 가상 머신을 생성하는데.... 정품 인증을 받지 않을 경우 한 시간에 한번씩 아래와 같은 메시지와 함께 가상 머신이 종료 된다는 것입니다.
매우 불편하지요.. 뭔가 집중해서 하고 하고 있는데 매 시간마다 가상머신이 종료 되니 말입니다.

물론 가상 머신을 ISO나 CD를 통해서 설치하고 정품 인증을 받을 수 있다면 아무런 문제가 되지 않겠지만 테스트 목적으로 단 기간 사용할 경우 그리고 빠른 설치가 필요 할 경우에는 VHD 파일을 다운 받아야 하니.......^^




한 시간에 한 번씩 WLMS 이벤트를 발생시키고 시스템을 종료 시키는 서비스를 찾아 강제로 종료도 해보았습니다.VM이 실행 된 후 해당 서비스의 프로세스를 강제로 종료 시켰더니 OS가 정상적으로 동작을 하지 않는 현상이.....-______--;

그래서 좀더 Search를 해 보니 생각보다 쉬운 방법으로 VM이 한 시간에 한 번씩 종료 되는 것을 막을 수 있더군요^^

바로 ERD command를 이용해 시스템을 부팅 후 DART (WLMS 서비스를 사용하지 않음으로 변경 한 후 재 시작 하는 것입니다.
Windows Evaluation
버전에서 실행 되는 WLMS.exe System Trusted Installer Full권한을 가지고 있고 시스템이 시작 될 때 자동으로 시작 되며 services.msc를 통해서 서비스를 중지 할수 없습니다.
또한 레지스트리의 권한도 변경이 되지 않습니다.

그렇기 때문에 해당 머신을 다른 ERD command와 같은 복구 프로그램을 이용해서 부팅 한 후 해당 해당 VM의 레지스트리를 수정 하면 간단하게게 해결 할 수 있습니다.

ERD Command
를 구할 수 없다면 MDOP에 포함 된 Microsoft Diagnostics and Recovery Toolset를 이용해서 부팅 이미지를  만들어 아래와 동일하게 레지스트리를 수정 하시면 됩니다.

아래 방법은 ERD Commander를 이용해서 레지스트르릴 변경 하는 방법이니 참고 하시기 바랍니다.

 

 

 

 

 

   

 

 

 

   

 

감사합니다.

[참고자료]
Overview of Microsoft Diagnostics and Recovery Toolset
http://technet.microsoft.com/en-us/library/ee532075.aspx

http://social.technet.microsoft.com/Forums/en-US/winserversetup/thread/77d68d0d-be7e-4721-85d0-9db8fffa3568

Comment 0