리눅스(3)

·2025년 6월 28일

Devops

목록 보기
4/6

1. 리눅스 구조

1) 부트매니저(= 부트로더)

  • 정의 : 보조기억장치에 위치한 운영체제를 주기억장치로 로드하기 위한 프로그램를 말한다.

  • 동작 원리 : 시스템을 부팅하면 바이오스(BIOS)에서 디스크의 첫 번째 섹터(부트섹터)에서 MBR을 읽는다. MBR은 크기가 512byte로 제한되기 때문에 IPL이라는 부트 매니저의 일부가 먼저 실행된다. 실행 후 나머지 부트 매니저의 코드 위치를 분석하여 실행한다.

    • IPL(Initial Program Loader, 초기 프로그램 로더)은 운영체제가 부팅될 때 가장 먼저 실행되는 작은 프로그램이다. 이 프로그램은 부트로더의 일부로서, 운영체제의 커널을 메모리에 로드하고 실행시키는 역할을 한다. 즉, 컴퓨터 전원이 켜진 후 운영체제가 시작되기 전 초기 단계를 담당하는 중요한 부분.
  • 부트매니저의 종류

    • ㄱ) LILO(Linux Loader)
      • LILO 설정은 /etc/lilo.conf. 다만 설정 변경 후 부트로더를 MBR에 다시 쓰기 위해서는 lilo 명령이 필수다.

    • ㄴ) GRUB(GRUB Legacy)
      • GNU 프로젝트에서 만든 부트로더로 LILO와 달리 대화형 인터페이스와 네트워크 부팅을 제공.
      • GRUB 설정은 /boot/grub/grub.conf 로 변경만 하면 됌. 따로 명령어 사용 X.

    • ㄷ) GRUB2
      • GRUB는 공식적으로 MBR를 통한 부트로더 동작만을 지원하고, GPT(GUID Partition Table)은 비공식적으로 지원. 하지만 GRUB2는 둘다 공식적으로 지원.
      • RAID와 LVM을 지원
      • 다양한 파일 시스템 지원 ex) ext2fs,FAT,JFS,HFS+(애플),NTFS(마이크로소프트)
      • 기본 경로는 /boot/grub/grub.conf . 다만 일부는 GRUB Legacy와 동시 설치가 가능하도록 /boot/grub2/grub.conf 를 사용


2. 주요 디렉토리 구조

1) 리눅스 파일 시스템 표준

  • 리눅스 파일 시스템 표준은 BSD파일 시스템 계층 구조 기반의 리눅스 디렉토리 구조 표준.

2) 주요 디렉토리

  • / : 리눅스 파일 시스템의 최상위 디렉토리

  • /bin/ : 모든 사용자가 사용할 수 있는 주요 명령어들 ex) ls, cp, mkdir, mv, rm, cat 등

  • /boot/ : 커널 파일 or initrd 등 부팅에 필요한 파일들이 위치.

  • /dev/ : 하드, cpu, 네트워크, 입출력장치 등 디바이스 파일들이 위치.

  • /etc/ : 환경 설정 파일들.

  • /home/ : 로그인한 사용자 전용 홈 디렉토리.

  • /lib/ : 시스템이 설치된 각종 라이브러리 파일들이 위치.

  • /media/ : CD-ROM, 이동식 디스크가 시스템에 마운트 시 이 디렉토리를 사용.

  • /mnt/ : 다양한 디바이스가 마운트할 때 임시로 사용.

  • /opt/ : 추가 애플리케이션 sw패키지

  • /proc/ : 메모리에 존재하는 모든 프로세스들이 파일 형태로 매핑.

  • /root/ : root 사용자의 홈 디렉토리

  • /sbin/ : shutdown, ifconfig, 시스템 점검과 복구, root가 사용하는 시스템 관리 명령어

  • /tmp/ : 공용 디렉토리

  • /usr/ : 사용자들이 사용하기 위해 설치한 주요 명령어.

  • /usr/bin/ : 대부분의 사용자 명령어.

  • /usr/include/ : c,c++등 프로그래밍 언어가 사용하는 헤더 파일이 위치

  • /usr/lib/

  • /usr/sbin/

  • /usr/src/ : 다양한 바이너리의 소스코드가 위치.

  • /var/

  • /sys/

  • /run/


