220817 TIL 리눅스 디스크 관리

sundays·2022년 8월 17일
0

LVM

Logical Volume Manager
Linux 저장 공간을 효율적이고 유연하게 관리하기 위한 Kernel 기능

  • LVM vs. 기존 방식

    • 기존 방식은 디스크( 저장 장치, storage )를 파티셔닝 한 후 O/S 영역에 마운트하여 read/write 수행
    • 단점 - 저장 공간의 크기가 고정되어서 증설/축소가 어렵다.
    • 기존 방식의 단점을 보완하기 위해 LVM 구성
    • LVM은 파티션 대신에 volume이라는 단위로 디스크( 저장 장치 )를 다룬다.
    • 디스크( 저장 장치 )의 확장, 변경에 유연하고 크기 변경할 때 기존 데이터 이전이 필요 없다.
  • LVM 장점

    • 유연한 용량 조절
    • 크기 조절을 위한 storage pool
    • 편의에 따른 장치 이름 지정
    • dist striping, mirror volume등 제공
  • LVM 구성

    • PV - Physical Volume, 물리적 volume
      실제 디스크 장치를 분할한 파티션된 상태
      PV는 일정한 크기의 PE( Physical extent )들로 구성

    • PE - Physical extent, 물리적 확장
      PV를 구성하는 일정한 크기 블록
      보통 1 PE는 4 MB에 해당
      PE와 LE는 1 : 1 대응

    • VG - Volume Group, 볼륨 그룹
      PV들이 모여서 생성되는 단위
      사용자는 VG를 원하는 크기로 쪼개서 LV로 만들어 사용

    • LV - Logical Volume, 논리적 볼륨
      사용자가 최종적으로 사용하는 단위
      VG에서 필요한 크기로 할당받아 LV 생성
      최종적으로 mount하는 대상은 LV

  • LVM 생성 과정

    • 기존 파일 시스템 종류 변경 - fdisk 명령
    • PV 생성 - pvcreate 명령
    • VG 생성 - vgcreate 명령
    • VG 활성화 - vgchange -a y 명령
    • LV 생성 - lvcreate 명령
    • LV에 파일 시스템 생성 - mkfs 명령
    • LV 마운트 - mount 명령
  • LVM 적용을 위한 패키지 설치 필요
    LVM 패키지 - lvm2

Linux 부팅 과정 이해

1. booting

  • 초기 컴퓨터 전원 on을 하는 시점에는 메모리의 내용은 아무것도 없는 상태이다.
  • 실제 컴퓨터를 사용하기 위해서는 O/S가 동작하여야 사용할 수 있는데 초기 전원 on 시점에 - - O/S가 동작할 수 있도록 하는 단계를 O/S booting 이라고 한다.
  • booting == O/S 실행

2. Linux booting 과정

  1. 전원 on

  2. BIOS( Basic Input/Output System ) 실행

    • 컴퓨터 ROM 또는 flash memory에 저장된 프로그램
    • 컴퓨터 상태 점검 - CPU/Memory/I/O Device
    • 부트 로더 프로그램 로드
      • 시스템 디스크( / 파티션 )의 MBR( Master Boot Record ) 영역에 저장되어 있는 프로그램
      • 부트 로더 프로그램 - O/S를 memory로 로드 하는 프로그램
      • Linux Kernel 저장 위치 - /boot 디렉토리에 vmlinuz~으로 시작하는 이미지 파일
  3. 부트 로더 실행

    • Linux Kernel 로드 - /boot/vmlinuz-<kernel 버전>
      현재 사용중인 Linux Kernel 정보 확인 - uname -a 명령
    • 부트 로더 실행시 원하는 Linux Kernel을 설정할 수 도 있다.
    • 부트 로더
      • GRUB - 현재 사용하는 부트로더
      • LILO
  4. 커널 초기화

    • Linux Kernel 실행
    • 커널 초기화 과정
      • memory 구성 초기화
      • I/O Device 초기화
      • 시스템 동작을 위한 프로세스 생성 및 초기화
      • 초기화 메시지 확인 명령 - dmesg 명령
  5. systemd 서비스 실행

    • systemd
      • 1번 프로세스
      • daemon 프로세스
    • booting level
      • booting 방식 및 모드 의미
      • CLI 모드 booting
      • GUI 모드 booting - 현재 사용하는 배포판이 사용하는 booting 모드
  6. 로그인 shell 실행( CLI 모드 booting ) 및 프롬프트 표시

