본문 바로가기
IT/Linux

저장소 관리 (파티션,파일 시스템,스왑)

by 혁클 2021. 3. 25.

저장소 관리

 

DAS(Direct Attached Storage) ↔ Network Attached Storage(NAS)

 

디스크 구조

  • 하드디스크
    • 플래터(Platter): 실제 전/자기를 사용하여 데이터를 기록하는 부분
    • 스핀들(Spindle): 모터, 플래터를 회전시킴 (7200 rpm, 5400 rpm…)
    • 헤드(Head): 플래터의 데이터를 읽거나 기록하는 장치. 디스크의 각 플래터 위아래에 모두 있음. 디스크의 안쪽/바깥쪽으로 이동하며 데이터의 위치에 접근
    • 액추에이터(Actuator): 헤드의 움직임을 제어하는 부분
    • 데이터 최소 단위: 비트(Bit) → 바이트(Byte) 
    • 단위의 접두사: K(kilo), M(mega), G(giga), T(tera) → X 1000
    • 정확한 용량 단위 : Ki(kibi), Mi(Mibi), Gi(Gibi), Ti(Tibi) → X 2^10
    • 하드디스크는 ‘블록 장치’ : 데이터를 블록 단위로 읽고 씀
    • 일반적인 하드디스크의 최소 입출력 단위 : 섹터 (512 Byte)
      • 섹터(Sector) : 헤드가 고정된 상태에서 플래터의 한 면에 512Byte만큼 사용하기 위해 플래터를 살짝 회전한 만큼의 크기
      • 트랙(Track) : 헤드가 고정된 상태에서 플래터의 한 면에서 플래터를 한 바퀴 회전했을 때 접근할 수 있는 영역
      • 실린더(Cylinder) : 각 플래터의 같은 위치의 위/아래면을 모두 모아놓은 영역
    • CHS 주소 방식
      • 물리적인 구조를 직접 지정하는 방식
      • C(Cylinder), H(Head), S(Sector) 위치를 지정
      • 현재는 잘 사용하지 않음 - 디스크 용량의 제한, 현재 디스크의 구조를 반영할 수 없음
    • LBA 주소 방식
      • 논리적인 주소를 지정하는 방식
      • 물리적인 구조를 신경 쓸 필요가 없음. 디스크 내 컨트롤러에서 알아서 처리
      • 순차 번호를 사용 : LBA 0 ~ …
    • 물리적인 장치
    • 자기(Magnetic)를 사용한 데이터 기록
    • 주요 부품
    • 하드디스크의 기록 단위
    • 섹터의 주소 지정 방식

 파티션(Partition)

    • 물리적으로 하나인 디스크를 논리적으로 분리하여 사용
    • 파티션의 장점
      • OS 및 데이터 영역 분리 관리가 가능
      • 다중 OS 사용 가능
      • Swap 용도로 사용이 가능
      • 공간의 체계적인 구성

 

  • 파티션의 종류
    • 디스크의 파티션을 구성하기 위한 방식
    • 디스크의 1개의 섹터에 디스크 파티션에 대한 내용을 저장
    • Boot Code + Partition Table + Signature = 512Byte
      • Boot Code: 파티션으로 부팅을 시키기 위해 필요한 실행코드
      • Partition Table: 실제 디스크의 파티션 구조 정보(64 Byte)
      • Signature: MBR을 나타내는 특징적인 데이터
    • Partition Table
      • 부트 가능 플래그 (1Byte)
      • 파티션의 유형 (1 Byte)
      • 파티션의 시작 주소, 파티션의 끝 주소 (CHS) (각 3 Byte)
      • 파티션의 시작 주소, 파티션의 크기 (LBA) (각 4 Byte)
      • 파티션 정보를 저장
      • 총 4개의 파티션 정보를 저장 - 최대 4개 파티션
      • 각 파티션 별 테이블 크기 : 16Byte
      • 파티션의 섹터 주소의 범위 : 2^32개 섹터 사용 → 최대 약 43억 개 섹터 사용 가능 → 최대 사용 가능한 디스크의 크기 2 TiB
    • MBR은 BIOS와 연관된 기술
    • MBR은 반드시 LBA 0번 사용
    • 확장 파티션 : MBR 특성상 최대 4개까지만 파티션이 생성 가능 - 파티션의 유형을 주(Primary) 파티션과 확장(Extended) 파티션으로 구분
    • MBR (Master Boot Record)

 

  • GPT (GUID Partition Table)
    • 디스크의 파티션을 구성하기 위한 방식
    • 디스크의 1개의 섹터를 Protective MBR로 사용 + 1개 섹터를 GPT 헤더(Header)  
    • 파티션 테이블을 별도로 저장 : 1개의 파티션 당 128 Byte를 사용 X 파티션 128개 사용 가능
    • GPT 정보의 백업이 존재 : LBA0~33까지의 백업이 디스크의 가장 마지막에 백업으로 위치
    • 파티션에서 사용할 수 있는 디스크의 크기 확장 : LBA 주소의 크기 8Byte - 이론상 최대 8ZB(Zeta Byte)
    • GPT는 EFI(Extensible Firmware Interface)와 관련됨
    • GPT 파티션은 운영체제에서 GPT 파티션을 지원할 경우 사용 가능 (윈도 XP 이후, 현재 대부분의 리눅스)
    • GPT 파티션으로 구성된 디스크를 부팅용 도로 사용하려면 EFI 방식의 펌웨어를 사용하여야 함

 