3. 부팅과 셧다운

  • 부팅이란 "컴퓨터 전원이 켜진 후 사용자가 시스템을 사용할 수 있도록 운영체제를 기동하는 절차"를 의미.
  • 부팅을 위해선 BIOS가 MBR를 읽으며, 부트로더(매니저)를 실행. 부트로더는 지정된 위치에서 커널을 메모리에 읽어 들인 후 초기화 프로세스를 실행.
  • 상세 절차
      1. 시스템 시작 및 하드웨어 초기화
      • 메인보드의 롬 영역에 저장된 프로그램으로 시스템을 켜면 가장 먼저 실행된다.
      • 하드웨어 인식과 각 장치들의 사용을 위한 준비를 하는 등 POST(Power On Self Test) 기능을 수행.
      • POST 기능이란 "컴퓨터가 전원이 켜진 후 테스트 과정을 화면에 보여줘야 하기 때문에 그래픽 카드를 먼저 확인 후. 메인보드, 각 주변장치가 동작을 하는 지 테스트하고 그 과정 및 결과를 모니터에 출력"이다.

      1. 1단계 부트로더(boot.img)
      • 1단계 부트로더는 1.5단계(core.img)로 점프하는 역할을 수행. ‼️ 왜??? 1단계 부트로더가 위치한 0번 섹터는 512바이트에 불과하므로, 파일 시스템이 해석할 수 있는 기능을 담기에는 턱없이 부족하다. 그렇기에 1.5단계로 점프하는 역할을 수행한다.
      • 1.5단계 부트로더(core.img)는 0번 섹터 이후 다음 파티션 이전의 공간에 위치하며 ext, fat, NTFS와 같은 파일 시스템 드리이버를 포함할 수 있다. 또한 2단계 부트로더를 로드한다.

      1. 2단계 부트로더
      • 2단계 부트로더는 파일 시스템 상에 위치한다. 부트매니저의 conf 설정에 따라 선택할 수 있는 운영체제 목록을 표시하며 사용자가 운영체제를 선택하면 해당 OS를 위한 커널을 메모리에 로드하고 해당 커널의 제어권을 전달.

      1. 커널
      • "커널"은 하드웨어와 소프트웨어를 관장하는 핵심 모듈.
      • 커널은 한번 램에 로드 되면 시스템이 Reboot, Halt때까지 상주.
      • 부트매니저로 부터 제어권을 이어받은 커널은 /sbin/init의 프로그램을 실행.

      1. init 프로세스
      • init 프로세스는 부팅을 위해 필요한 초기화 작업을 실제로 수행.
      • init 프로세스는 /etc/inittab 파일을 읽어 실행 레벨을 확인하고 그에 맞는 스크립트를 실행한다.
        레벨0 : 시스템 종료
        레벨1 : 단일 사용자모드, 시스템복원모드로 root권한 셸을 얻을 수 있다.
        레벌2 : 다중 사용자모드, 네트워크기능 X
        레벌3 : 다중 사용자모드, 네트워크기능 O
        레벌5 : X윈도우를 사용하는 다중 사용자모드
        레벌6 : 재부팅

      1. systemd
      • systemd란 유닛(unit)이라는 단위로 시스템 및 서비스를 제어하는 관리자
      • systemd는 부팅 시 여러 서비스 스크립트를 병렬로 실행할 수 있어 리부팅 단축 시간을 줄일 수 있다. 다만 서비스간 의존성이 있는 경우 순차적으로 실행된다

      1. 사용자 프롬프트
      • 모든 초기화가 완료되면 실행 레벨에 따라 다르지만 일반적으로 x-윈도우, 터미널을 통해 사용자의 입력을 받을 준비가 완료된다.

