03. 리눅스 부팅 과정 - 이론

prana·2023년 3월 6일
0

Linux

목록 보기
16/28

출처 : 유튜브 따라하면서 배우는 it- 리눅스 고급과정

목차

  1. 리눅스 전통적인 부팅 과정
  • 리눅스 부팅 과정 / 부팅 관련 파일
  1. 런 레벨
  • 런 레벨이란?
  1. 런 레벨 관련 며령어
  • 런 레벨 확인 명령어/ 런 레벨 변경 명령어
  1. 따라학 it
  • 부팅 관련 파일 설정해보기
  • 런 레벨 변경해보기

리눅스의 전통적인 부팅 과정

  • 전원을 켜게 되면 POST라는 과정을 거침.

  • (라우터 할 때도 이런 과정, 컴퓨터가 수행하는 과정 리눅스가 수행하는 게 아님. 윈도우도 이걸 거친다는 말임. 하드웨어 제대로 안 되어 있으면 제대로 부팅이 안 되는 경우가 있음.)

  • BIOS : basic 입출력 시스템. 부팅 장치를 검색함. 하드웨어/usb/원격지에 부팅 장치가 있는지. 하나씩 찾음. bios설정에 보면 순서를 지정할 수 있음.

  • bios에서 부팅 순서 정하는 것 가능

  • 검색 되었으면

  • Grub이라는 부트 로더(프로그램)가 실행(centos에서는)

  • Grub, 부팅할 커널(장치)을 선택할 수 있게 함.

  • 실행할 커널의 목록을 보여주게 됨.

  • 커널이 메모리에 올라가게 되고, PID 1번 프로세스가 실행. 예전에는 init, 요즘에는 systemd

  • PID 1번 : 기타 필수 프로그램 실행

  • 부팅 완료


Basic Input/Output System - BIOS

  • 하드웨어, cpu 관련 설정
  • Boot : 부팅장치를 검색 순서 등을 지정할 수 있다. (ex: 여러분들 윈도우 다시 설치, 포맷할 때, USB에 부팅장치 만든 다음에 USB를 먼저 검색하게 해야함)

  • Grub 이라는 것이 실행 (복잡하게 생김)
  • cat /boot/grub2/grub. cfg | grep Core
  • 이 내용과 같음을 알 수 있다.
  • 커널 버전을 업그레이드 하고 싶다, 새로운 커널을 다운 받고 이러한 설정 파일에 추가를 해주면 된다는 것.
  • 2020년 기준 Centos에는 3.10, (최신버전 4.1 추가 설치 실습해보기)

부팅할 때 나오는 메시지 - /var/log/boot.log


부팅될 때 메시지가 지나갈 때

  • 출력될 때 boot.log 로그 메시지들이 전부다 저장되어있게 된다. 제대로 부팅이 안 될 때, 로그 파일을 확인해보고 로그파일 내용을 보고 잘못된 것을 바로 잡을 수 있다.

런 레벨이란?

시스템의 상태를 나타내는 런 레벨

  • 리눅스가 부팅할 때 시스템의 상태를 나타냄
  • 0~6번까지 있음
레벨설명
0halt(시스템 종료)::Run-level을 0으로 변경하면 시스템 종료
11- 다른 사람이 동시에 접속해서 사용할 수 없음. ex)시스템 점검, 패스워드 분실 시 복구 등일 때

Single User Mode:: 시스템 복원 모드::

기본적으로 "관리자 권한"을 획득(주로 파일 시스템 점검, 패스워드 분실했을 때 또는 복구할 때 사용)
22- 일부 서비스가 제공이 안 되는 런레벨

Multi User Mode without NFS(Network File System:: 공유파일)

- 네트워크를 사용치 않는 텍스트 유저 모드
33 - 텍스트 유저모드이기 때문에, 콘솔창 하나만 떠있는 런레벨이라고 생각

- Full multi User Mode

- 거의 모든 자원 사용 가능한 ⭐텍스트 유저 모드
4Unused (사용x)
5level 3과 비슷하나 x윈도우가 실행된 그래픽 유저 모드(⭐그래픽 환경도 제공해줌)
66- Reboot(시스템 재부팅) ::Run-level을 6으로 변경하면 시스템 재부팅

-> 종료됐다가 다시 부팅됐다가 3이나 5로 다시 변경이 됨
  • 런 레벨은 숫자 또는 문자로 표현된 시스템의 상태
  • 런 레벨은 서비스와 사용자가 사용할 수 있는 자원들에 대해 정의하고 있음
  • 기타 필수 프로그램 실행을 해당 런 레벨에 맞는 프로그램들만 실행시켜줌.

런 레벨 확인 명령어

현재 및 이전 런 레벨을 확인하는 who -r 명령어

  • who -r 로 확인 가능