============================================================

 

시스템의 부팅 과정

  1. 전원 인가
  2. BIOS(Basic Input Output System, = 펌웨어, Firmware)가 동작
  3. POST(Power On Self Test) 수행
  4. BIOS는 CMOS(complementary metal–oxide–semiconductor, 설정 저장)의 설정값을 읽어 들여서 시스템을 구동
  5. 현재 연결된 디스크를 파악하고, MBR을 통해 부팅 가능한 파티션을 확인
  6. 해당 파티션의 VBR(Volume Boot Record) 정보를 참고하여 운영체제 부팅

 

========================================================

 

리눅스 시스템에서 디스크 저장소 장치 추가

 

시스템 구동 중 장치 추가

  • Plug & Play 
  • Hot Plugging
  • 시스템의 다운타임 없이 장치를 추가할 수 있는 기능 
  • 장치의 연결 인터페이스와 관련

 

디스크 연결 인터페이스

  • E-IDE(P-ATA) : 구형 ATA 규격에서 사용하는 연결 방식. 핫 플러깅 지원하지 않음. 연결 가능한 디스크의 개수가 최대 4개로 제한 (메인보드 연결 포트에 따라 Primary/Secondary) (한 케이블에 연결된 두 디스크를 각각 Master/Slave)
  • S-ATA: 현재 대부분의 데스크톱 시스템 등에서 사용한 인터페이스, 핫플러깅 지원. 연결 가능한 디스크의 개수는 메인보드의 SATA 포트의 개수에 영향
  • SCSI(Small Computer System Interface) : 핫 플러깅 지원. 여러 대의 장치를 한꺼번에 연결 가능
  • SA-SCSI(SAS): Serial-Attached SCSI. 현재 서버 시스템에서 사용하는 주요 인터페이스. 

 

저장장치 파일 이름

  • 리눅스 시스템은 모든 장치를 파일로 관리 - 디스크는 블록 장치 파일
  • 장치 파일은 /dev에 있음
  • 디스크 장치는 파일 유형에서 블록으로 조회 (ls -l /dev | grep ‘^b’)
  • 장치 파일의 이름은 연결 인터페이스, 장치 종류 등과 관련
    • s : SATA, SCSI
    • h : IDE (현재는 IDE도 s를 사용)
    • v : 가상화 시스템에서 사용하는 가상 디스크
    • d : 디스크 장치
    • r : 광학 디스크
    • a, b, c, d.... : 디스크 장치의 순번
    • 0,1,2,3…. : 광학 디스크 장치의 순번
    • 1,2,3…. : 파티션 번호
    • 맨 첫 번째 글자 : 연결 인터페이스와 관련
    • 두 번째 글자: 장치의 종류
    • 세 번째 글자: 장치 순번
    • 네 번째 글자: 파티션 번호

 

리눅스 시스템에서 추가한 저장소 장치 인식 방법

  • /sys/class/scsi_host/host# (#은 0부터 시작하는 번호)
  • 해당 파일은 링크로 연결되어 있음
  • 링크 연결되어 있는 디렉터리 내에 scan 파일을 사용하여 장치를 인식
  • echo ‘- - -’ 명령어를 사용하여 scan 파일로 출력을 리다이렉트
    • echo ‘- - -’ > /sys/class/scsi_host/host0/scan
    • echo ‘- - -’ > /sys/class/scsi_host/host 1/scan
    • echo ‘- - -’ > /sys/class/scsi_host/host2/scan

 

==========================================================

 

