We are Architect

12. 리눅스 시스템의 부팅(1) 본문

운영체제/Linux

12. 리눅스 시스템의 부팅(1)

the best infra 2024. 11. 30. 20:43

 

* 리눅스 시스템의 부팅 과정

 

 

* 바이오스 단계

  • 바이오스 란 PC 전원이 켜진 뒤에 시작되는 프로그램으로 하드웨어를 점검하고 운영체제를 실행하게 돕는다.
  • 즉 하드웨어와 소프트웨어를 연결하는 다리로써 PC부팅 시 반드시 실행되어야 한다. 
  • 펌웨어의 한 종류이다.
  • /boot/vm* 파일중에 커널을 하나 선택해서 커널설정을 한다. 
  • vmlinuz - 0 - rescure는 응급 복구 모드 커널이다.
  • MBR(Master boot record)은 하드디스크나 SSD의 가장 첫 번째 섹터(0번 섹터)에 위치하며, 컴퓨터가 운영 체제를 실행하기 위한 시작점.
  • 부트로더는 MBR에 저장된 코드를 기반으로 운영 체제를 실행하는 프로그램.

 

 

* 부트 로더 단계

  • 운영체제의 커널을 로드하는 단계로 부트로더 프로그램이 주도한다.
  • 하드웨어 초기화 정보 수집하여 운영체제를 실행할 준비를 한다. 
  • 하드 디스크에서 운영체제가 설치된 곳을 찾아서 커널을 메모리에 로드한다.
  • 커널로 커널 제어권을 넘긴다.
  • 대표적인 부트로더는 GRUB, LILO, SYSLINUX/ISOLINUX 등이 존재한다. 

 

 

* 커널 초기화 단계

  • 커널이 실행을 시작하여 컴퓨터 시스템을 실행하는 과정.
  • 하드웨어 초기화, 장치 트리 설정, 메모리 관리 초기화와 같은 과정을 거친다. 
  • 커널은 루트 파일 시스템을 마운트 한다. 마운트를 통해 디스크에서 읽고 쓰기가 가능해진다.
  • 커널은 또한 프로세스를 실행하고 관리할 준비를 한다. (systemd를 실행)
  • 스케줄러 초기화 및 네트워크 인터페이스 초기화를 진행한다.
  • 커널 초기화 단계가 끝나면 systemd에게 제어권을 넘긴다.  

 

 

* systemd 초기화 단계

  • systemd는 시스템을 초기화 하고 사용자 공간을 준비하는 과정이다. 
  • PID 1 프로세스 시작을 하여 프로세스 관리를 시작한다. 
  • 루트 파일 시스템 재마운트를 하여 무결성 검사를 실시
  • 부팅 모드 결정
  •  UNIT단위 결정
    • systemd 유닛의 결정
유닛 기능
service 가장 명백한 유닛으로 데몬 시작, 종료, 재시작, 로드 한다. atd.service(예약 작업 실행 데몬)
socket 네트워크 소켓 이나 파일 디스크립터 기반 통신을 관리하는 유닛. dbus.socket(D-Bus에 대한 소켓)
device 리눅스 장치 트리에 있는 장치를 관리한다. sys-module-fuse.device( FUSE 관련 장치를 관리.)
mount 디렉토리 계층 구조의 특정 지점을 파일 시스템에 연결(마운트)하는 유닛. boot.mount(부팅 시 /boot 디렉토리를 마운트)
automount 특정 경로에 접근할 때 파일 시스템을 자동으로 마운트하는 유닛. proc-sys-fs-binfmt_misc.automount( 파일 시스템 자동 마운트.)
target 관련된 여러 유닛을 그룹화하는 유닛. multi-user.target(CLI 기반 멀티유저 환경.)
swap 스왑 공간(메모리가 부족할 때 디스크를 임시 메모리로 사용하는 공간)을 관리하는 유닛. dev-mapper-fedora-v2d-swap.swap(특정 스왑 공간 관리.)
path 파일 시스템 경로를 감시하고, 특정 조건이 충족되었을 때 유닛을 트리거하는 역할을 한다. cups.path (프린터 작업 대기열(CUPS) 경로 감)
timer 특정 시간에 유닛(주로 서비스)을 실행하는 역할을 한다. dnf-makecache.timer( dnf 캐시를 갱신하는 타이머)
slice 프로세스 그룹의 자원을 계층적으로 관리.  system-getty.slice( 로그인 터미널 프로세스 그룹.)
scope systemd 외부에서 생성된 프로세스를 관리. init.scope(초기화 관련 스코프.)

 

 

 

* systemd 관련 명령

  • systemd를 제어한다. 
  • 사용 형식은 다음과 같다. 
systemctl [옵션] [명령] [유닛명-프로그램 명]
명령어 기능
systemctl start [유닛명] 유닛을 시작.
systemctl stop [유닛명] 유닛을 중지.
systemctl reload [유닛명] 지정한 종류의 유닛만 츌력한다.
systemctl restart [유닛명] 유닛을 재시작한다.
systemctl status [유닛명] 유닛의 상태를 확인한다.
systemctl enable [유닛명] 부팅 시 유닛이 시작 하도록 설정한다.
systemctl disable [유닛명] 부팅 시 유닛이 시작하지 않도록 설정한다. 
systemctl is-active [유닛명] 유닛이 동작하고 있는지 확인한다.
systemctl isolate [유닛명] 지정한 유닛 및 관련된 유닛만 시작하고 나머지는 정지한다.
systemctl kill [유닛명] 유닛에 kill 시그널을 전송한다.