Red Hat Certified System Administrator (RHCSA) #5 로컬 storage 1: 파티션, swap, LVM 기초

10 분 소요

#4 부팅과 시스템에서 systemd와 GRUB2, 그리고 password recovery까지 다뤘습니다. 이제 RHCSA에서 작업 수가 가장 많고 합격을 가르는 영역인 로컬 storage로 들어갑니다. 이번 글은 그 첫 번째로, 빈 디스크 하나를 받아 파티션을 만들고, swap을 추가하고, LVM을 구성해 파일 시스템을 영구 마운트하는 전체 흐름을 손으로 완주하겠습니다.

스토리지 작업의 핵심은 재부팅 후에도 유지되는가입니다. mkswap만 하고 fstab에 안 적으면 재부팅 후 swap이 사라지고, mount만 하고 fstab에 안 적으면 마운트가 풀립니다. 그래서 이 글은 만드는 명령뿐 아니라 fstab에 영구로 남기는 과정까지 한 묶음으로 다루겠습니다.

디스크부터 확인한다 #

작업 전에 지금 시스템에 어떤 디스크가 있고, 어디가 비어 있는지를 먼저 봅니다. 엉뚱한 디스크를 건드리면 복구가 어려우므로, 확인 단계는 생략하지 않겠습니다.

lsblk는 블록 장치를 트리로 보여 주어 전체 그림을 잡기에 가장 좋습니다.

디스크 확인
# 블록 장치 트리. 디스크와 파티션, 마운트 위치를 한눈에 본다
lsblk

# 파일 시스템 타입과 UUID까지 함께 본다
lsblk -f

출력에서 disk 타입이 디스크 전체이고, 그 아래 들여쓰기된 part가 파티션입니다. MOUNTPOINT가 비어 있으면 아직 마운트되지 않은 것입니다.

fdisk -l은 디스크 크기와 파티션 테이블 형식(MBR/GPT)을 자세히 보여 줍니다.

파티션 테이블 확인
# 모든 디스크의 파티션 테이블을 자세히 본다
fdisk -l

# 특정 디스크만 본다
fdisk -l /dev/vdb

이번 글에서는 비어 있는 추가 디스크를 /dev/vdb로 가정하겠습니다. 실제 시험에서는 lsblk로 본인 환경의 빈 디스크 이름을 먼저 확인해야 합니다. 환경에 따라 /dev/sdb/dev/nvme0n1처럼 이름이 다릅니다.

파티션 만들기 #

빈 디스크에 파티션을 직접 나눠 보겠습니다. 도구는 fdisk(대화형)와 parted가 있고, 시험에서는 둘 중 손에 익은 쪽을 쓰면 됩니다.

fdisk로 만들기 #

fdisk는 대화형 메뉴로 동작합니다. 각 단계에서 한 글자 명령을 입력합니다.

fdisk 실행
fdisk /dev/vdb

fdisk 안에서 입력하는 흐름은 다음과 같습니다.

fdisk 대화 흐름
Command (m for help): n      # 새 파티션 생성
Partition type: p            # primary(기본값이므로 Enter도 가능)
Partition number (1-4): 1    # 1번
First sector: (Enter)        # 시작 섹터는 기본값
Last sector: +2G             # 크기를 2GiB로 지정

Command (m for help): t      # 파티션 타입 변경(선택)
Hex code: 82                 # 82 = Linux swap, 8e = Linux LVM, 83 = Linux

Command (m for help): p      # 현재 파티션 표 미리 보기
Command (m for help): w      # 디스크에 기록하고 종료

크기는 +2G처럼 +크기 형식으로 지정하면 시작 섹터부터 그만큼을 잡아 줍니다. 타입 코드는 swap이면 82, LVM에 쓸 파티션이면 8e로 바꿉니다. 타입은 표식일 뿐이라 안 바꿔도 동작하지만, LVM,swap의도를 명확히 남기려면 지정하는 편이 좋습니다.

마지막에 w로 기록해야 실제로 반영됩니다. q로 나가면 변경이 버려지므로 주의하겠습니다.

parted로 만들기 #

parted는 명령을 한 줄로 줄 수 있어 스크립트에 유리합니다. 큰 디스크(2TiB 초과)나 GPT가 필요하면 parted를 씁니다.

