운영체제/LINUX

[Linux] Linux OS Booting Process 정리

benjykim 2021. 5. 11. 08:00
반응형

Linux OS Booting Process

리눅스 부팅 과정

  1. Power on
  2. BIOS에서 지정된 부트 드라이브로 부팅 시작
  3. 부트 섹터 로드
  4. GRUB 작동
  5. 커널 이미지 로드
  6. 파일 시스템 마운트
  7. 시스템 초기화 프로그램(init) 작동
  8. 로그인

부트로더가 나올 때까지의 과정

  • 시스템 전원이 시작되면 시스템에 이상이 없는지 확인하고(POST), 이상이 없는 경우 BIOS에서 지정한 부팅 순서에 따라 해당 드라이브로 부팅이 이루어진다.
  • 해당 드라이브의 첫번째 섹터인 부트 섹터를 읽어들이는데, 이를 마스터 부트 레코드(MBR: Master Boot Record)라 한다.
  • 리눅스의 경우 GRUBMBR에 저장되어 있다.

커널 이미지 로드

  • 부트로더에서 리눅스가 선택되면 커널 이미지(/boot/vmlinuz-version)가 작동한다.
  • 커널 이미지는 압축되어 있는 상태이므로 swapper라는 프로그램에 의해 압축이 풀어지고, 메모리, 디스크 등 여러 하드웨어들을 체크하여 이에 대한 정보를 화면에 보여준다.
    • 화면으로 출력되는 하드웨어 정보를 보고 싶다면 다음의 명령어를 이용한다.
        $ dmesg | more
        $ cat /var/log/dmesg
      루트 파일 시스템 마운트
  • 커널은 루트 파일시스템을 마운트 하는데, 이 때 부트로더의 설정파일(/boot/grub/menu.lst)에 있는 root=옵션으로 명시된 파티션을 루트 파일 시스템으로 마운트 시킨다.
  • 이 때 루트 파티션이 잘못 지정되거나, 루트 파티션이 변경되었음에도 이 정보가 갱신되지 않았을 때 커널에서 파일 시스템 마운트 과정이 실패하고 결국 패닉 에러를 보이며 부팅이 실패한다.

시스템 초기화 프로세스 init과 inittab

  • 루트 파일 시스템이 마운트된 후 제일 먼저 시작되는 프로세스인 init은 프로세스 번호 1번을 갖는다.
  • 시스템은 init 프로세스에 의해 초기화가 이루어진다. 즉, 로그인 프롬프트가 나오기 전까지 파일 시스템 점검, 서비스 프로세스 관리, 가상 콘솔 접속 관리, 실행레벨 관리 등 사용자의 리눅스 사용환경을 위한 초기화 작업을 실행한다.
  • init 프로게스가 실행될 때 제일 먼저 읽어들이는 파일이 /etc/inittab 파일이며, inittab파일의 설정에 따라 프로세스들을 실행시킨다.

실행 레벨(Run Level)

  • /etc/inittab 내용을 보면 실행 레벨(Run level)에 대한 설정 값이 보인다. 실행 레벨은 시스템이 어떤 모드로 작동될지 결정하는 실행 값을 말한다.
  • 실행 레벨의 내용은 아래와 같다.
    • 0: 시스템 중지
    • 1: 단일 자용자 모드(싱글 모드로 쉘로 바로 부팅)
    • 2: NFS 기능을 제외한 다중 사용자 모드
    • 3: 다중 사용자 모드(콘솔 모드)
    • 4: 내용 없음(사용하지 않는 값)
    • 5: GUI의 X - Window로 부팅
    • 6: 시스템 리부팅
  • 위의 런레벨을 파일의 제일 아래에 id:(런레벨 값):initdefault로 적어주면 시스템 부팅 시 해당 런레벨로 실행된다.
    • 참고로 /etc/inittab파일을 수정하지 않고 telinit 명령어로 원하는 런레벨로 호출할 수 있다.
      • 예) telinit 5: X-Window의 런레벨 5 호출

시스템 초기화

  • 시스템이 부팅되면 init프로세스는 /etc/rc.d/rc.sysinit 스크립트를 실행시켜 네트워크 설정, 호스트 이름 설정, 하드디스크 최적화 등의 작업을 수행하고 /etc/inittab에 설정된 런레벨에 따라 해당하는 /etc/rc.d/rc[0-6].d스크립트를 실행한다.
    • 즉 런레벨이 3으로 설정되어 있다면 /etc/rc.d/rc3.d를 실행한다.
  • /etc/rc.d/rc[0-6].d 스크립트는 런레벨에 맞춰 필요한 서비스 데몬을 실행하거나 중지하는 일을 맡는다.
    • 예) /etc/rc.d/rc3.d 디렉토리 안에는 많은 스크립트 파일이 있는데, 스크립트에서 S는 해당 런레벨에서 시작해야 하는 프로세스들을, K는 해당 런레벨에서 죽여야 하는 프로세스를 의미한다.
    • SK 뒤에 있는 숫자는 초기화 때 실행되는 순서를 의미한다.

반응형