커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > Unix/Linux 처음 시작하기 도움말
검색 : 사이트 WHOIS 웹서버 종류

리눅스 배포판(배포본) (26)
OS 설치 (10, 글 4, 자료 8)
매뉴얼 / 맨페이지 (8, 자료 2)
FreeBSD, OpenBSD (*BSD) (17, 글 1, 자료 6)
GNU / GPL(General Public License) (4, 자료 3)
명령어 사용하기 (10, 글 5, 자료 12)
정규 표현식(정규식) (5, 자료 3)
FAQ / 리눅스,유닉스 일반 (4, 자료 4)
OS간 비교 / 대체 프로그램 비교 (9, 자료 3)

  리눅스 부팅 과정 I - MBR 과 부팅로더의 관계 작성일 : 2007/07/16 21:40
 
  • 글쓴이 : 류범룡
  • 조회수 : 9977
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      1. 첫째, MBR 과 부팅로더의 관계 (멀티 부팅 이해와 부팅 과정 이해를 위한)


    MBR (Master Boot Reader) : MBR이란 하드디스크로 부팅하기위한 정보와 파티션 분할 정보 부팅에 사용되는 실제 파티션 (ACTIVE PARTITION)에 대한 정보가 저장된 곳으로 하드디스크의 제일 바깥쪽에 위치한 공간으로(절대섹터0(Cylinder 0, Head 0, Sector 1), 크기:1sector(512byte)) 하드 디스크로 들어오는 관문이 되는 곳이다.


      --> 이해하기 쉽도록,

                    1. 하드 디스크의 첫번째 정보 저장공간에 저장되어 있다.(첫번째 sector)
                    2. 이 첫번째 sector는 512Byte 이며, 512바이트중에서 처음 446바이트는
                    운영체제를 읽어들이기 위한 준비단계 코드가 들어 있으며 나머지 64바이트가
                    파티션에 대한 정보를 들어 있다. 2바이트는 MBR이 맞는지 확인하기 값으로
                    기록되어 있습니다. 446 + 64 + 2 = 512 .





    < ****** 개념적인 내용이 아닌, 목적에 맞춰 이해도를 높이겠다. ****************>

      MBR은 메모리에 적재될 운영체계 가 저장되어 있는 파티션의 부트 섹터 레코드 읽어 들일수 있는 프로그램을 가지고 있다. (446Byte - 로더 프로그램)


           컴퓨터가 켜진다. -> ROM의 BIOS가 로딩된다. -> 디스크의 첫번째 sector (MBR)이 로딩
        -> 운영체제가 있는 파티션의 부트 섹터 로딩 -> 운영체제 나머지 로딩


      "디스크의 첫번째 sector (MBR)이 로딩 -> 운영체제가 있는 파티션의 부트 섹터 레코드를 로딩" 부분을 쉽게 풀이하면(lilo 나 grub 를 통한 멀티 부팅 연상) 446바이트에 "lilo 혹은 grub"가 설치되어있다고 간단하게 생각해주면 된다.


       64Byte에 파티션이 어떻게 나누어져 있는지 명시해주는 파티션 테이블이 존재하는것이다. 여기서 추가적인 내용을 적어 주면, 파티션 테이블은 주파티션은 4개 밖에 생성이 되지 않는다는 말을 들었을것이다. "왜 4개인가?"라는 의문점을 가졌을텐데, 파티션테이블을 구성하기 위해서는 16Byte 가 필요하기 때문이다. 어떠한 내용들이 들어 있는지는 http://wiki.kldp.org" 에서 "파티션" 이라고 검색하기 바란다. 물론, 하나의 주 파티션을 나눠서 논리적인 파티션 구성이 가능하다. 즉, 4개이상의 파티션 구성이 가능하다는것이다.

       2Byte는 얘가 MBR 맞아요!! 라고 말하는거라 보시면 됩니다.




    * 정리 : 컴퓨터가 켜지면, MBR을 읽고, 운영체제가 설치된 파티션을 확인하여, 부트 로더를 로딩하고, 부트 로더는 나머지 운영체제 로딩한다. 어렵게 생각할거 없다.

      Active 한 파티션(운영체제가 설치된 파티션)을 찾기 위해 MBR을 로딩하고, 운영체제를 로딩하기 위해 부트 로더를 로딩하고, 부트 로더에서는 운영체제를 순서에 맞게 올리기 위해 다음 코드를 찾는거 뿐이다. 길게 이런 내용을 적은것은 필자가 한번도 해보지 못했던 멀티 부팅에 대한 이해를 하기 위해서 이다.



    ## 글에서는 MBR(Master Boot Record)의 로더 프로그램과 와 Boot Sector 로더 프로그램을 별개의 것으로 취급 했지만, 동일한 내용이다. 단지, 어디에 위치해 있느냐의 문제로 생각해주면 된다. 리눅스 설치시  MBR에 lilo를 설치할 것인가? 파티션의 Boot Sector에 설치할것인가? 묻는 질문이 있을것이다. lilo 혹은 grub는 부팅로더를 로딩해주기도 하지만, 직접 운영체제를 로딩해주기도 한다. (http://pec.etri.re.kr/~qkim/BootingProcess11.pdf 이 부분을 읽어준다면, 하려는 말을 이해하는데 많은 도움이 될것이다. 아니 하려는 말 전부가 들어 있다.)



    ## 멀티 부팅 이해를 위한 간략한 설명


    먼저, MBR의 구조를 생각해줘야한다.


    MBR은 위의 설명 처럼 1. 로더 프로그램(로더 코드) 2. 파티션 테이블 3. 2byte의 매직 넘버 로 이루어져 있다.  http://coffeenix.net/doc/misc/BootingProcess11.pdf  ;를 보면 그림이 있기 때문에 이해하는데는 아무런 지장이 없을것이다. 위의 문서에서 MS-DOS 의 boot sector 와 linux 의 boot sector 를 그림으로 표현해주고 있는데, 사실 위 문서 내용이 전부이다. 막상 설명을 하려고 하니, 위의 문서의 반복일거 같아 http://coffeenix.net/doc/misc/BootingProcess11.pdf 를 강조하는 선에서 끝내는게 나을거 같다.


    갑자기 적을 말이 없어졌다. 추가적으로 "fdisk /mbr" 에 대해서 적겠다.


    fdisk /mbr 하면 MBR를 삭제 한다고 하여, 512 Byte의 전체를 삭제한다고 생각하고 있었다. 필자는 단순하게 그렇게 생각했었다. 한번더 멀티 부팅을 해본적이 없었기 때문이다.


    fdisk /mbr 은 446Byte 즉, 로더 프로그램을 삭제하는것이다. 파티션 테이블에는 영향이 없는것이다. 물론 아에 날려버릴수도 있다. 리눅스 상에서 #dd command를 사용하여 512 Byte를 덮어 씌우면 되는 문제이니 말이다. 그럼 실절적인 도움이 되는 MBR에 위치한 lilo 를 삭제/복구 하는 방법을 간단하게 적어 보겠다.


    삭제

        1. dos 상에서의 fdisk /mbr
        2, linux 상에서의 # /sbin/lilo -u /dev/hda
            -> -u device 는 삭제 명령이다.
        3. dd if=/dev/null of=/dev/hda bs=446 count=1  <-- 가물 가물해요. 이 부분을 버려주시길..
            -> 기억이 가물하다. "/dev/null" 비어 있는, 없는 이란 개념으로 생각해주면 된다. 애당초 존재하지 않지만, 존재하는 공간으로 보면된다.  없다는 의미가 맞겠다. 예를 들어 # cp /dev/null /var/messages 를 해주면, /var/messages 의 크기는 0 이 된다. 그렇다고 /dev/null 이 빈화일과 같다고 생각하면 안 된다. 없는 공간이기 때문이다. 없는 개념이기 때문이다 사실 파일도 아니다. 뭐가 다른가 하면, 빈 파일에는 엄연히 공간이란게 존재하고, 존재하는 파일 이기때문에 어떠한 값들을 쓸수 있지만, /dev/null은 어떠한 값들도 매겨질수 없다. 예를 들어 # ls -al > /dev/null 과 # ls -al > /test/binfile 은 엄연히 틀리는것이다. # ls -al > /dev/null 에는 어떠한 값도 남겨지지 않는다. 하지만, # ls -al > /test/binfile 에는 ls -al 의 출력 값이 남는다.



      * /dev/null 에 대해 간단히 정리 하면, 가상 디바이스이며, 물리적으로 존재하지 않고, 자체적으로 무언가를 하지 않는 가상 디바이스이다. 즉, 비어 있는, 존재치 않은 디바이스인것이다. 이 디바이스는 특정 화일의 크기를 0 으로 만들때, 혹은 특정 프로그램의 출력 값을 화면상에 출력되지 않고, 없애고 싶을때 사용한다.

      크기 '0' 만들때 # cp -f /dev/null /var/messages
      출력 값을 없앨때 # a.out > /dev/null 2> /dev/null



    복구

       1. # dd if=/boot/boot.b of=/dev/hda bs=446 count=1
           - lilo 생성시 default 로 /boot/boot.b 백업 파일을 생성한다.
       2. # /sbin/lilo


    * grub 를 많이들 사용한다. grub 복구도 어렵지는 않다. root 권한 획득 하여(부팅 디스크나 리눅스 씨디의 rescue mode(복구모드) 이용) # /sbin/grub 로 grub 프롬프트를 띄운후

    -> root (hd0,1)
    -> install (hd0,1)/grub/stage1 d (hd0) (hd0,1)/grub/stage2 p (hd0,1)/grub/menu.lst
    를 사용하여 복구 할수 있다. 단, 여기서 /boot 첫번째 하드의 두번째 파티션(hd0,1)에 위치해 있다는 가정에서 이다. 다른곳에 위치해 있다면 이 부분만 바꾸어주면 된다.
      커피닉스 카페 최근 글
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Mobile 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Web Front 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Server 개발 팀장을 모십니다.
    [12/21] 브라우저별 SHA1 퇴출 시점
    [09/15] [구인] 시스템엔지니어 (경력)
    [08/05] Re: 칼리리눅스 텔넷관련
    [08/04] 칼리리눅스 텔넷관련
    [06/29] 또 다른 무료 SSL 인증서, Let's Encrypt
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~