CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
  • Week 3
  • Week 4
  • Week 5
    • 1.파일시스템 종류와 구조: ext2/3/4 · xfs · btrfs · 저널링 · inode와 블록
    • 2.파티션과 마운트: fdisk · gdisk · parted · mkfs · mount/umount · /etc/fstab 6필드
    • 3.LVM과 스왑: PV·VG·LV 계층 · pvcreate부터 lvextend·resize2fs · mkswap·swapon
    • 4.RAID와 쿼터, 디스크 점검: RAID 0/1/5/6/10 · mdadm · quota/edquota · fsck/df/du/lsblk/blkid
    • 5.Week 5 종합 복습: 파일시스템·파티션·LVM·스왑·RAID·쿼터 총정리와 실전 연습
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
  • Week 14
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 1급/Week 5/Day 3

기준: 리눅스마스터 1급 출제 기준·오류 제보

리눅스마스터 1급· AssociateWeek 5 · Day 3읽기 약 9분
핵심 정리
  • LVM은 디스크와 볼륨 사이에 추상화 계층을 끼워, 물리적 제약에서 논리적 사용을 분리한다.
  • 3계층: PV(디스크) → VG(풀) → LV(사용 단위). 생성은 pvcreate → vgcreate → lvcreate.
  • 확장은 2단계 — lvextend(그릇) + resize2fs/xfs_growfs(내용물). VG가 모자라면 vgextend가 먼저다.
  • xfs는 축소 불가, xfs_growfs는 마운트포인트를 받는다. ext4 resize2fs는 온라인 확장 가능·축소는 언마운트 후.
  • 스왑은 파일시스템이 아니다 — mkswap으로 초기화하고 swapon으로 켜며, fstab에는 none swap sw 0 0.

Day 3 - LVM과 스왑: PV·VG·LV 계층 · pvcreate부터 lvextend·resize2fs · mkswap·swapon

LVM의 3계층: PV → VG → LV

전통적 파티션은 한 번 크기를 정하면 늘리기가 까다롭다. 옆 파티션에 여유가 있어도 물리적으로 인접하지 않으면 빌려올 수 없다. LVM은 물리 디스크들을 하나의 저장 풀로 묶어 이 경직성을 깬다.

계층약자정체비유
물리 볼륨PV (Physical Volume)LVM에 편입된 디스크/파티션물탱크에 붓는 물병들
볼륨 그룹VG (Volume Group)PV들을 묶은 저장 풀물병을 합친 물탱크
논리 볼륨LV (Logical Volume)VG에서 잘라낸 사용 단위탱크에서 따라낸 컵들
  • 흐름: 디스크/파티션을 pvcreate로 PV로 → 여러 PV를 vgcreate로 묶어 VG로 → VG에서 lvcreate로 LV를 잘라냄 → LV를 mkfs로 포맷하고 마운트해서 사용.
# 전체 생성 흐름 (디스크 sdb, sdc 사용 예)
pvcreate /dev/sdb1 /dev/sdc1        # 1) 두 파티션을 PV로
vgcreate myvg /dev/sdb1 /dev/sdc1   # 2) myvg라는 VG로 묶기
lvcreate -L 10G -n mylv myvg        # 3) myvg에서 10G짜리 LV 'mylv' 생성
mkfs.ext4 /dev/myvg/mylv            # 4) 포맷
mount /dev/myvg/mylv /mnt/data      # 5) 마운트

LV의 장치 경로는 두 형태로 나타난다 — /dev/<VG이름>/<LV이름>(예: /dev/myvg/mylv)과 /dev/mapper/<VG>-<LV>(예: /dev/mapper/myvg-mylv). 둘은 같은 것을 가리키는 별칭이다. fstab에는 어느 쪽을 써도 되지만 LV 역시 고유 UUID가 있어 blkid로 확인 가능하다.