parted로 생성
# GPT 라벨 생성(빈 디스크일 때)
parted /dev/vdb mklabel gpt

# 1MiB부터 2GiB까지 파티션 생성
parted /dev/vdb mkpart primary 1MiB 2GiB

# 현재 상태 확인
parted /dev/vdb print

커널에 파티션 변경 알리기 #

파티션 표를 바꾼 뒤 커널이 인식하지 못하면 다음 명령으로 다시 읽힙니다.

커널에 통지
# 커널에 파티션 테이블 변경을 통지한다
partprobe /dev/vdb

# 새 파티션이 보이는지 확인한다
lsblk /dev/vdb

이제 /dev/vdb1처럼 파티션 장치가 생겼습니다. 이 위에 swap이나 파일 시스템을 올리겠습니다.

swap 추가하기 #

swap은 물리 메모리가 부족할 때 디스크를 보조 메모리로 쓰는 공간입니다. RHCSA에서는 “swap 파티션을 만들어 영구로 활성화하라"가 단골 작업입니다.

흐름은 파티션 생성 → mkswap → swapon → fstab 등록 순서입니다. 위에서 만든 파티션 타입을 82(Linux swap)로 지정한 /dev/vdb1을 swap으로 쓰겠습니다.

swap 생성과 활성화
# 파티션을 swap 포맷으로 만든다. 출력의 UUID를 메모해 둔다
mkswap /dev/vdb1

# 지금 즉시 swap을 켠다
swapon /dev/vdb1

# 현재 활성화된 swap 목록을 확인한다
swapon --show
free -h

여기까지는 임시입니다. 재부팅하면 swapon이 풀리므로, /etc/fstab에 등록해 영구로 만들어야 합니다.

UUID 확인
# swap 파티션의 UUID를 확인한다
blkid /dev/vdb1

blkid가 알려 준 UUID를 /etc/fstab에 한 줄로 추가합니다.

/etc/fstab
UUID=여기에-실제-UUID   none   swap   defaults   0 0
필드swap 항목 값의미
장치UUID=...swap 영역(UUID로 지정 권장)
마운트 위치noneswap은 마운트 위치가 없음
타입swapswap 영역임을 명시
옵션defaults기본 옵션
dump0dump 대상 아님
fsck0부팅 시 검사 안 함

등록 후에는 반드시 검증합니다. 다음 명령은 fstab을 다시 읽어 swap을 켜며, fstab에 문법 오류가 있으면 여기서 드러납니다.

fstab 검증
# fstab에 적힌 모든 swap을 활성화한다(검증 목적)
swapon -a
swapon --show

장치 이름(/dev/vdb1)은 디스크 추가 순서에 따라 바뀔 수 있으므로, fstab에는 UUID로 적는 습관을 들이겠습니다.

LVM 기초 #

RHCSA에서 가장 자주 나오는 스토리지 작업이 LVM을 만들어 마운트하라입니다. LVM(Logical Volume Manager)은 디스크를 유연하게 묶고 나눠 쓰는 계층 구조입니다.

계층약자설명만드는 명령
Physical VolumePVLVM이 쓸 물리 단위(파티션,디스크)pvcreate
Volume GroupVGPV들을 묶은 저장소 풀vgcreate
Logical VolumeLVVG에서 잘라 낸 실제 볼륨lvcreate

흐름은 물리 장치 준비 → PV 생성 → VG 생성 → LV 생성 → 파일 시스템 생성 → fstab 마운트입니다. 파티션 없이 디스크 전체를 PV로 써도 되지만, 시험에서는 보통 파티션 타입을 8e(Linux LVM)로 만든 파티션을 PV로 씁니다. 여기서는 /dev/vdb2를 LVM용 파티션으로 가정하겠습니다.

PV 생성 #

PV 생성
# 파티션을 PV로 초기화한다
pvcreate /dev/vdb2

# PV 목록과 상세를 확인한다
pvs
pvdisplay /dev/vdb2

VG 생성 #

PV를 묶어 VG를 만듭니다. VG 이름은 시험 문제에서 지정하는 경우가 많으므로, 문제가 요구한 이름 그대로 만들겠습니다.

VG 생성
# vgdata 라는 VG를 만들고 PV를 넣는다
vgcreate vgdata /dev/vdb2