런 레벨 스크립트를 실행하는 init 명령어

  • init 런레벨 하면 ex) 0하면 종료, 6이면 시스템 재부팅, 싱글유저모드이면 1번
  • cent6만하더라도, run level init 스크립트가 있었음
  • 런 레벨에 맞는 rc 스크립트가 있었다.
  • 특정 파일들이 있었음. K로 시작하면 이 해당 런레벨에서 이 프로그램은 끄는 것.(kill) , S로 시작하면 이 런레벨에서 실행함.
  • 이전 Centos(5,6)에서는 전부다 이런 rc스크립트에서 관리를 함.
  • 다른 곳에서도 2개... 예전에는 파일들이 정말 많았음.
  • 이제는 init 쓰지 않고 🌟systemd로 넘어감.
  • 호환성을 위해 몇 개가 남아있는 것.
  • systemd를 통해 많이 배워볼 예정!

실습

  1. 부팅 관련 파일 설정해보기
  • 부팅 과정에서 살펴본 여러가지 파일들을 직접 설정해보고 확인
  1. 런 레벨 변경해보기
  • 특정 상황을 가정하고 그 상황에 맞는 런 레벨로 변경해보기

1. BIOS 모드로 부팅

  • https://prolite.tistory.com/577 을 참조하여 BIOS 모드로 진입한다.

  • Boot : 부팅장치를 검색하는 순서가 나와있다.

  • USB 먼저 할 지, 하드디스크를 먼저할 지 찾게 되는 것.

  • 집에서 vmware 할 때 가상머신 안되는 사람은 cpu의 가상화 기능이 꺼져있어서 그럼.

  • BIOS가 부팅장치를 어떻게 찾냐면, HxD라고 있는데 실제 16진수로 되어있는것을 볼 수 있음. 윈도우에서는 연결프로그램을 이용해서 특정 프로그램으로 실행되게 할 수 있음.

  • (상식) 파일을 구분하는건, 파일의 내용. 윈도우에서는 실행 파일 등 exe 파일들은 MZ.. 로 시작

  • 파일이든, 디스크든 16진수로 볼 수 있음.
  • USB든, 이런 곳에서 맨 첫번째 공간에 512바이트에 이런 내용이 들어있으면 부팅 장치로 인식함. 맨 처음 512바이트를 섹터라고 하고, 디스크 관리할 때 배움.
  • 섹터 0번부터 9억... 까지 여러가지 섹터가 있음.
  • 전부 다 저장되어 있음. 파일을 복구시킬 수도 있음.
  • 이런 공간을 MBR이라고 부름.
  • 부팅 매체에 MBR에 설치되어 있다면 부팅 장치로 인식.
  • 0번섹터에 저장되어 있게 됨. 부트 코드가 들어가있음. (446byte정도) 그 다음 파티션 테이블, 매직넘버,
  • 매직넘버를 나타냄
  • 한 줄이 16바이트, 총 64바이트가 파티션 테이블 정보.
  • 제 본체 PC의 파티션 정보

  • 총 3개로 나뉘어져 있음. 파티션 하나당 16바이트씩 쓰게 되어 있음
  • 파티션은 최대 몇 개까지? 주 파티션(4개까지) 64바이트까지이기 때문에.
  • 확장 파티션을 이용하면 더 쓸 수 있음.

  • POST -> 부팅 매체 (MBR: 코드값)

  • ex) 윈도우 설치 시 USB를 부팅 USB로 만든다고 하는데, USB의 0번 섹터에 이런 과정을 거치기 위해서
  • 이미지파일 가지고 설치. 이런 작업들을 생성 (MBR) -> BIOS가 해당 장치를 부팅 장치로 인식할 수 있으니까.

부트 프로세스

🖥️ 부팅 과정

전원 ON-> BIOS 실행 -> GRUB(부팅 로더) 실행 -> swapper 프로세스
-> init 프로세스 -> Login 프롬프트 출력

  • /boot/grub/grub.conf 들어가보기

  • vi /boot/grub2/grub.cfg

  • 87번라인부터

  • 커널 파일을 실행하라고 지정이 되어있음 /vmlinuz-3.10.0 ~~~~

  • 메뉴를 선택하게 되면, /vmlinuz ~~ 이런 커널을 실행하라.

우리가 만약 커널 버전을 바꿔주게 되면, 다른 버전의 커널을 실행시킬 수가 있음.

  • 윈도우/리눅스로도 부팅할 수 있게(멀티 부팅) 따로 지정할 수 있다.
  • ex) 오픈스택할 때 가상머신으로 돌리기 느리면, 가상머신으로도 리눅스로 부팅할 수 있게 할 때, 여기에 설정.
  • 메뉴 엔트리 추가해서, 윈도우 추가해준다음에 윈도우 커널을 지정해주면 됨.
  • 커널 버전만 업그레이드 할 것

  • 부트 폴더 들어가서, 보면 부팅할 수 있는 커널 파일들이 존재
  • 아래는 정상적으로 부팅했을 때 실행되는 커널 , 위에는 rescue 모드로 부팅했을 때
  • 커널을 새로 설치, /boot/grub/grub.cfg에 메뉴를 추가해주면 새로운 버전의 커널로 부팅할 수 있다.
  • 네트워크 설정이 되어있어야 한다.
    vi /etc/sysconfig/network-script/~ 여기 들어가서 onboot=yes로 하고 네트워크 restart시켜줌 (구글링 필요)