VG는 공간을 PE(Physical Extent) 라는 고정 크기 덩어리(기본 4MB)로 쪼개 관리한다. LV의 크기는 사실 PE의 정수배다. lvcreate -l 100 myvg처럼 소문자 -l을 쓰면 "PE 개수"로, 대문자 -L 400M을 쓰면 "용량"으로 지정한다. PE 개념 덕분에 LV가 여러 PV에 흩어져 있어도 연속된 하나의 볼륨처럼 보인다.

LVM의 위력은 "디스크를 끄지 않고" 용량을 다룬다는 점이다. 운영 중인 서버의 /var가 가득 찼을 때, 새 디스크를 PV로 추가해 VG를 키우고(vgextend) LV를 늘린(lvextend) 뒤 파일시스템까지 확장하면 — 서비스 중단 없이 공간이 늘어난다. 전통적 파티션으로는 불가능한 이 유연성이 LVM이 서버에서 표준이 된 이유다.

LV 확장: lvextend와 resize2fs/xfs_growfs

대표 시나리오는 LV 확장이다. 두 단계로 나뉘는 게 핵심이다.

  1. LV(컨테이너) 자체를 늘린다 — lvextend
  2. 그 위의 파일시스템을 늘린다 — resize2fs(ext) 또는 xfs_growfs(xfs)
# VG에 여유가 있을 때 LV를 5G 더 늘리기
lvextend -L +5G /dev/myvg/mylv     # +5G 추가 (절대값은 -L 15G)
resize2fs /dev/myvg/mylv           # ext4 파일시스템을 LV 크기에 맞춤
# xfs라면:
xfs_growfs /mnt/data               # (마운트포인트 지정, 온라인 확장)
 
# 두 단계를 한 번에 (ext만, -r = resize fs까지):
lvextend -r -L +5G /dev/myvg/mylv

LV를 늘려도 그 위 파일시스템은 자동으로 안 커진다. lvextend는 "그릇"을 키울 뿐이고, 그릇 안의 "내용물(파일시스템)"은 resize2fs/xfs_growfs로 따로 늘려야 한다. 이 2단계를 빠뜨려 "LV는 커졌는데 df상 용량은 그대로"인 상황이 함정이다. 시험: "lvextend 후 ext4 용량 반영 명령은?" → resize2fs.

⚠️ 함정: resize2fs(ext4)는 온라인(마운트 상태)에서 확장이 가능하고 축소는 반드시 언마운트 후에만 된다. 반면 xfs는 축소 자체가 불가능하다(xfs_growfs는 확장 전용). 그래서 "xfs LV를 줄이려면?" → 백업 후 재생성밖에 없다. 확장 인자도 다르다 — resize2fs는 장치 경로를, xfs_growfs는 마운트포인트를 받는다.

VG에 여유 공간이 없으면 LV를 늘리기 전에 VG부터 키워야 한다. 새 디스크를 pvcreate로 PV로 만든 뒤 vgextend myvg /dev/sdd1로 VG에 편입하면 VG의 가용 PE가 늘어난다. vgdisplay myvg의 "Free PE / Size"로 여유를 확인한다. 전체 순서: pvcreate → vgextend → lvextend → resize2fs.

# 직접 쳐보기 — LVM 상태 조회 3종
pvs / pvdisplay        # PV 목록 / 상세
vgs / vgdisplay        # VG 목록 / 상세 (Free PE 확인)
lvs / lvdisplay        # LV 목록 / 상세
lsblk                  # 디스크-PV-LV 관계 트리

LVM 명령어 한눈에 정리

계층별 주요 명령을 표로 묶어둔다 — 단답 대비용.

동작PVVGLV
생성pvcreatevgcreatelvcreate
조회(간략/상세)pvs/pvdisplayvgs/vgdisplaylvs/lvdisplay
확장—vgextendlvextend
축소/제거pvremovevgreduce/vgremovelvreduce/lvremove
이름변경—vgrenamelvrename