4. systemd

  • systemd는 이전 리눅스 버전의 SysV init 시스템을 대체하기 위한 시스템 및 서비스를 위한 매니저 역할을 수행한다.
    ⁉️ 역할 풀어내면 시스템의 부팅, 서비스 관리, 프로세스 감시 등을 통합적으로 관리하는 핵심 역할.

  • 1) 특징

    • 부팅시 서비스들의 병렬로 시작할 수 있는 기능을 제공
    • 데몬이 필요한 순간 실행해 시스템 리소스를 절약할 수 있는 온디맨드 액티베이션 기능(On-Demand Activation)을 제공
    • 의존성을 고려해 서비스의 시작 순서를 제어할 수 있는 기능을 제공
  • 2) systemd구조

    • 유닛(Unit)
      • Service Unit : 시스템상에서 동작하는 서비스 또는 데몬과 연관된 유닛
      • Target Unit : 다수의 유닛을 하나의 그룹으로 관리할 수 있는 유닛
      • Device Unit : 커널이 인식 가능한 장치와 연관된 유닛
      • Mount Unit : 파일시스템의 마운트 포인트를 나타내는 유닛
      • Path Unit : 파일시스템의 파일과 디렉토리와 연관된 유닛
      • Socket Unit : 프로세스간 통신을 의미하는 IPC를 위해 사용하는 소켓과 연관된 유닛
      • Timer Unit : systemd 타이머와 연관된 유닛
    • 유닛 파일의 구조
      • unit
      • unit type : 유닛의 특성을 기술
      • install : systemctl enable / disable 명령어로 유닛을 제어할 때 필요한 정보를 담음.
  • 3) systemd의 주요 명령어

    • ㄱ. 서비스관리

      • 서비스 시작 : systemctl start 이름.service
      • 서비스 중지 : systemctl stop 이름.service
      • 서비스 재시작 : systemctl restart 이름.service
      • 서비스 실행중인 경우에만 재시작 : systemctl try-start 이름.service
      • 서비스 설정 갱신 : systemctl reload 이름.service
      • 서비스 상태 확인 : systemctl status 이름.service
      • 서비스 목록 확인 : systemctl list-units --type 이름.service
    • ㄴ. 타겟 유닛

      • 기본 타겟 확인 : systemctl get-default
      • 현재 로드된 모든 타겟 확인 : systemctl list-units --type target
      • 기본 타겟 변경 : systemctl set-default 이름.target
      • 현재 타겟 변경 : systemctl isolate 이름.target
      • 복구 모드 변경 : systemctl rescue
      • 응급 모드 변경 : systemctl emergency
    • ㄷ. 전원 관리

    • 시스템 끄기 : system halt ex) 테스트용, 전원 유지가 필요한 경우로 디버깅, 일부 서버 환경

    • 시스템 전원 끄기 : system poweroff ex) 평소 컴퓨터나 서버를 완전히 끌 때 사용

    • 시스템 재시작 : system reboot

    • 시스템 서스펜드(절전) : system halt

    • 시스템 하이버네이트(최대 절전) : system hibernate

    • 시스템 서스펜드+하이버네이트 : system hybrid-sleerp

    • ㄹ. 원격 제어

      • 원격 시스템에 실행 중인 sshd 서비스에게 명령얼 전달해 원격시스템의 서비스를 제어할 수 있다.
      • systemctl --host(-H) 명령어를 사용