1. 커널 버전 확인

  1. 커널 이미지 인터넷 상에서 다운

🚨 2020년도 내용이라 없을 수 있음...
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvg https://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum -y install yum-plugin-fastestmirror
yum --enablerepo=elrepo-kernel install kernel-ml
y로 대답

다 했다고 가정하고 다운 다 받았다고 하면,

  • 없던 커널 이미지 파일이 더 생김. 5.4버전이 최신버전

  • /boot/grub/grub.cfg에 추가된걸 확인할 수 있다.

  • 재부팅 init 6 -> 재부팅되게 된다.

  • 기존에 없던 커널이 생겨서, 좀 더 높은 버전으로 업그레이드 할 수 있다.

  • 기존의 커널 필요없을 수도 있는데,

    이전 커널 이미지 삭제
    yum remove [커널 버전]
    yum.conf 파일 수정
    installonly_limit=5 #5개까지 업데이트를 유지하겠다.


런레벨 변경 실습

  • 런레벨 5: 모든 기능 제공 + 그래픽 환경 모드 제공

  • 시스템 종료 상태 0은? -> init 0 , init 6는 재부팅

  • init 3 : 그래픽 지원이 안되는 모드

  • 여러분들이 운영체제 설치할 때, 데스크탑 버전이 아닌 미니멀 버전으로 설치하면 이렇게 뜬다.

  • who -r 하면 3번으로 뜨는 것을 확인. 시간은 현재 런 레벨로 변경한 시간. 이전에 변경한 런레벨까지 볼 수 있다.

  • init 5해서 그래픽 모드로 들어가기

  • vi /etc/inittab이라고 하는 이 파일에, 기본 런레벨이 설정되어있었음. 부팅되었을 때 이 런레벨로 해놔라. init프로세스 대신 systemd로 넘어가는 중.
    inittab 거의 더 이상 사용하지 않음

  • systemd 에서는 target을 사용


관리자만 로그인 되어야만 하는 그 상태 - run level 1

(root 사용자 패스워드를 초기화 해야하는 경우)

  • 만약 root 사용자의 패스워드를 모른다면? -> 재부팅을 했을 때. run level1로 들어가는 방법은?
  • 알파벳 e : 메뉴 설정 화면으로 변환 ,
  • grub.conf 에 있는 내용을 보고 있음. 수정해주면 싱글 유저 모드로 변환된다.
  • 중간 왼쪽에 있는 ro -> rw로 변경(read only에서 쓰기도 가능하도록)

  • rhgb quiet \ 이렇게 된 걸 삭제하고, init=/bin/bash
  • esc 누르면 초기화됨. 개행되면서 역슬래시가 자동으로 됨.
  • ctrl x 누르면

이런 환경으로 부팅이 되게 됨. 바로 관리자 프롬프트가 뜸. # 관리자로

  • 관리자 패스워드를 변경시켜주면 됨. 패스워드 까먹어도 이렇게 부팅하면 관리자 패스워드를 변경시켜주면 된다. passwd 별도로 설정해주면 됨.
  • 아니면 /etc/passwd passwd 필드를 지워버리면 로그인할 때 물어보지 않음.
  • passwd -d옵션에서 패스워드 지워주는게 나을듯.

재부팅하자...

  • pass 환경변수에 등록 안되면 직접 등록 해야 함.
    안되면?!!
  • /sbin/init 6 이렇게도 안되면?

touch /.autorelabel
exec /sbin/init 하면 됨!

  • 재부팅되는 동안 잠깐 기다리기
  • 패스워드 복구 방식은 다른 방법도 있고 런레벨 변경하는 방법은 이렇게. 런레벨 1번에서 하는 방법을 배움.

시스템 부팅 관련 명령어

  • shutdown : rc 스크립트를 실행, init 명령어와 비슷한 기능을 수행

    • init과는 다르게 로그인 중인 모든 사용자에게 종료 시기를 알려준다.

      shutdown -r : 재부팅
      shutdown -h : 종료
      shutdown -t : 시간 지정

    • 공지사항 같이 사용자들에게 알려줄 수 있음.
    • 종료되어야 하는 프로그램들을 정상적으로 종료하고 컴퓨터를 끔.

    그렇지 않은 명령어들

  • 시스템에 문제가 좀 생길 가능성이 있음.

  • halt, poweroff : rc0 스크립트들을 실행하지 않으므로 해당 프로세스가 있으면 문제가 발생할 수도 있다.

  • reboot : 기본적으로 시스템을 런 레벨 3으로 설정하면서 시스템을 즉시 종료시킨다.
    rc0 스크립트들을 실행하지 않으므로 해당 프로세스가 있으면 문제가 발생할 수도 있다.

0개의 댓글