[Linux] 부팅과정


개인적으로든, 업무적으로든 많이 사용하는 OS인 Linux… 내가 과연 많이 알고 있는건가? 라는 의구심이 들었다.

오픈소스이면서 안정성, 보안성, 유연성을 가지고 있는 OS이며 광범위하게 사용되고 있다.

특히나 Linux의 핵심 부분은 커널이며, 하드웨어를 제어하고 프로그램과 상호 작용을 관리해주는 역할을 한다.

그렇다면 Linux에서 커널이 동작하는 시점은 언제이고, 맨 처음부터 커널들이 올라와서 일을 하는 것인지… 여러가지 궁금한 점들이 생겼었다.

그래서 이김에 Linux의 부팅과정에 대해서 알아보았다.




  1. 하드웨어 단계
  2. 부트로더 단계
  3. 커널로드 단계
  4. Init 단계

위의 단계들을 통해서 Linux 시스템이 부팅된다.

각 단계별로 세분화해서 알아봤다.




Linux도 OS니 결국에는 서버가 필요하다.

그렇기 때문에 제일 먼저 Power를 통해 전원이 공급된다.

No 전원? No Linux! 당연한 얘기이다.

전원이 공급되면 메인보드의 ROM에 저장된 BIOS 또는 UEFI 프로그램이 실행된다.
(BIOS와 UEFI의 큰 차이는 하드 디스크의 MBR vs GPT의 차이가 있다)

BIOS 프로그램이 실행되면서 CPU, Memory, 그래픽카드, 주변장치들을 확인하는 POST(power-on-self-test)검사를 진행한다.

검사가 완료되면 BIOS는 부팅 디바이스를 검색하고 부트로더(GRUB)를 실행한다.




BIOS가 부팅 디스크에서 부트로더를 실행하면 약 3~5초 동안의 시간을 카운트 하는데, 이 시간동안 사용자는 아무 키나 눌러 부트로더에 개입할 수 있다.

결론적으로 부트로더 단계에서는 Linux가 실행되기 이전 커널이 올바르게 작동하기 위해 필요한 모든 관련 작업을 마무리한다.




위에도 말했지만 Linux의 핵심적인 부분이 커널이며, 서버의 하드웨어를 사용하는데 필요한 드라이버나 모듈들을 로드한다.

주변장치들을 확인 후에 /var/log/dmesg에 기록하며 Root file system인 / 경로를 일기전용으로 마운트한다.

문제없이 커널이실행되고 나면 /를 언마운트 후 다시 읽기+쓰기로 리마운트한다.




Init 단계의 종류는 SysV와, Upstart, Systemd로 구분된다.

Sysv Init의 경우에는 스왑영역, 파일시스템, 네트워크 및 /etc/init.d에 실행 가능한 서비스들을 모두 실행한다.
(ex – /etc/init.d/mysql start)

Upstart는 SysV int의 한계를 극복하기 위해 개발된 Init 시스템이며, 시스템 이벤트를 사용해서 서비스를 시작하고 중지한다.
(ex – service msql start)

Systemd도 똑같이 sysV init의 한계를 극복하기 위해 개발된 새로운 시스템이며 systemd라는 용어를 사용하여 서비스들을 제어한다.
(ex – systemctl start docker)



이렇게 Linux의 부팅단계들을 확인해봤는데 큰 틀에 대해서는 알고 있지만, 세부적으로는 잘 모르고 있었다는 것을 느꼈다.

Leave a Comment