파티셔닝(Partitioning)

  • 디스크의 파티션 구조를 생성하는 작업
  • MBR / GPT 모두 생성 가능
  • 사용할 도구
    • 별도로 설치가 필요함
      • # yum -y install epel-release
      • # yum -y install gparted
      • # gparted
    • kickstart: 네트워크를 통한 리눅스 자동 설치
    • gparted (GUI) 
    • fdisk : CLI 명령어, MBR 방식의 파티션 생성, 대화형 설정 방식
    • gdisk : CLI 명령어, GPT 방식의 파티션 생성, 대화형 설정 방식
    • parted : CLI 명령어, 비대 화형으로 파티셔닝 가능

 

fdisk

  • MBR 기반의 시스템에서 오랫동안 사용해 온 파티셔닝 도구
  • 기본적으로 MBR 파티션을 생성
  • 대화형 설정
  • fdisk -l : 파티션 구성 확인
  • fdisk <장치 파일명> : 장치 파티셔닝 수행
    • d   delete a partition : 파티션 개별 삭제
    • l   list known partition types : 사용 가능한 파티션의 종류 목록 확인
    • n   add a new partition : 새로운 파티션 생성
    • p   print the partition table : 현재 구성된 파티션 정보 확인
    • q   quit without saving changes : 저장하지 않고 종료
    • t   change a partition's system id : 파티션 종류 변경 (L: 목록 확인)
    • w   write table to disk and exit : 저장하고 종료
  • 파티션 생성 시 입력항목
    • 파티션의 유형 : primary(주), extended(확장)
    • 파티션 번호 : 1~4 (주 primary), 5~(논리 logical)
    • 시작 섹터 주소 (LBA)
    • 파티션의 마지막 섹터 주소 / 사용할 섹터 개수 / 사용할 용량
  • 확장 파티션
    • 일반적으로 3개의 파티션을 primary로 생성
    • 4번째 파티션을 extended로 생성
    • 5번 이후 파티션은 자동으로 logical 파티션 유형 지정

 

gdisk

  • GPT 기반의 시스템에서 오랫동안 사용해 온 파티셔닝 도구
  • 기본적으로 GPT 파티션을 생성
  • 대화형 설정
  • gdisk -l : 파티션 구성 확인
  • gdisk <장치 파일명> : 장치 파티셔닝 수행
    • d   delete a partition : 파티션 개별 삭제
    • l   list known partition types : 사용 가능한 파티션의 종류 목록 확인
    • n   add a new partition : 새로운 파티션 생성
    • p   print the partition table : 현재 구성된 파티션 정보 확인
    • q   quit without saving changes : 저장하지 않고 종료
    • t   change a partition's system id : 파티션 종류 변경 (L: 목록 확인)
    • w   write table to disk and exit : 저장하고 종료
  • 파티션 생성 시 입력항목
    • 파티션 유형은 선택하지 않음(주 파티션만 지원)
    • 파티션 번호 : 1~4 (주 primary), 5~(논리 logical)
    • 시작 섹터 주소 (LBA)
    • 파티션의 마지막 섹터 주소 / 사용할 섹터 개수 / 사용할 용량
    • 파티션의 유형을 생성 시 바로 지정



사용 중인 디스크의 파티션 정보 변경시 변경사항 적용

  • 사용중인 디스크의 파티션 정보는 이미 시스템에서 인식하고 있는 상태
  • 변경사항 저장 시(w) 바로 시스템에 인식되지 않고 대기. 경고 메시지 출력
  • partprobe 명령어를 사용하여 변경된 파티션 정보를 시스템에 전달
    • ex) # partprobe /dev/sdb
    • # partprobe
    • # partprobe <변경된 장치명> 

 

parted

  • 파티셔닝 수행 가능 (MBR/GPT)
  • 비대 화형 실행 가능 (대화형 실행 가능)
  • 주요 옵션
    • -l : 디스크 별 파티션 상태 확인
    • -m : 출력 형식 변경 (: 기호로 항목 분류)
    • -s : 비대화형 실행 옵션

 

