리눅스데브코스 [5주차 - 4]<Linux Booting and Shutdown>

심우열·2023년 5월 6일
0

1. 리눅스 시스템의 부팅

1. 부트 로더 단계

  • 바이오스 단계에서 MBR은 부트 로더를 찾아 메모리에 로딩
  • 부트 로더는 여러 운영체제 중에서 부팅할 운영체제를 선택 할 수 있도록 메뉴를 제공
  • 부트 로더는 리눅스 커널을 메모리에 로딩
  • 리눅스 커널은 /boot 디렉토리 아래에 'vmlinuz-버전명' 의 형태로 제공
  • 리눅스의 대표적인 부트로더로는 GRUB 와 LILO

2. 커널 초기화 단계

  • 커널은 가장 먼저 시스템에 연결된 메모리, 디스크, 키보드, 마우스 등 장치들을 검사

장치 검사 등 기본적인 초기화 과정이 끝나면 커널은 fork를 사용하지 않고 생성되는 프로세스와 스레드 생성

  1. 이 프로세스들은 메모리 관리 같은 커널의 여러가지 동작을 수행
  2. 이들 프로세스는 일반적인 프로세스와 구분되도록 대괄호로 표시하며, 주로 PID 번호가 낮다

3. systemd 서비스

  • 우분투에서 systemd 서비스는 기존의 init 스크립트를 대체한 것으로 다양한 서비스를 동작
  • 각 서비스가 시작하는 과정은 화면에 메세지로 출력
  • 부트 스플래시 화면이 종료되고 메세지가 출력되는 화면으로 전환

부팅 후 메시지 확인

  • 부팅시 출력된 메시지는 dmesg 명령이나 more/var/boot.log 명령으로 확인가능

4. 1번 프로세스

  • 전통적으로 유닉스에서는 init 프로세스가 처음 생성된 프로세스로 PID 1 가짐

5. 로그인 프롬프트 출력

  • 마지막으로 그래픽 로그인 시스템인 GDM(Gnome display manager)을 동작시키고, 로그인 프롬프트 출력

2. systemd 서비스

1. init 프로세스

  • init 프로세스는 스크립트를 순차적으로 실행하여 다른 프로세스를 동작
  • init 는 systemd로 대체
  • upstart 와 관련된 스크립트 파일은 /etc/init 디렉토리에 작업명.conf 파일로 구성되어 있음
  • init와 관련된 스크립트 파일은 /etc/init.d 디렉토리에 있으며 아직 일부 서비스의 스크립트 파일이 남아 있음

2. init 프로세스와 런레벨

  • init은 시스템의 단계를 일곱 개로 정의하여 구분하고 각 단계에 따라 shell 스크립트를 실행하는데, 이 단계들을 런레벨이라고 함

우분투의 런레벨

  • 런레벨별로 실행하는 스크립트 파일은 /etc/init.d 디렉토리에 있느 파일에 대한 심벌릭 링크

3. sytemd의 기본 개념

systemd는 init 방식에 비해 다음과 같은 강점을 가지고 있음

  1. 소켓 기반으로 동작, inetd와 호환성을 유지
  2. shell 과 독립적으로 부팅이 가능
  3. 마운트 제어가 가능
  4. fsck 제어가 가능
  5. 시스템 상태에 대한 스냅샷을 유지
  6. SELinux와 통합이 가능
  7. 서비스에 시그널을 전달 할 수 있음
  8. shutdown 전에 사용자 세션의 안전한 종료가 가능

4. systemd 유닛

  1. 전체 시스템을 시작하고 관리하는데 유닛(unit)이라 부르는 구성 요소를 사용
  2. systemd는 관리 대상의 이름을 '서비스명.유닛 종류' 의 형태로 관리
  3. 각 유닛은 같은 이름과 종류로 구성된 설정 파일과 동일한 이름을 사용
  4. 유닛과 관련한 보다 자세한 내용은 man systemd.유닛명 으로 확인 가능

5. systemd 관련 명령

1. systemd 기반으로 서비스를 시작하거나 종료할떄 사용하는 명령: systemctl

1. 동작중인 유닛 출력하기 : systemctl

2. 전체 유닛 출력하기 : systemctl -a

3. 특정 종류의 유닛만 출력하기 : systemctl -t

4. 유닛 서비스 시작하기 : systemctl start [유닛 이름]

5. 유닛 상태 확인하기 : systemctl status [유닛 이름]