systemd

  • Linux 최상위 프로세스 - 1번 프로세스

  • Ubuntu 14.04 버전까지는 initd 프로세스가 1번 프로세스로 사용되었으나 이 후 systemd로 1번 프로세스 변경

  • 배포판에 따라 systemd 프로세스을 1번 프로세스로 변경된 시점에 차이가 존재

  • initd 에 대한 systemd 차이점

    • 소켓 기반으로 동작 - inetd와 호환성 유지
      • inetd - 슈퍼 데몬 프로세스
    • shell과 독립적으로 부팅 가능
    • 마운트 제어 가능
    • fsck 제어 기능
    • 시스템 상태에 대한 스냅샷 유지
    • SELinux와 통합 가능
    • SELinux - SEcure Linux
    • 서비스에 시그널 전송 가능
  • systemd 유닛

    • 전체 시스템 시작과 관리에 유닛( unit ) 구성요소 사용
    • systemd는 ‘서비스명.유닛 종류’ 형태로 관리
    • 각 유닛은 같은 이름과 종류로 구성된 설정 파일과 동일 이름 사용
    • systemd 유닛 종류
      • service - daemon 프로세스 시작, 종료, 재시작, 로딩
      • socket - 네트워크 통신, domain socket( Kernel 내부 사용 )
      • device - I/O device 관리
      • mount - mount point 관리
      • automount - 자동 mount 관리
      • target - run-level 관리
      • swap - swap 장치 관리
      • path - 경로 관리
      • timer - timer 관리
      • slice - 프로세스 계층 관리
      • scope - 외부 생성 프로세스 관리
  • systemd 관련 명령

  • systemctl 명령 - Daemon 프로세스( 서비스 ) 관리 명령

    • initd 프로세스 사용시에는 service 명령 사용

    • [ sudo ] systemctl [ 옵션 ][명령] [<유닛명>]

      • -a - 상태와 관계없이 전체 유닛 출력
      • -t 유닛 종류 - 지정한 유닛 종류 출력
      • 명령
        • status - 유닛 상태 확인
    • 관리자 권한으로 실행

      • start - 유닛 시작
      • stop - 유닛 종료
      • restart - 유닛 재시작
      • enable - booting시 자동 실행 설정
      • disable - booting시 자동 실행 해제
      • isolate - 지정한 유닛 및 이와 관련된 유닛만 시작하고 나머지는 정지
    • systemctl - 전체 유닛 출력

    • systemctl -a - 전체 유닛 출력

    • systemctl -t service - service 유닛 전체 출력

    • systemctl status cron.service - cron service 유닛 상태 출력 - 유닛 상태 확인

      • enable 상태 - booting시 자동 실행
      • disable 상태 - booting시 자동 실행 안함
    • service <서비스명> status

    • service cron status - cron service 상태 확인, initd 기반 service 확인 명령

    • sudo systemctl stop cron.service - cron.service 유닛 정지

    • sudo systemctl start cron.service - cron.service 유닛 시작

    • sudo systemctl restart cron.service - cron.service 유닛 재시작

    • 런레벨( run-level )

      • 시스템 실행 레벨 의미
      • 런레벨은 0 ~ 6까지 정수로 부여
      • 런레벨은 target 유닛에 의해 적용
      • 자주 사용할 수 있는 런레벨
        • 3번 - multi-user.target -> CLI booting
        • 5번 - graphical.target -> GUI booting
      • runlevel 명령 - 현재 런레벨 출력
    • booting 방법에 대한 기본 설정
      - sudo systemctl set-default multi-user.target
      -> 기본 booting 방식을 CLI 로 설정
      - sudo systemctl set-default graphical.target
      -> 기본 booting 방식을 GUI 로 설정

    • target 변경
      sudo systemctl isolate multi-user( runlevel3 )
      sudo systemctl isolate graphical( runlevel5 )

데몬 프로세스( daemon process )

  • background에서 동작하면서 특정 서비스 제공하는 프로세스( 사용자와 상호작용을 수행하지 않는다. )

  • Linux 환경에서 특정 서비스 제공을 담당하는 프로세스를 데몬( daemon )이라 한다.

  • 데몬 동작 방식

    • 독자형( standalone ) 데몬
      시스템 background에서 서비스별로 동작
      초기 동작 속도가 빠르다
      자주 사용하는 서비스가 아니라면 자원 낭비 요인이 있다.

    • 슈퍼 데몬
      평소에는 슈퍼 데몬만 동작하다가 서비스 요청이 들어오면 슈퍼 데몬이 해당 서비스 제공 데몬을 실행
      처음 서비스 응대시에 독자형 데몬에 비해 응답 속도가 느릴 수 있으나 자원의 효율적인 사용에 장점
      네트워크 사용하는 서비스가 슈퍼 데몬 형식
      inetd - UNIX 슈퍼 데몬명
      xinetd - ubuntu 슈퍼 데몬명( 보안 기능 포함 )

    • pstree 명령 - 프로세스 계층 구조 확인

    • Linux 주요 데몬
      sshd - 원격 접속 서비스 제공
      httpd - 웹 서비스 제공
      ftpd - FTP 서비스 제공
      nfs - 네트워크 파일 시스템
      crond - 주기적으로 예약된 명령 실행 서비스
      lpd - 프린트 서비스
      ntpd - 시간 동기화 서비스