parted를 사용한 비대화형 파티션 설정 방식

  1. 파티션 유형 설정 반영
    1. 파티션 유형 설정 명령
  • # parted -s /dev/sdb mklabel msdos
  1. 파티션 유형 확인
  • parted 내에서  help mklabel
  • # parted -s /dev/sdb help mklabel
  1. 파티션 생성
    1. 파티션 생성 (단일)
  • # parted -s /dev/sdb mkpart primary 0% 100%
    • mkpart 파티션 생성 명령
    • primary : 주 파티션 유형
    • 0% : 시작 위치를 %로 지정
    • 100% : 마지막 위치를 %로 지정
  1. 다수의 파티션 생성
  • 퍼센트 지정
    • # parted -s /dev/sdb mkpart primary 0% 30%
    • # parted -s /dev/sdb mkpart primary 30% 60%
    • # parted -s /dev/sdb mkpart primary 60% 100%
  • 용량 지정
    • # parted -s /dev/sdb mkpart primary 0MB 100MB
    • # parted -s /dev/sdb mkpart primary 100MB 200MB
    • # parted -s /dev/sdb mkpart primary 200MB 300MB
  1. mkpart 시 파티션 유형별 주의사항
  • MBR: 파티션 타입 지정 필요 (primary, extended)
    • ex) parted -s /dev/sdb mkpart primary 0% 100%
  • GPT: 파티션 이름 지정 필요
    • ex) parted -s /dev/sdb mkpart test 0% 100%



parted 명령어 정리

  • mklabel : 파티션 유형 지정
  • mkpart : 파티션 생성
  • rm : 파티션 삭제
  • select: 장치 선택 
    • # parted

(parted) select /dev/sdb

  • unit: 사용할 단위 선택
    • KB, MB, GB : 해당 단위 사용
    • compact : 자동으로 단위 선택
  • print : 현재 파티션 정보 출력
    • print devices : 장치 정보
    • print free : 기본적인 출력 내용 + 할당되지 않은 영역 정보

 

참고) 디스크의  파티션 정보 삭제

# dd if=/dev/zero of=/dev/sdb bs=512 count=100

  • dd: Disk Dump. 데이터를 기록하기 위한 명령
  • if: 원본
  • of: 사본
  • bs: 블록 사이즈
  • count: 블럭 개수



====================================================

 

파일 시스템 (Filesystem)

  • 파티션 내에 파일/디렉터리를 적재하는 방식
  • 어떤 방식으로 데이터를 저장할 것인지, 어떤 식으로 탐색할지…
  • 운영체제와 많은 연관

 

파일 시스템의 구성

  • 메타 영역 : 파일들의 속성, 파일시스템 자체의 정보
  • 데이터 영역 : 실제 파일의 내용이 저장되는 영역

 

파일시스템의 종류

  • 디스크 기반 파일시스템
    • UFS(Unix File System, Universal File System)
    • ext(Extended File System)
      • ext2, ext3, ext4 
    • xfs (SGI사에서 제작)
    • FAT (File Allocation Table)
      • FAT 16, vFAT, FAT32, FAT64(exFAT)
    • NTFS (NT File System)
    • ReFS (Resilient File System)
    • ISO9660
    • UDFS(Universal Disk File System)
    • 유닉스
    • 리눅스
    • 윈도즈
    • 광학 디스크용 파일 시스템
  • 분산 파일 시스템
    • NFS(Network File System): Sun Microsystems(Solaris Unix) → Oracle이 인수. 현재 거의 대부분의 유닉스 계열 시스템에서 널리 사용
    • SMB(Server Message Block) : Microsoft  → CIFS(Common Internet File System), samba(리눅스에서 SMB 기능을 사용하기 위한 도구)
  • Pseudo 파일 시스템
    • /sys, /proc, /run…
    • swap
    • /dev
    • 메모리 기반 파일 시스템 

 

파일시스템 생성

  • 파일 시스템은 반드시 디스크장치 파일이 아닌 파티션 파일을 지정하여 생성
  • 파일 시스템 생성시 생성할 파일 시스템의 유형을 지정하여야 함 (지정하지 않을 경우 ext2로 생성)
  • 파일시스템 생성 명령 : mkfs
    • -t : 파일시스템의 유형 (xfs, ext2, ext3, ext4….)
    • mkfs.[파일 시스템이름]
    • mkfs 주요 옵션

 

마운트

  • 파일시스템이 생성되어 있는 파티션을 연결하는 과정
  • 마운트 포인트와 장치를 연결
  • 마운트 포인트는 사전에 생성되어 있어야 함
  • 마운트 명령어: mount
    • 사용법: mount [옵션] <마운트 할 장치 이름> <마운트 포인트>
  • 마운트 상태 확인:
    • # mount

 

마운트 제거

  • 마운트 되어 있는 장치를 연결 해제
  • 명령어: umount
    • umount <장치 이름>
    • umount <마운트포인트>
  • 파일 시스템 사용 시는 마운트 해제가 되지 않음
    • 해당 디렉터리에 진입하여 있을 경우 (cd <마운트 포인트>)
    • 해당 파일 시스템 내의 파일을 열고 있을 경우

 

시스템 부팅 시 자동으로 마운트 하기 위한 설정

/etc/fstab