⚠️ 함정: lvcreate에서 -L(대문자, 용량: -L 10G)과 -l(소문자, PE개수/백분율: -l 100 또는 -l 100%FREE)을 혼동하지 말 것. "VG의 남은 공간 전부로 LV 생성"은 lvcreate -l 100%FREE -n mylv myvg다. 그리고 -n은 LV 이름 지정 옵션이다.

LVM 스냅샷(lvcreate -s)은 특정 시점의 LV를 "동결"해 백업 중 일관성을 보장한다. CoW(Copy-on-Write)로 변경분만 따로 저장하므로 처음엔 거의 공간을 안 먹는다. 백업 도중 원본이 바뀌어도 스냅샷은 그 순간을 유지한다.

스왑(swap) — 디스크를 가상 메모리로

  • 스왑은 물리 메모리(RAM)가 부족할 때 당장 안 쓰는 메모리 페이지를 디스크로 잠시 내보내(swap out) RAM을 확보하는 영역이다.
  • 스왑은 파일시스템이 아니다 — 마운트하지 않고, 전용 포맷(mkswap)으로 초기화한 뒤 커널에 등록(swapon)해서 쓴다.
  • 스왑 파티션: 파티션 타입을 82로 만든 전용 파티션
  • 스왑 파일: 일반 파일을 스왑으로 사용(유연하지만 약간 느림)
# 스왑 파티션 만들기
mkswap /dev/sdb2           # 파티션을 스왑 영역으로 초기화
swapon /dev/sdb2           # 활성화
swapoff /dev/sdb2          # 비활성화
 
# 스왑 파일 만들기 (2GB)
dd if=/dev/zero of=/swapfile bs=1M count=2048   # 또는 fallocate -l 2G /swapfile
chmod 600 /swapfile        # 보안상 600 권장
mkswap /swapfile
swapon /swapfile
 
# 상태 확인
swapon -s          # 또는 cat /proc/swaps
free -h            # Swap 행에서 총량/사용량 확인

mkswap은 파일시스템을 만드는 게 아니라 스왑 시그니처와 헤더를 쓰는 별도 작업이다. 그래서 스왑은 mount가 아니라 swapon으로 켠다. "스왑 영역을 초기화하는 명령은?" → mkswap, "활성화는?" → swapon이 정석 단답.

스왑을 부팅 시 자동 활성화하려면 fstab에 등록한다. 단 형식이 일반 파일시스템과 다르다 — 마운트포인트 자리에 none(또는 swap), 타입에 swap, 옵션에 sw, pass·dump는 0이다:

/dev/sdb2  none  swap  sw  0  0
/swapfile  none  swap  sw  0  0

등록 후 swapon -a로 fstab의 모든 스왑을 일괄 활성화한다.

커널이 얼마나 적극적으로 스왑을 쓸지는 vm.swappiness(0~100, 기본 60)로 조절한다. 값이 낮으면 RAM을 최대한 쓰고 스왑을 아끼며, 높으면 일찍부터 스왑으로 밀어낸다. sysctl vm.swappiness=10으로 임시 변경, /etc/sysctl.conf에 적어 영구화한다. 데이터베이스 서버는 스왑 발생 시 성능이 급락하므로 swappiness를 낮게 잡는 경우가 많다.

스왑 크기는 한때 "RAM의 2배"가 정설이었지만, RAM이 수십 GB인 현대 시스템에선 의미가 옅어졌다. 다만 하이버네이션(hibernate, RAM 전체를 디스크로 저장) 을 쓰려면 스왑이 RAM 이상이어야 한다 — RAM 내용을 통째로 담아야 하기 때문이다. 이 예외는 알아둘 만하다.

# 직접 쳐보기 — 스왑 전체 흐름
free -h                    # 현재 메모리/스왑
swapon -s                  # 활성 스왑 목록
fallocate -l 1G /swapfile && chmod 600 /swapfile
mkswap /swapfile && swapon /swapfile
swapon -s                  # /swapfile이 추가됐는지
swapoff /swapfile          # 정리

