Windows Networking

11-5-1. 문제해결-부트프로세스의 이해 및 문제해결

새벽예찬 2008. 11. 25. 13:18

시스템을 관리하다 보면 부팅이 되지 않는 문제점을 종종 발견하게 된다. 서버의 경우는 차라리 적은데 많은 수의 클라이언트 시스템들을 관리해야 한다면 문제는 더더욱 자주 발생하게 된다. Windows 9x 계열의 클라이언트들이 점점 Windows Server 2003, Windows XP로 대체가 되가고 있고 신규수요는 대부분 XP로 발생하고 있는 실정이기 때문에 이러한 부팅의 문제점을 해결하는 것은 이제 “NT” 시스템의 부팅과정을 잘 이해하는 것으로써 해결의 실마리를 찾을 수 있을 것이다.

 

11-5-1-1. 부트 프로세스

 

NT기반 OS가 부팅되는데 어떤 과정을 거치는지 또 어떤 파일들이 사용되는지 해당 파일이 없거나 손상되었을 때 어떤 에러메시지를 만나게 되는지, 그때 해결방법은 무엇인지를 정리해 보도록 한다. 부트 프로세스를 최대한 간소화시켜서 실제로 필요한 파일과 연관시켜 설명하도록 한다. (아래에 캡처한 화면은 Microsoft Virtual PC를 이용하여 화면을 구성한 것이다.)

    처음 파워를 켜면 POST (Power On Self Test)루틴이 시작된다. 독자들도 한번씩은 키보드와 마우스를 바꿔서 꽂았다거나 하는 경험이 있을 것이다. 그때 시스템은 Keyboard 에러가 나면서 비프음과 함께 더 이상 부팅이 되지 않게 된다.

    그리고 MBR(Master Boot Record)를 찾는다. MBR는 파티션 정보를 가지고 있는데 여기서 Active(활성)파티션을 찾아 0번섹터에 해당하는 부트섹터를 찾게 된다. 부트섹터에는 Windows NT기반의 부팅을 시작할 수 있는 짧은 프로그램이 들어있다.

    Windows NT의 부트섹터 프로그램은 같은 파티션에서 NTLDR을 실행시켜 메모리에 로그시킨다. NTLDR이 부팅과정을 책임질 부팅프로그램이다.


<그림11-130. POST Routine 과정>

 

    NTLDR은 가장 먼저 boot.ini파일을 찾아서 화면에 사용자의 선택을 요구하는 화면을 띄운다. 단일OS가 설치된 시스템이라면 화면에 보여지지 않고 해당 OS의 다음 부팅과정을 진행한다.

    NTLDRNtdetect.com을 찾아서 로드한다.

 


<그림11-131. OS 선택화면>

 

    Ntdetect.com은 시스템의 하드웨어를 점검하고 목록을 만든다.

    NTLDRboot.ini ARC Path를 참고하여 %Systemroot%\system32 폴더에서 Ntoskrnl.exe를 로드하고 디바이스 드라이버 및 서비스들을 로드하는 작업을 한다.

<그림11-132. 커널 로드 과정>

 

    Ntoskrnl.exe는 커널을 구성하는 작업을 한다.

<그림11-133. 커널 구성 과정>

    Ntoskrnl.exe는 마지막으로 Winlogon.exe 프로세스를 로드한다. 사용자는 [Ctrl+Alt+Del]을 입력하여 로그온할 수 있는 화면을 얻는다.

 

<그림11-134. 로그온 프로세스 시작>

 

 

위에서 부트프로세스에 대한 설명을 했다. 그림으로 파일을 기준으로 살펴보겠다.

 


<그림11-135. Windows NT기반 시스템의 부팅 프로세스>

 

이번에는 부팅과정에서 어떤 문제가 생길 것인지에 대해서 접근해 보자.

 

부트 프로세스에서 POST과정부터 MBR을 찾는 과정까지 생기는 문제는 하드웨어 적인 문제이다. OS와는 무관하다는 뜻이다. MBR에서 파티션 정보를 찾았지만 활성파티션을 발견하지 못했다면 혹은 활성파티션은 있지만 부트섹터가 없다면 그때도 역시 시스템은 부팅이 되지 못한다. “Non system disk error” 라는 일반적인 에러를 내며 멈추고 만다. 부트섹터를 찾았지만 Windows NT의 부트섹터 프로그램이 아닌 Windows 9x의 부트섹터였다면 시스템에서는 Windows NT를 부팅할 수 없다. 부팅이 되기 위한 최소한의 기본조건은 시스템의 활성파티션에 Windows NT기반의 부트섹터가 있어야 한다는 것을 뜻한다. 아래의 내용은 Windows NT기반의 부팅과정에서 생기는 문제점을 설명한 화면이다. 단계별로 접근하고 있다.


<그림11-136. 부트프로세스 에러1>

““NTLDR is missing”혹은 “Could not found NTLDR”이라는 에러메시지가 나왔다. 이 메시지가 나왔다면 적어도 부트섹터 문제는 아니라는 것이 보장된다. 부트섹터에 있는 프로그램이 NTLDR을 찾아서 메모리에 로드하려고 시도했지만 NTLDR을 찾지 못했기 때문에 발생되는 메시지이다. (해결방법☞) 다른 시스템으로부터 ntldr 파일을 옮겨오든지 부팅디스켓으로부터 부팅을 하면 된다. (Windows20002003과는 버전이 다르다)


<그림11-137. 부트프로세스 에러2>

Ntldr이 정상적으로 로딩되었다면 boot.ini파일이 필요한데 이때 boot.ini 파일이 없다고 해서 “Could not found boot.ini”등의 에러메시지를 내 보내지는 않는다. 만일 boot.ini파일이 없다면 ntldr은 자동적으로 OS C:\winnt 폴더에 있을 거라는 가정을 하고 다음 단계로 진행한다.

 