# VG 목록과 상세를 확인한다(여유 용량 PE 개수 확인)
vgs
vgdisplay vgdata

vgcreate 시 PE(Physical Extent) 크기를 -s 옵션으로 지정할 수 있습니다. 문제에서 “extent 크기 16MiB"처럼 요구하면 vgcreate -s 16M vgdata /dev/vdb2로 만듭니다.

LV 생성 #

VG에서 실제 볼륨인 LV를 잘라 냅니다. 크기는 -L로 절대 크기(예: 2G)를, -l로 extent 개수나 비율(예: 100%FREE)을 지정합니다.

LV 생성
# 크기 2GiB, 이름 lvweb 인 LV 생성
lvcreate -L 2G -n lvweb vgdata

# extent 개수로 지정(50개)
lvcreate -l 50 -n lvweb vgdata

# VG의 남은 전체 용량을 모두 사용
lvcreate -l 100%FREE -n lvweb vgdata

# LV 목록과 상세를 확인한다
lvs
lvdisplay /dev/vgdata/lvweb

LV의 장치 경로는 /dev/vgdata/lvweb 또는 /dev/mapper/vgdata-lvweb입니다. 이후 명령에서는 이 경로를 디스크처럼 다룹니다.

lvextend 맛보기 #

LVM의 가장 큰 장점은 나중에 용량을 늘릴 수 있다는 점입니다.

LV 확장
# LV에 1GiB를 추가하고 파일 시스템까지 함께 키운다
lvextend -L +1G -r /dev/vgdata/lvweb

-r 옵션은 LV 확장과 동시에 그 위의 파일 시스템까지 키워 줍니다. 확장과 축소, LUKS 암호화는 #6 로컬 storage 2에서 깊게 다루겠습니다. 여기서는 “LV는 나중에 늘릴 수 있다"는 점만 기억하고 넘어가겠습니다.

파일 시스템 생성과 영구 마운트 #

LV를 만들었어도 그 위에 파일 시스템이 없으면 쓸 수 없습니다. 포맷(mkfs) → 마운트 위치 생성 → fstab 등록 → 검증 순서로 마무리하겠습니다.

파일 시스템 생성 #

RHEL 9의 기본 파일 시스템은 XFS입니다. 시험에서 특별한 요구가 없으면 XFS를, ext4를 요구하면 ext4를 씁니다.

파일 시스템 생성
# XFS 파일 시스템 생성(RHEL 기본)
mkfs.xfs /dev/vgdata/lvweb

# ext4가 필요하면
mkfs.ext4 /dev/vgdata/lvweb

마운트 위치 만들고 임시 마운트 #

임시 마운트
# 마운트할 위치를 만든다
mkdir -p /mnt/web

# 임시로 마운트해 본다
mount /dev/vgdata/lvweb /mnt/web

# 마운트 상태와 용량을 확인한다
df -h /mnt/web

여기까지도 임시입니다. 재부팅하면 풀리므로 fstab에 등록해야 합니다.

fstab에 UUID로 영구 등록 #

마운트도 장치 이름 대신 UUID로 적는 것이 안전합니다. 먼저 UUID를 확인합니다.

UUID 확인
# LV의 UUID를 확인한다
blkid /dev/vgdata/lvweb

/etc/fstab에 다음 한 줄을 추가합니다.

/etc/fstab
UUID=여기에-실제-UUID   /mnt/web   xfs   defaults   0 0
필드마운트 항목 값의미
장치UUID=...마운트할 장치(UUID로 지정)
마운트 위치/mnt/web마운트할 디렉터리
타입xfs파일 시스템 타입
옵션defaults기본 마운트 옵션
dump0dump 대상 아님
fsck0XFS는 부팅 검사 안 함(0)

LVM은 장치 경로(/dev/vgdata/lvweb)가 안정적이라 경로로 적어도 무방하지만, RHCSA 채점은 재부팅 후 마운트 유지만 보므로 UUID든 LV 경로든 정확하면 됩니다. 여기서는 UUID 습관을 유지하겠습니다.

반드시 검증한다 #

fstab을 고쳤으면 재부팅 전에 문법을 검증해야 합니다. fstab에 오류가 있으면 부팅이 emergency mode로 빠져 시험을 크게 망칩니다.

fstab 검증
# 임시 마운트를 먼저 풀고
umount /mnt/web