소프트웨어 관리

  • Linux 환경에서 Application( program ) 설치 방법

    • Application source를 download 또는 복사 하여 직접 compile 과정을 통해 설치

      • 한 번에 원하는 결과물을 얻기 어렵다.
      • compile 과정은 환경에 영향을 많이 받기 때문에 실제 최종 결과물을 얻기까지 많은 시행착오 발생
    • Application package 파일을 download 또는 복사하여 직접 package를 이용한 설치
      - Application package 파일에는 해당 Application 설치를 위해 필요한 의존성 파일을 포함해서 제공
      - Debian 계열 package 파일
      .deb 파일
      패키지 관리 명령 - dpkg 명령으로 설치, 제거, 업그레이드 관리 수행
      - Redhat 계열 package 파일
      .rpm 파일
      패키지 관리 명령 - rpm 명령으로 설치, 제거, 업그레이드 관리 수행

  • 각 배포판에서 운영하는 repository( 원격 저장소 )를 통하여 원하는 Application package를 download 설치 - 인터넷 연결 필요, 일반적으로 사용하는 방법
    Debian 계열
    apt 명령
    Redhat 계열
    yum 명령

  • dpkg 명령
    Debian 계열 패키지 관리 명령
    .deb 패키지 파일 설치, 삭제, 업그레이드, 정보 제공

    • dpkg [ 옵션 ] <.deb 파일명 또는 패키지명>
      -l - 설치된 패키지 목록 확인
      -L <패키지명> - 해당 패키지로 부터 설치된 모든 파일 목록 확인
      -s <패키지명> - 해당 패키지 정보 확인
      -I <.deb 파일명> - 해당 .deb 파일 정보 확인
      -i <.deb 파일명> - 패키지 설치 또는 업그레이드, 관리자 권한
      -r <패키지명> - 패키지 삭제( 설정 파일은 삭제 안함 ), 관리자 권한
      -P <패키지명> - 패키지 및 설정 파일 삭제, 관리자 권한
  • apt 명령

    • Debian 계열 온라인 repository를 통한 패키지 관리 명령
    • Ubuntu 패키지와 패키지 정보를 관리하는 패키지 서버 정보는 /etc/apt/sources.list 파일에 저장
    • 기본적으로 /etc/apt/sources.list에 등록된 서버로 부터 원하는 패키지에 대한 검색, download, 설치가 가능하다.
    • 만약 별도의 repository로 부터 패키지를 설치하려면 해당 repository 서버 주소 등록 후 사용한다.
  • apt-cache 명령
    APT 캐시( 패키지 데이터베이스 ) 에서 정보 검색

    • apt-cache [ 옵션 ] 서브 명령
      -f - 검색 결과 전체 정보 출력
      서브 명령
      search 키워드 - 캐시에서 키워드 검색
      show 패키지 - 패키지에 대한 정보 출력
  • apt-get 명령
    패키지 관리 명령
    온라인 repository로 부터 패키지 download 및 설치, 삭제, upgrade등의 관리 수행

    • [ sudo ] apt[-get][ 옵션 ] <서브 명령>
      -d - 패키지 download
      -y - 패키지 설치시 자동으로 yes 적용
    • 서브 명령
    • update - repository의 새로운 패키지 정보 download
    • upgrade - 현재 설치된 패키지 upgrade
    • install 패키지 - 패키지 설치
    • remove 패키지 - 패키지 삭제( 설정 파일 삭제 안함 )
    • purge 패키지 - 패키지 및 설정 파일 삭제
    • autoremove - 불필요한 의존성 패키지 삭제
  • Linux booting 후나 패키지 설치전에 항상 sudo apt-get update 명령을 통해 새로운 패키지 정보 확보후 필요한 패키지 설치

  • ssh 데몬 설치
    sudo apt-get update
    sudo apt-get install openssh-server
    또는 sudo apt-get install -y openssh-server
    systemctl status sshd.service -> 서비스 실행유무 확인

profile
develop life

0개의 댓글