그 다음 순서인 ntdetect.com을 로드하게 되는데 만일 이 파일이 손상되었다면 부팅은 더 이상 진행이 되지 않고 하드웨어를 점검하지 못했다는 에러메시지를 발생시킨다. (해결방법☞) 다른 시스템으로부터 ntdetect.com 파일을 옮겨오든지 부팅디스켓으로부터 부팅을 하면 된다. (Windows2000 2003과는 버전이 다르다)


<그림11-138. 부트프로세스 에러3>

Ntdetect.com이 로드되었다면 다음으로 필요한 파일은 %Systemroot%\system32 폴더에 있는 Ntoskrnl.exe를 로드하게 되는데 바로 이 파일이 손상되었거나 없어서 로딩하지 못하겠다는 에러메시지이다. 속으면 안 된다. 처음 이런 에러메시지를 만났을 때 많은 관리자들이 Ntoskrnl.exe파일을 찾아서 헤맨다. 다른 시스템이나 원본 CD-Rom으로부터 이 파일을 복사해다 붙여넣으려는 시도를 한다. 1.6M정도의 그다지 크지는 않은 파일이지만 아쉽게도 그것으로 해결되지는 않는다. 실제로 이 파일이 손상되어서 이러한 에러가 나오는 경우는 극히 드물다. (해결방법☞) 이 경우는 boot.ini파일을 살펴봐야 한다. Boot.ini파일의 ARC Path를 통해서 NTLDR Ntoskrnl.exe의 위치를 찾게 되는데 이 파일의 위치가 잘못 설정되어 있다면 (예를 들면 실제로 winnt폴더가 D:에 있는데 C:에 있는것으로 가리키고 있다거나) 시스템은 Ntoskrnl.exe를 찾지 못하고 이러한 에러메시지를 발생하는 것이다.


<그림11-139. 부트프로세스 에러4>

간혹 <그림11-139>와 같은 에러가 발생하는 경우도 있다. Boot.ini를 통해서 보게 되는 메뉴중에 분명히 리스트에는 없던 “Windows 2000 (기본값)”이라는 메뉴가 보인다. 이것도 역시 boot.ini ARC Path가 잘못지정되어 있기 때문에 생기는 에러이다. <그림11-140>의 경우에 이러한 에러가 발생한다. 그림에서 하이라이트된 부분이 timeout=30초 내에 OS를 선택하지 않을 때 부팅이 되는 기본OS이다. 그런데 이 기본OS와 일치하는 Path를 아래의 세개의 목록중에서 찾을 수가 없다. 그럴때는 Boot.ini파일이 없는것과 동일하게 취급된다. “Windows 2000 (기본값)”이라는 것은 C:\winnt 폴더에 OS가 설치가 되어 있을 거라고 가정하고 부팅을 시도하는 것이다.


<그림11-140. 잘못 설정된 Boot.ini ARC Path>

 

이상으로 부팅시 생기는 문제점들에 대해서 살펴보았는데 해결방법마다 꼬박꼬박 나오는 것이 부팅 디스켓이라는 것이 있었다. 부팅 디스켓 만드는 방법을 알아보자.

 

11-5-1-2. 부팅 디스켓 만들기

 

초기 부팅과정에서 생기는 문제점은 부팅 디스켓 하나만으로도 해결할 수 있는 경우가 있다. 부팅 디스켓은 3.5” 디스켓 한장이면 만들수 있다. 다음과 같이 진행하면 된다.

 

먼저 3.5” 플로피 디스켓 한장을 준비한다. 반드시 Windows Server 2003에서 디스켓을 포맷한다. DOS에서 부팅디스켓을 어떻게 만들었는지 상기해 보면 “format a: /s”라고 /s 스위치를 주고 포맷했던 것을 기억할 것이다. 이 스위치는 a: DOS의 부트섹터를 만드는 작업을 해 주었다. 마찬가지이다. 하지만 그것보다 오히려 간편하다. Windows Server 2003에서 디스켓을 포맷하기만 하면 자동으로 그 디스켓의 0번 섹터에는 Windows Server 2003의 부트섹터가 생성되게 된다.

 


<그림11-141. Windows Server 2003 에서 윈도우 탐색기를 이용한 디스켓 포맷>

 

다음에 이 포맷한 디스켓에 시스템 파일을 저장해 주어야 한다. 기본적으로 시스템 파일들은 감춰져 있다. 윈도우 탐색기의 도구-폴더옵션을 열어서 숨김 파일 및 폴더 표시를 설정하고 보호된 운영 시스템 파일 숨기기(권장)’을 해제한다.


<그림11-142. 폴더 옵션 변경>


<그림11-143. 시스템 파일들>

 

C: 루트에 보면 boot.ini, NTDETECT.COM, ntldr 이 보인다. 이것을 A:로 복사한다.

 

이상으로 부팅디스켓이 만들어졌다. 이 디스켓이 해 주는 일은 하드디스크에서 해 주어야 할 일을 대신하는 것이다. 이것으로 초기부팅 과정에서 NTLDR이 해야 할 모든 일은 부팅 디스켓으로 처리해 준다. Ntoskrnl.exe가 로드될때까지는 이 디스켓이 역할을 담당한다.

 

물론 이것은 일시적이다. 이 부팅디스켓으로 부팅을 한 후에는 디스켓에 있는 시스템 파일들을 하드디스크의 C: 루트로 복사를 해야 할 것이다. 하지만 부트섹터가 망가진 경우라면 복사해서 붙여넣기를 할 수는 없다. 그때는 응급복구과정을 거쳐서 해결할 수 있다. 다음장에서 다루어진다.