전공/리눅스시스템관리

[Linux] 리눅스 부팅 프로세스

Campus Coder 2023. 6. 12. 03:21
728x90
반응형

리눅스 시스템의 부팅

라눅스의 부팅 과정

바이오스 단계

  • 바이오스는 PC에 장착된 기본적인 하드웨어의 상태를 확인한 후 부팅장지를 선택하여 부팅 디스크의 첫 섹터에서 512B를 로딩
  • 512B를 마스터 부트 레코드(MBR)라고 하며 디스크의 어느 파티션에 2차 부팅 프로그램(부트 로더)이 있는지에 대한 정보가 저장되어 있음
  • 메모리에 로딩된 MBR은 부트 로더를 찾아 메모리에 로딩하는 작업까지 수행

 

바이오스 단계

부트 로더 단계

  • 부트 로더는 일반적으로 여러 운영체제 중에서 부팅할 운영체제를 선택할 수 있도록 메뉴를 제공
  • 우분투에서는 부트 로더로 GRUB를 사용
  • 부팅할 때 GRUB 메뉴를 출력하려면 /etc/default/grub 파일을 수정해야 함
    • GRUB_TIMEOUT_STYLE=hidden 앞에 #을 추가, GRUB_TIMEOUT=010으로 수정
    • /etc/default/grub 파일을 수정했다면 sudo update-grub를 실행하여 변경된 내용을 적용

 

우분투를 다시 시작하면 GRUB 메뉴를 출력

부트 로더는 리눅스 커널을 메모리에 로딩하는 역할을 수행

 

커널 초기화 단계

부트 로더에 의해 메모리에 로딩된 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등의 장치를 검사

장치 검사 등 기본적인 초기화 과정이 끝나면 커널은 프로세스와 스레드를 생성

 

systemd 서비스 단계

리눅스가 본격적으로 동작

 

dmesg 명령: 부팅 메세지 확인

 

 

SYSTEMD 서비스

system 서비스의 역할

  • 리눅스의 시스템과 서비스 관리자
  • 유닉스의 init 프로세스가 하던 작업을 대신 수행
  • 다양한 서비스 데몬을 시작하고, 프로세스들의 상태를 유지하며, 시스템의 상태를 관리

init 프로세스와 런레벨

  • 현재 init 서비스는 systemd 서비스로 대체
  • 런레벨: 시스템의 상태를 구분하는 숫자/문자

systemd의 장점

  • 소켓 기반으로 동작하여 inetd와 호환성 유지
  • 셀과 독립적으로 부팅 가능
  • 마운트 제어가 가능
  • fsck 제어 가능
  • 시스템 상태에 대한 스냅숏 유지
  • 서비스에 시그널 전달 가능
  • 셧다운 전에 사용자 세션의 안전한 종료 가능

systemd 유닛

  • systemd는 전체 시스템을 시작하고 관리하는 데 유닛이라 부르는 구성 요소를 사용
  • systemd는 관리 대상의 이름을 '서비스명.유닛.종류'의 형태로 관리

systemctl

기능 - systemd 서비스를 제어

형식 - systemctl [옵션] [명령] [유닛명]

옵션

-a: 상태와 관계없이 유닛 전체를 출력

-t: 특정 유닛 출력

systemctl 

동작중인 유닛 출력하기

systemctl -a

전체 유닛 출력하기

systemctl start atd.service

유닛 서비스 시작하기

 

런레벨

 

 

리눅스 시스템의 종료

shutdown

기능 - 리눅스를 종료

형식 - shutdown [옵션] [시간] [메시지]

옵션

-r: 종료한 후 재시작

-h: 종료하고 halt 상태로 이동

-c: shutdown 명령을 취소

시간 - 종료할 시간(hh:mm, +m, now)

shutdown -h now
shutdown -r +3 "System is going down"
shutdown -c

 

런레벨 변경하기

sudo init 0

런레벨을 0으로 바꾸면 시스템 종료

sudo systemctl isolate poweroff.target
sudo systemctl isolate runlevel0.target

systemd로 종료하기

 

 

데몬 프로세스

데몬

리눅스의 백그라운드에서 동작하며 특정한 서비스를 제공하는 프로세스

데몬의 동작방식

독자형 데몬

슈퍼데몬을 통한 동작

슈퍼 데몬

데몬들을 관리하는 데몬

사용자가 네트워크 서비스를 요청하면 슈퍼데몬이 이를 받아서 해당하는 서비스 데몬을 동작시킴

데몬의 조상

systemd 데몬

  • 대부분의 조상 프로세스
  • 시스템의 상태를 종합적으로 관리

 

커널 스레드 대몬

  • 커널 데몬 : 커널의 일부분을 프로세스처럼 관리하는 데몬
  • ps 명령으로 확 인했을 때 대괄호([ ])에 들어 있는 프로세스
  • 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며 대체로 낮은 PID가 할당
  • 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬

주요 데몬

 

 

부트 로더

커널을 메모리에 로딩하는 역할을 수행

GRUB(grand unified bootloader)

  • 이전 부트 로더인 LILO는 리눅스에서만 사용할 수 있지만 GRUB는 윈도에서도 사용 가능
  • LILO 단점을 개선하여 설정과 사용이 편리
  • 부팅할 때 명령을 사용하여 수정 가능
  • 멀티 부팅 기능을 지원
  • GRUB의 최신 버전은 GRUB2

GRUB 관련 디렉터리와 파일

/boot/grub/grub.cfg 파일

  • GRUB2의 기본 설정 파일로 사용자가 직접 수정 불가
  • /etc/default/grub 파일과 /etc/grub.d 디렉터리 아래에 있는 스크립트를 읽어서 자동 생성

 

/etc/grub.d 디렉터리

  • GRUB 스크립트를 가지고 있는 디렉터리
  • 이 스크립트들은 GRUB의 명령이 실행될 때 순서대로 실행되어 grub.cfg 파일을 생성

 

/etc/default/grub 파일

  • GRUB 메뉴 설정 내용이 저장되어 있음
  • GRUB 스크립트가 이 파일을 읽어서 grub.cfg에 기록

 

암호 복구하기

  1. 시스템 재시작하기
  2. GREB 편집 모드로 전환하기
    -> GRUB Boot Menu가 출력될 때 재빨리 E를 눌러 편집 모드로 전환
  3. 단일 사용자 모드로 수정하기
    -> 리눅스 커널 정보가 있는 행에서 ‘ro splash $vt_handoff를 ‘rw init=/bin/bash’로 수정
  4. 재시작하기: root 계정으로 동작
  5. 작업 완료 후 재부팅
    -> :reboot -f

 

복구 모드로 부팅하기

  1. 복구 모드 선택하기
    -> GRUB 메뉴 초기 화면에서 ‘Ubuntu용 고급 설정’을 선택
    -> 메뉴가 출력되면 recovery mode를 선택
  2. 복구 메뉴 항목에서 root 항목 선택하기
  3. root 항목을 선택하면 바로 root 프롬프트가 출력됨
  4. 읽기/쓰기 모드로 다시 마운트하기
    -> mount -o remount,rw /
  5. 복구 작업 수행 후 재시작하기
    -> :reboot -f
728x90
반응형