본문 바로가기

IT/linux

1. 리눅스 Boot Sequence.

실제 리눅스 박스에 파워 버튼을 누르고 사용자의 로그인 화면이 나오기까지 어떠한 단계를 거쳐 이루어지는지에 대한 설명이다.

실제 하나하나 더 파보고 까볼라면 더 복잡하고 범접하기 힘들겠지만, 리눅스 유저로서 개략적인 단계를 알고 이해할만한 수준의 부팅 절차를 아는 것은 필요한 사항같다.

1. BIOS (Basic Input/Output System)

  • mainboard의 bios를 통해 cpu와 memory등 하드웨어의 상태를 체크하고 초기화한다.
  • boot loader를 찾는다. 여기엔 cd-rom이나 harddisk, flopy disk 등이 있겠고..그 순서는 유저가 바꿀 수 있다
  • boot loader를 찾았다면 메모리에 해당 프로그램을 올리고 컨트롤을 넘긴다

2. MBR (Master Boot Record)

  • MBR은 실제 부팅 가능한 디스크의 첫번째 섹터를 가르킨다. 크기는 512바이트.
  • primary boot loader (446byte) / partition table (64byte) / MBR validation check (2byte)
  • MBR의 정보를 따라 GRUB 내지는 LILO를 실행시킨다.

3. GRUB (Ground Unified Bootloader)

  • kernel 이미지들의 선택 및 실행을 담당한다.
  • 복수개의 kernel 이미지를 가지고 있다면 선택을 하여 부팅할 수 있다.
  • 해당 정보는 실제로 /boot/grub/grub.conf 에서 확인 가능하다.
  • 선택된 kernel과 initrd를 메모리에 올리고 실행시킨다.

4. Kernel & initrd

  • grub.conf의 명시된대로 kernel을 마운트 시킨다.
  • initrd는 실제 root file system이 마운트 되기 전까지 kernel에 의해 사용되는 임시 root file system 이다.(init ram disk)
  • kernel은 init 프로그램을 실행시킨다.

5. init

  • 최초 sysinit을 통하여 초기화를 시킨다.
  • /etc/inittab의 default initlevel을 체크하여 알맞는 프로그램을 실행시킨다. (보통 3이나 5를 가진다)

6. runlevel execute

  • /etc/rc.d/rcx.d 에 따라 각각의 runlevel에 맞게 프로그램을 실행시키고 죽인다.
  • 각 단계에서 정의되어 있는 파일들의 이름에 따라 S와 K로 시작시키고(Startup) 죽인다.(Kill)
  • /etc/inittab 의 마지막에 서술되어 있는 getty 프로그램의 실행으로 사용자 로그인 화면을 띄운다.