6. 유닛 서비스 정지하기 : systemctl stop [유닛 이름]

6. systemd 와 런레벨

  • 런레벨은 현재 시스템의 상태를 나타내는 한자리 숫자

이에 대응하는 systemd 의 target

현재 런레벨 확인하기 : runlevel

런레벨을 바꾸는 명령 : telinit

7. 단일 사용자 모드로 전환하기: rescue.taget(런레벨1)

  • 시스템에 문제가 있을 경우, 시스템을 rescue.target 유닛(런레벨 1, 런레벨 s)으로 변경하여 점검
  • 윈도우의 안전 모드 같은 것으로, 다중 사용자 모드에서 시스템 관리자만 사용 할 수 있은 단일 사용자 모드로 전환하는 것

rescue 진입

systemctl isolate rescue
systemctl isolate runlevel1
init 1
telinit S

3. 리눅스 시스템의 종료

1. 리눅스를 종료하는 방법

  • shutdowm 명령을 사용
  • halt 명령을 사용
  • poweroff 명령을 사용
  • 런레벨을 0이나 6으로 전환(target 전환)
  • reboot 명령을 사용
  • 전원 끄기

4. 데몬 프로세스

1. 데몬

  • 리눅스의 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스
  • 리눅스 시스템에서 동작하는 각종 서비스를 제공하는 프로세스들이 데몬

2. 데몬의 동작 방식

1. 독자형(standalone)

  • 시스템의 백그라운드에서 서비스별로 항상 동작
  • 자주 호출되는 데몬이 아니라면 시스템의 자원을 낭비할 우려

2. 슈퍼데몬에 의한 동작 방식

  • 평소에는 슈퍼데몬만 동작하다가 서비스 요청이 오면 슈퍼데몬이 해당 데몬을 동작 시킴
  • 독자형보다는 서비스에 응답하는 데 시간이 약간 더 걸릴 수 있지만 자원을 효율적으로 사용한다는 장점

3. 슈퍼데몬

  • 유닉스에서 슈퍼데몬의 이름은 inetd
  • 우분투에서는 보안 기능이 포함된 xinetd를 사용

4. 데몬의 조상

1. systemd 데몬

  • 대부분의 프로세스의 조상 프로세스
  • pstree 명령으로 확인

2. 커널 스레드 데몬

  • 커널의 일부분을 프로세스처럼 관리하는 데몬
  • ps 명령으로 확인했을때, 대괄호로 둘러싸여 있는 프로세스들
  • 예전에는 대부분 k로 시작했으나 요즘은 아님
  • 커널 데몬은 대부분 입출력이나 메모리 관리, 디스크 동기화 등을 수행하며 대체로 PID 가 낮은 번호
  • 커널 데몬을 동작시키는 조상 데몬은 커널 스레드 데몬(kthreadd): PID 2번

5. 리눅스의 주요 데몬

5. 부트 로더

1. 암호 복구하기

1. 시스템 재시작하기

부팅할때, GRUB 메뉴 초기 화면이 출력

2. GRUB 편집 모드로 전환하기

GRUB Boot Menu 가 출력될때 재빨리 e 키를 눌러서 편집모들로 전환

3. 단일 사용자 모드로 수정하기

리눅스 커널 정보가 있는 행에서 'ro quiet splash $vt_handoff' 를 'rw init=/bin/bash' 로 수정

4. f10 키를 눌러 재시작하면 root 계정으로 동작

5. reboot -f 명령으로 시스템을 재시작했을 때, GRUB 화면 출력. 이 상태에서 Enter 키를 눌러 우분투 부팅

2. 복구모드로 부팅하기

  • 어떤 이유에서든 우분투가 부팅되지 않는다면 복구 모드로 부팅하는 것이 유용
  • 복구 모드에서는 root 계정으로 로그인하며 시스템의 복구에 필요한 작업을 수행 할 수 있음

1. 복구 모드 선택하기

  1. 시스템 재시작
  2. GRUB 메뉴 초기 화면
  3. 'Ubuntu용 고급 설정' -recovery mode

2. root 항목 선택하고 로그인 하기

3. 다시 마운트 하기

  • root 파일 시스템이 읽기 전용으로 마운트되었으므로 읽기-쓰기가 가능하도록 다시 마운트하고 작업
mount -o remount ,rw /

3. 재시작하기

작업이 완료되면 reboot -f 명령으로 리눅스를 재시작

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글