# fstab에 적힌 항목을 모두 마운트한다(검증)
mount -a

# 정상 마운트되었는지 확인한다
df -h /mnt/web
lsblk -f

mount -a가 오류 없이 끝나고 df/mnt/web이 보이면 fstab이 정상입니다. 시간이 허락하면 실제로 reboot 후 마운트가 유지되는지까지 확인하는 것이 가장 확실합니다.

전체 흐름 한 번에 #

빈 디스크에서 LVM 파일 시스템을 만들어 영구 마운트하는 RHCSA 최빈출 작업을 한 줄씩 모으면 다음과 같습니다.

전체 흐름
# 1) 디스크 확인
lsblk

# 2) 파티션 생성(fdisk 안에서 n, t=8e, w)
fdisk /dev/vdb
partprobe /dev/vdb

# 3) LVM 구성
pvcreate /dev/vdb2
vgcreate vgdata /dev/vdb2
lvcreate -L 2G -n lvweb vgdata

# 4) 파일 시스템 생성
mkfs.xfs /dev/vgdata/lvweb

# 5) 마운트 위치 생성과 fstab 등록(UUID)
mkdir -p /mnt/web
blkid /dev/vgdata/lvweb        # UUID 확인 후 fstab에 기입

# 6) 검증
mount -a
df -h /mnt/web

이 6단계가 손에 붙으면 스토리지 영역의 절반은 끝난 것입니다.

시험 포인트 #

  • 빈 디스크 이름을 먼저 확인한다. lsblk로 작업 대상 디스크를 정확히 짚고, 엉뚱한 디스크(특히 루트 디스크)를 건드리지 않겠습니다.
  • fdisk는 w로 기록해야 반영된다. q로 나가면 변경이 버려집니다. 변경 후 partprobe로 커널에 통지하겠습니다.
  • swap은 mkswap → swapon → fstab. fstab에 none swap defaults 0 0으로 등록해야 재부팅 후 유지됩니다.
  • LVM 순서는 pvcreate → vgcreate → lvcreate. VG,LV 이름은 문제가 요구한 이름 그대로 만들겠습니다.
  • 크기 지정은 -L(절대), -l(extent,비율). “남은 전부"는 -l 100%FREE입니다.
  • 만들면 끝이 아니라 mkfs와 fstab까지. 포맷,마운트,fstab 등록,mount -a 검증을 한 묶음으로 처리하겠습니다.
  • 장치 이름 대신 UUID. blkid로 UUID를 얻어 fstab에 적으면 장치 순서가 바뀌어도 안전합니다.
  • fstab을 고쳤으면 mount -a로 반드시 검증. 오류가 있으면 다음 부팅이 emergency mode로 빠집니다.

정리 #

이번 글에서 잡은 것:

  • 디스크 확인. lsblk로 전체 그림을, fdisk -l로 파티션 테이블을 본다
  • 파티션 생성. fdisk(대화형) 또는 parted(한 줄), 타입은 swap 82,LVM 8e, 변경 후 partprobe
  • swap. mkswapswapon → fstab(none swap defaults 0 0)로 영구화
  • LVM. pvcreatevgcreatelvcreate, 확장은 lvextend -r(상세는 #6)
  • 파일 시스템과 마운트. mkfs.xfsmount → fstab(UUID) → mount -a 검증
  • 합격을 가르는 함정. 만들기만 하고 fstab에 안 적으면 재부팅 후 설정이 사라진다

스토리지 작업은 RHEL 실무에서도 그대로 쓰입니다. 더 넓은 운영 맥락은 RHEL 중급 트랙에서 함께 보면 감각이 단단해집니다.

다음: 로컬 storage 2 #

이번 글에서 LVM을 만들어 마운트하는 기본기를 잡았습니다. 다음은 그 위에서 용량을 늘리고 데이터를 보호하는 작업입니다.

#6 로컬 storage 2: LVM 확장과 LUKS 암호화에서는 VG에 PV를 추가해 풀을 키우고, lvextend로 LV를 확장하며 XFS,ext4 파일 시스템을 함께 늘리는 법, 그리고 cryptsetup으로 LUKS 암호화 볼륨을 만들어 부팅 시 자동으로 열리도록 설정하는 과정까지 직접 쳐 보며 정리하겠습니다.

X