리눅스 부트 프로세스

eunyeong·2023년 1월 5일
0

Linux_Basic

목록 보기
1/4

init 프로세스 부팅


1. BIOS/UEFI
시스템 펌웨어가 특정프로그램으로 하드웨어를 점검하는 POST(Power On Self Test)를 진행. 손상된 경우 부팅되지 않음. MBR 파티션의 첫번째 섹터를 읽고 부터 로더(Boot Loader)를 찾음. 이를 메모리에 적재한 뒤 시스템 제어권을 부티 로더에게 전달.

  1. 부트 로더 커널

    이 화면에서 'e'키를 누르면 /boot/grup2/grup.cfg 파일의 내용이 출력되고 설정 값을 변경하여 변경된 값으로 커널을 진행할 수 있음. root 패스워드 복구나 타겟 유닛 지정 가능.
    커널 목록을 선택하면 /boot에 vmlinuz 커널 파일을 메모리에 적재시키고 시스템 제어권을 커널에게 전달.
  1. 커널(Kernel)
    /boot 디렉토리에 존재하는 initramfs 압출파일을 해제. 램 디스크 초기화를 진행하고, 루트 파일 시스템을 임시로 마운트. 시스템 제어권을 init 프로세서에게 전달.

  2. init
    PID 1번이 할당되고 필요한 모든 프로세스를 실행. 런 레벨을 결정하고, 스왑이나 네트워크 설정을 초기화. 런 레벨을 실행하고 사용자에게 로그인 화면을 출력함.

systemd 부팅


1) BIOS ~ systemd
init 프로세스와 동일
default.tartget을 활성화하고 의존성 관계에 있는 유닛들을 모두 활성화

2) default.target
multi-user.target 또는 graphical.target으로 연결될 심볼릭 링크 파일. 어떤 것으로 부팅 진행할 지 결정.

3) graphical.target
init 프로세스의 런 레벨 5와 매핑됨. graphical.target이 활성화되기 전에 multi-user.target이 먼저 활성화되야함.

4) multi-user.target
커멘트 라인을 제공하는 다중 사용자 모드.
init 프로세스의 런 레벨 3과 매핑됨.
multi-user.target이 활성화되기 전에 basic.target이 활성화되야함.

5) basic.target
커널 메시지와 관련된 서비스를 시작하거나 모듈을 로드.
basic.target이 활성화되기 전에 sysinit.target이 활성화되야함.

6) sysinit.target
시스템 마운트, 스왑, 커널의 추가 옵션을 실행하는 서비스를 시작. 활성화되기 전에 local-fs.target이 활성화되야함.

7) local-fs.target
/etc/fstab에 등록된 마운트 정보로 파일시스템을 마운트함. 활성화되기 전에 local-fs-pre.target이 활성화되야함.

systemd 종료

systemctl poweroff
systemctl reboot

systemd 타겟 유닛

  • 사용자가 사용 가능한 타겟 유닛
    1) emergency.target
    : 최소한의 환경을 제공하는 긴급 쉘을 제공
    읽기 전용으로 마운트 되어있기에 수정 시에는 읽기쓰기 전용으로 다시 마운트 한 뒤 진행
    2) rescue.target
    : 단일 사용자 환경을 제공하는 복구 쉘을 제공함. 네트워크 인터페이스는 비활성화되어 있고, 여러 명의 사용자가 시스템에 로그인 할 수 없도록 제한하는 단일 사용자 모드.
    3) multi-user.target
    : CLI 환경을 제공하여 쉘에서 명령어를 입력할 수 있음. 모든 파일시스템이 마운트 되어 있고, 대부분의 서비스가 실행된 상태. (<-> rescue.target)
    4) graphical.target
    : GUI 환경을 제공하여 그래픽 도구와 터미널 프로그램을 사용하여 쉘을 사용할 수 있음. 기본적으로 제공되지 않기 때문에 GNOME Desktop 패키지를 설치해야 함.

타겟 유닛 제어

1) who -r로 현재 사용중인 타겟 유닛 확인
2) default.target에 연결된 타겟 유닛 확인

  • systemctl get-default
    3) default.target 설정
  • systemctl set-default target-unit
  • 기존 traget이 삭제되고 새로운 파일이 링크됨
    4) 현재 사용 중인 타겟 유닛을 런타임 상태에서 변경
  • systemctl isolate target-unit
    5) 시스템 부팅 과정 중 타겟 유닛 지정
  • 'e'키를 눌러 편집 모드로 진입하고 linux16 마지막에 'systemd.unit=target-unit'을 입력함

Root 패스워드 복구

1) 부트 로드에서 부팅할 커널 항목 선택
2) 'e'키를 눌러 편집모드에서 linux16 마지막에 'rd.break'를 눌러 램 디스크 초기화를 중단함.
3) ctrl+x를 입력해 switch_root#으로 진입함.
4) mount -o remount, rw /sysroot를 통해 읽기쓰기로 다시 마운트 함
5) chroot 명령을 통해 /sysroot를 루트 디렉토리로 변경함. 이때 passwd 명령으로 패스워드를 변경
6) 파일에 대한 레이블정보가 전부 제거되었기 떄문에 touch /.autorelabel 와 같이 빈파일을 생성하여 레이블을 자동으로 부여되도록 함. 레이블 후 해당 파일은 삭제됨.

파일 시스템 문제 복구

/etc/fstab 파일은 자동 마운트 시켜주는 파일임.
잘못된 값을 입력하는 경우 발생되는 문제점과 해결방법에 대해 알아봄
1) 유효하지 않은 UUID 값 또는 존재하지 않은 파티션 이름을 지정할 경우

  • /etc/fstab에 지정된 값과 blkid 출력 값을 비교하여 잘못된 부분이 있다면 수정하고 재부팅하면 됨

2) 존재하지 않은 마운트 포인트를 지정할 경우

  • 마운트 포인트를 자동으로 생성되기 때문에 부팅이 정상적으로 완료됨

3) 파일시스템 유형이 일치하지 않을 경우

  • /etc/fstab에 지정된 값과 blkid 출력 값을 비교하여 잘못된 부분이 있다면 수정하고 재부팅하면 됨

4) 잘못된 마운트 옵션을 지정할 경우

  • cat /etc/fstab으로 확인하고 해당 부분을 수정
profile
아무것도 모르는 초보

0개의 댓글