5. 파일시스템의 이해

  • 1.개요
    • 1) 파일 시스템이란 "디스크에 사용자이 데이터를 효율적으로 저장하기 위한 파일이나 디렉토리를 조직화한 체계"를 의미.
    • 2)사용자의 데이터는 파일 단위로 관리가 되며, 디스크에 저장할 때 레코드 단위, 블록 단위로 저장된다. 각 파일은 디렉토리에 속하며 그룹을 생성할 수 있기 때문에 많은 파일을 체계적으로 관리할 수 있다.
    • 3) 파일 시스템은 파일 입출력시 발생하는 오류에 대하여 복구할 수 있는 기능을 제공
    • 4) 디스크 입출력은 메모리에 비해 속도가 느리기 때문에 파일 시스템은 캐시 기능을 제공해 디스크의 입출력을 최소화한다.

    1. 리눅스 파일시스템의 구조
    • 1) 부트섹터와 블록 그룹
      • 리눅스 파일시스템중 대표적으로 ext2는 부트섹터와 여러개의 블록 그룹들로 구성된다.
      • 블룩 그릅은 모두 같은 갯수의 블록 갯수를 가진다. 다만 마지막 블록 그룹은 제외

    • 2) 블록 그룹
      • 블록 그룹은 여러개의 블록으로 구성되며, 하나의 파일이 여러 블록에 나뉘어 저장되야하는 경우 단편화를 최소화 하기위해 동일 블록 그룹에 위치시키고자 스케줄링한다.
      • 블록 그룹은 슈퍼 블록, 그룹 디스크립터 테이블 ,블록 비트맵, 아이노드,실제 데이터를 담은 블록 으로 구성됨.

    • 3) 슈퍼 블록
      • "파일 시스템의 전체 내용을 담고 있는 블록"으로 1KB만 사용.
      • 블록의 크기, 총 블록의 갯수, 아이노드의 갯수, 그룹내 블록의 갯수, 그룹내 아이노드의 갯수에 대한 정보를 포함.

    • 4) 그룹 디스크립터 테이블
      • 블록 그룹에 대한 정보를 포함하며 32byte 크기인 그룹 디스크립터의 목록이다.
        만약 블록 크기가 1kb(1024)라면 32개의 그룹 디스크립터가 포함될 수 있다.
      • 그룹 디스크립터 테이블은 블록 비트맵의 블록 번호, 아이노드 비트맵의 블록 번호, 첫 번째 노드 테이블의 블록 번호, 그룹 안에 있는 빈 블록 수, 그룹안에 있는 아이노드의 수, 그룹안에 있는 빈 디렉토리의 수 이다.

    • 5) 블록 비트맵
      • 블록 비트맵은 블록의 할당 여부를 비트로 표현.
      • 각 비트에 해당하느 블록이 사용중이면 1, 사용중이지 않으면 0 으로 나타낸다.

    • 6) 아이노드 비트맵
      • 아이노드의 할당여부를 나타냄.

    • 7) 아이노드 테이블
      • 단일 블록이 아닌 연속된 블록으로 이뤄져 있으며. 각 블록은 미리 정의된 아이노드 갯수를 포함
      • 아이노드의 첫 번째 블록의 번호를 그룹 디스크립터 테이블에 저장.
      • 모든 아이노드의 크기가 128byte로 동일.
      • 만약 아이노드의 테이블의 블록이 1024byte라면 아이노드를 8개 포함할 수 있다.

    • 8) 아이노드
      • 아이노드는 "실제 파일과 디렉토리의 데이터 위치를 알고 있는 자료구조"이다.
      • 아이노드는 Inode Number, 파일모드, 하드링크 수, 소유자ID, 파일 크기, 마지막 접근, 마지막 수정, Inode 수정, 데이터 블록의 수의 정보를 갖는다.
      • 모든 파일과 디렉토리는 각 1개의 아이노드를 가지며, 고유한 주소를 갖음.
      • 아이노드의 주소를 알고 있디면, 해당 아이노드가 가리키는 블록 그룹을 찾아 갈 수 있다.
      • 아이노드 1번은 슈퍼 블록, 2버은 루트 디렉토리 등 1~10번은 정해져 있음.
profile
# h

0개의 댓글