ⓐ/dev/mapper/centos-root ⓑ/                      ⓒxfs     ⓓdefaults        ⓔ0 ⓕ0

ⓐ 마운트 할 장치 이름

ⓑ 마운트 포인트

ⓒ 마운트 할 파일 시스템 종류

ⓓ 마운트 옵션(defaults 기본 옵션)

ⓔ 덤프 (0: 덤프 안 함, 1~ : 덤프 순번)

ⓕ 파일 시스템 체크 (0: 파일시스템 체크 안 함, 1~ : 체크 순번)

 

UUID(universally unique identifier)

  • 장치를 식별하기 위한 고유한 식별자
  • 시스템 내에서 다른 장치/개체와 중복되지 않음

 

저장소 장치의 UUID를 확인하는 방법

  • blkid

 

/etc/fstab 파일 수정 후 설정 확인

  • 마운트가 해제된 상태에서
    • # mount -a
      → /etc/fstab 파일의 내용대로 마운트 수행
  • 정상적으로 마운트 되었는지 확인 (설정 오류가 있을 경우 마운트 되지 않음)

 

/etc/fstab 파일 비정상 수정 시 부팅 불가 

→ Emergency mode로 부팅됨 

→ 파일 수정 후 재부팅



==========================================

 

저장소 설정의 흐름

 

장치 인식 → 파티션 설정 → 파일 시스템 생성 → 마운트

 

=========================================

 

스왑(Swap)

  • 물리적 장치인 디스크의 공간을 메모리처럼 사용하는 방식
  • 당장 필요하지 않은 메모리 데이터를 보조기억장치로 이동시켰다가(Swap Out) 다시 필요할 때 불러오는(Swap In) 동작
  • 마치 실제 물리 메모리가 증가된 것 같은 효과를 가져옴
  • 스왑이 빈번하게 일어날 경우 시스템의 성능이 굉장히 저하됨

 

스왑 확인

  • 시스템 상태 조회 명령
    • top : 윈도의 작업 관리자와 유사하게 시스템 상태 및 프로세스 별 정보를 실시간으로 갱신하며 출력
    • free : 현재 메모리 상태를 출력
    • swapon -d : 현재 시스템의 스왑 등록 상태
    • swapon -a : 현재 시스템의 스왑 상태

 

스왑의 종류

  • 스왑 파티션 : 파티션 전체를 스왑 용도로 사용, 파티션으로 할당할 수 있는 공간이 필요
  • 스왑 파일 : 파일을 생성해서 그 파일을 스왑 용도로 사용, 파일 시스템의 가용 공간을 사용하여 스왑 사용 가능하다는 장점

 

스왑 등록 과정

디스크 인식 - 파티션 생성 - 스왑 파티션 생성 - 스왑 등록

 

  1. 스왑 파티션 
  • 스왑파티션 생성
  • 명령어 : mkswap <파티션 장치명>

 

  • 생성된 스왑 파티션 등록
  • swapon <스왑 파티션명>

 

  • 등록된 스왑 파티션 해제
  • swapoff <스왑 파티션명>

 

  1. 스왑 파일
  • 스왑 파일은 루트(/) 파일 시스템이 아는 다른 저장소를 사용할 것(성능 등)
  • 스왑 파일이 저장될 파티션 및 파일시스템 생성
  • 파티션 생성 → 파일시스템 생성 → 마운트 → 파일 생성 → 스왑 파일로 변경 → 스왑 등록
    • dd if=/dev/zero of=/swapdir/swapfile bs=512 count=100000
      • 약 50MB 정도의 빈 파일이 생성됨
    • chmod 600 /swapdir/swapfile
    • mkswap /swapdir/swapfile
    • swapon /swapdir/swapfile
    • swapoff /swapdir/swapfile
    • 파일 생성
    • 파일 권한 정보 변경
    • 스왑파일로 변경
    • 스왑 등록
    • 스왑 해제

 

스왑 자동 등록

  • /etc/fstab 파일을 사용하여 등록
    • <장치/파일 이름>swap swap defaults 0 0
  • 등록된 스왑 동작 테스트 : swapon -a
    • mount -a : 일반적인 마운트 항목만 적용


*이 포스팅은 엔코아 플레이 데이터 수업 내용을 참고로 합니다.

'IT > Linux' 카테고리의 다른 글

systemd  (0) 2021.03.29
저장소 관리(LVM,RAID)  (0) 2021.03.27
권한 / 프로세스  (0) 2021.03.24
리눅스 사용자 관리  (0) 2021.03.23
리눅스 기본 명령어  (0) 2021.03.22

댓글