참고 자료.

http://oldfield.wattle.id.au/luv/boot.html

http://ourworld.compuserve.com/homepages/KanjiFlash/BPTour.htm

http://www.linux.com/articles/114107

 

리눅스 부팅순서를 공부해보았다.

 

구글에서 검색할 때는 "boot order"보다는 boot sequence 또는 boot process 가 어울린다.

 

부팅 순서는 크게 다음과 같다.

1. 바이오스

2. MBR

3. LILO(GRUB)

4. 커널

5. init

6. Run level

 

자세히 들어가보자.

 

1. BIOS

내용은 생략..

 

2. MBR

Master boot record

bios는 디스크의 첫번째 512바이트를 읽고 실행한다. 일명 부트 로더를 읽는다.

보통 리눅스에 경우는 /dev/hda 위치하는 부분을 읽는다.

그 이유는 리눅스는 /dev/had1~4까지 bootable이라고 마킹해둔  primary 영역을 찾는다. 그 영역을 찾아 읽고 실행한다.

 

3. LILO(GRUB)

메뉴코드를 읽는다. 보통 /boot/boot.b 에 저장되어 있다.

프롬프트를 먼저 보이고, 해당되는 커널이미지 옵션을 읽는다.

커널이미지와 부트영역과 모듈을 카피하여 실핵한다.

 

다음과 같이 뜰 것이다.

 

Loading linux-2.2.12..........

4. 리눅스 커널 로딩

linux/init/main.c 에 해당 소스가 있다. 여기에 부팅 커널관련된 부팅순서의 내용이 들어가 있다.

 

처음엔 프로세서, 콘솔, 메모리를 초기화한다.

두번째, PCI 버스를 초기화한다.

세번째, 네트웍을 초기화한다.

네번째 프로세스 번호 0 인 커널 IDLE 쓰레드가 실행된다. (/sbin/init )

다섯번째, 드바이스 드라이버를 초기화한다.

         (Generice Parallel port, character device, block device, scsi, ppp, disk)

 

* Root 파일 시스템을 읽기 전에 램디스크 이미지를 읽기도 한다. 해당 내용은 아래를 참조하라 /usr/src/linux-2.4.21-47.EL/Documentation/initrd.txt

 

5. Process 번호 1번 프로그램 실행

 /sbin/init의 연장인데, 굳이 번호를 따지 않아도 되고... run level때문에 분류..

/etc/inittab을 읽어 /etc/rc.d/rc.sysinit을 실행한다. 이 스크립트에는 모듈을 로드하고, 루트 파일 시스템, 마운트 파일시스템, 네트우거 셋팅, 리모트 파일 시스템 마운팅, 폰트, tty, 로긴이후의 배너(/etc/redhat-release), 시계 설정, 커널 파라미터 기타 하드웨어 디바이스 설정 정보가 들어가 있다.

그후, /etc/inittab 파일에서 id:3:initdefault: 줄을 찾아 해당 runlevel을 실행시킨다.

정확하게 말하면 initdefault으로 지정된 값에 해당되는 /etc/rd?.d/S* 스크립트를 실행한다.

 

참고로 run level은 다음과 같다.

  • Linux - The Complete Reference (R.Peterson, Osbourne/McGraw-Hill).

    Run Level

    Generic

    Fedora Core

    Slackware

    Debian

    0HaltHaltHaltHalt
    1Single-user modeSingle-user modeSingle-user modeSingle-user mode
    2Basic multi-user mode (without networking)User definable (Unused)User definable - configured the same as runlevel 3Multi-user mode
    3Full (text based) multi-user modeMulti-user modeMulti-user mode - default Slackware runlevel
    4Not usedNot usedX11 with KDM/GDM/XDM (session managers)Multi-user mode
    5Full (GUI based) multi-user modeFull multi-user mode (with an X-based login screen) - default runlevelUser definable - configured the same as runlevel 3Multi-user mode
    6RebootRebootRebootReboot
  •  

    /etc/init.d/rc가 3일 파라미터로 받아. /etc/rc3.d의 S (Start)스크립트를 실행한다.

    * init 명령어를 이용하여 runlevel이 수정 가능하고, 부팅이후, init 명령어에 의해 K(kill), S(start) 스크립트가 실행된다.

    /etc/init.d/rc.local 파일은 부팅할때 띄우는 데몬이 프로그램을 적는데 사용된다.

    그리고, virtual 콘솔 tty를 셋업한다. (mingtty )

     

    /sbin/login이 실행되어 사용자 이름과 패스워드를 넣는 부분 앞에 /etc/issue 파일의 내용을 화면에 뿌린다.

     

    6. bash shell 실행 (가정)

    로그인후, /etc/motd 파일의 내용을 출력한다. 

    그리고 /etc/passwd파일의 계정정보를 이용하여 쉘을 파악한다.

    /etc/profile을 실행하여 모든 사용자의 시스템 환경 변수를 셋팅한다.

    그리고, 개인 설정는 본인 디렉토리의 .profile .bashrc파일을 읽어서 셋팅된다.

     

     

    'unix and linux' 카테고리의 다른 글

    ssh를 이용한 파일 전송 방법  (0) 2007.08.21
    시스템 부팅시 프로세스 시작하기  (0) 2007.08.16
    리눅스 부팅 순서  (0) 2007.08.16
    /proc/net/tcp 보기  (0) 2007.08.02
    /proc/net/dev  (0) 2007.08.02
    Yum  (0) 2007.06.07
    Posted by 김용환 '김용환'

    댓글을 달아 주세요