다음 Day 4에서는 RAID 레벨별 패리티와 mdadm, 디스크 쿼터, 그리고 fsck·df·du·lsblk·blkid 점검 도구를 다룬다.

📖 용어

  • LVM : 디스크와 볼륨 사이에 추상화 계층을 넣어 무중단 확장을 가능하게 하는 논리 볼륨 관리자.
  • PV(물리 볼륨) : LVM에 편입된 디스크나 파티션. 풀에 붓는 물병에 해당한다.
  • VG(볼륨 그룹) : PV들을 묶은 저장 풀. 여기서 공간을 떼어 LV를 만든다.
  • LV(논리 볼륨) : VG에서 잘라낸 실제 사용 단위. 포맷하고 마운트해서 쓴다.
  • PE(Physical Extent) : VG가 공간을 관리하는 고정 크기 덩어리(기본 4MB). LV 크기는 PE의 정수배다.
  • -L vs -l : 용량으로 지정(-L 10G)과 PE 개수·백분율로 지정(-l 100%FREE).
  • /dev/mapper/VG-LV : /dev/VG/LV와 같은 대상을 가리키는 또 다른 경로 표기.
  • lvextend + resize2fs : 그릇을 키우는 단계와 그 안의 파일시스템을 키우는 단계. 둘 다 해야 df에 반영된다.
  • xfs_growfs : xfs 전용 확장 명령. 마운트포인트를 인자로 받고, 축소는 불가능하다.
  • vgextend : VG에 새 PV를 편입해 풀을 키우는 명령. LV 확장 전에 여유가 없으면 이게 먼저다.
  • LVM 스냅샷 : lvcreate -s로 특정 시점을 동결하는 기능. CoW라 변경분만 공간을 차지한다.
  • 스왑(swap) : RAM이 부족할 때 쓰지 않는 페이지를 대피시키는 디스크 영역. 파일시스템이 아니다.
  • mkswap / swapon / swapoff : 스왑 영역 초기화 / 활성화 / 비활성화.
  • vm.swappiness : 커널이 얼마나 적극적으로 스왑을 쓸지 정하는 값(0~100, 기본 60).
  • 하이버네이션 : RAM 내용을 통째로 디스크에 저장하는 기능. 그래서 스왑이 RAM 이상이어야 한다.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

LVM의 구성 계층을 아래에서 위로(물리→논리) 올바른 순서로 나열한 것은?

문제 2

lvextend -L +5G /dev/myvg/mylv로 LV를 늘린 뒤, 그 위 ext4 파일시스템의 용량까지 실제로 반영하려면 추가로 실행해야 하는 명령은?

문제 3

스왑 영역(swap)에 대한 설명으로 옳지 않은 것은?

문제 4

기존 VG에 남은 공간이 없을 때, 새 디스크 /dev/sdd1을 추가해 LV를 확장하려 한다. 올바른 명령 순서는?

문제 5

/etc/fstab에 스왑 파티션 /dev/sdb2를 부팅 시 자동 활성화하도록 등록할 때 올바른 형식은?

문제 6

VG의 남은 공간 전부를 사용해 LV를 만드는 명령으로 옳은 것은?

문제 7

xfs 파일시스템으로 포맷된 LV에 대한 설명으로 옳은 것은?

이전파티션과 마운트: fdisk · gdisk · parted · mkfs · mount/umount · /etc/fstab 6필드Week 5 · Day 2다음 RAID와 쿼터, 디스크 점검: RAID 0/1/5/6/10 · mdadm · quota/edquota · fsck/df/du/lsblk/blkidWeek 5 · Day 4

참고 공식 자료

  • 리눅스마스터 1급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • LVM의 3계층: PV → VG → LV
  • LV 확장: lvextend와 resize2fs/xfs_growfs
  • LVM 명령어 한눈에 정리
  • 스왑(swap) — 디스크를 가상 메모리로
  • 용어
  • 연습 문제