[Linux] LVM 기반 전체 시스템 스냅샷 방법

DEV/OS

[Linux] LVM 기반 전체 시스템 스냅샷 방법

BI3A 2026. 3. 20. 13:49

반응형

 

Linux OS 의 전체 시스템 Snapshot(LVM) 생성 방법

회사에서 신규 솔루션 설치 테스트를 진행하며 안전한 설치 작업을 위해
스냅샷 방법을 알아보며 정리한 글이다.

 

Snapshot

서버에서 새로운 소프트웨어를 설치하거나 시스템 구성을 변경할 때 가장 안전한 방법 중 하나는
작업 이전 상태로 되돌릴 수 있는 스냅샷을 미리 생성하는 것이다.

특히 패키지 설치나 데이터베이스 설치 작업은 시스템 파일과 설정 파일을 동시에 변경할 수 있기 때문에,
문제가 발생하면 복구가 까다로워질 수 있다.

 

작업 환경: Rocky Linux 8 + Logical Volume Manager


 

Snapshot을 사용하는 이유

서버에서 새로운 소프트웨어를 설치할 때는 다음과 같은 위험이 존재한다.

  • 패키지 의존성 충돌
  • 설정 파일 변경
  • 서비스 포트 충돌
  • 데이터 디렉토리 생성 문제

예를 들어 다음과 같은 작업을 수행한다고 가정한다.

데이터베이스 설치
패키지 업데이트
서비스 설정 변경

 

이 과정에서 문제가 발생하면 기존 환경으로 되돌리는 것이 매우 어렵다.

그래서 작업 전에 다음과 같은 전략을 사용한다.

현재 상태 snapshot 생성
→ 설치 작업 진행
→ 문제 발생 시 snapshot 기준으로 복구

 

이 방식은 point-in-time 복구 전략이라고도 한다.


 

Linux Snapshot 생성 전제 조건

리눅스에서 snapshot 기능을 사용하려면 다음이 필요하다.

  • LVM 기반 스토리지 구조
  • snapshot을 저장할 여유 공간
  • snapshot 대상 Logical Volume 확인

LVM은 물리 디스크를 논리적으로 묶어 관리하는 기능으로 다음과 같은 구조를 가진다.

Physical Disk
   ↓
Physical Volume (PV)
   ↓
Volume Group (VG)
   ↓
Logical Volume (LV)
   ↓
Filesystem Mount

LVM snapshot은 Logical Volume 단위로 생성된다.


 

 

Snapshot 생성 절차 및 롤백 방법

가용 시스템 용량 확인

먼저 스냅샷을 저장할 논리적 볼륨의 용량을 체크한다.

 

파일 시스템 확인

vgs

 

예시 결과

VG   #PV #LV #SN Attr   VSize   VFree
rl     2   4   0 wz--n- 1.16T   0.16T

 

VFree = 0이면 snapshot 생성이 불가능하다.

 

디스크 구조 확인

lsblk

예시

NAME        TYPE MOUNTPOINT
sda         disk
├─sda1      part /boot/efi
├─sda2      part /boot
└─sda3      part
  ├─rl-root lvm  /
  ├─rl-swap lvm  [SWAP]
  └─rl-u01  lvm  /u01
sdb         disk
└─sdb1      part
  ├─rl-home lvm  /home
  └─rl-u01  lvm  /u01

여기서 확인해야 하는 포인트는 3가지이다.

  • Type = lvm인 경우, LVM 스냅샷 대상이 된다.
    • 반대로, Type = diskpart인 경우, LVM 스냅샷 대상이 아니다.
  • MOUNTPOINT 컬럼에 표시되는 경로는 파일이 실제 저장되는 경로를 의미한다.
    • 즉, 상기 예제에서는 snapshot 대상이 rl-root의 /, rl-home의 /home, rl-u01의 /u01이 된다.
  • [swap]으로 표시된 것은 스냅샷 대상이 아니다. (추후 설명)

 

마운트된 파일시스템 확인

df -hT

예시

Filesystem       Type  Mounted on
/dev/rl/root     xfs   /
/dev/rl/home     xfs   /home
/dev/rl/u01      xfs   /u01

이 경우 snapshot 대상은 다음과 같다.

/
/home
/u01

 

Logical Volume 확인

lvs

예시

LV    VG   LSize
root  rl   200G
home  rl   200G
swap  rl   11G
u01   rl   751G
  • VG : 볼륨 그룹
  • LSize : 볼륨 크기

실제로 스냅샷할 대상들의 볼륨명과 물리적으로 디스크 내의 대상별 할당된 볼륨 크기를 파악한다.

 

(참고) swap이 스냅샷에서 제외되는 이유?

snapshot 대상에서 swap을 제외하는 이유는 다음과 같다.

swap은 휘발성 데이터이다.

swap 영역은 메모리 페이지, 캐시 데이터, 임시 프로세스 정보등이 담긴다.

시스팀 재부팅 시 자동으로 초기화되는 영역이기 때문에, 스냅샷을 뜰 필요가 없다.

 

Snapshot 생성 전 filesystem write 중지

파일시스템 snapshot을 생성할 때는 일관된 상태를 유지하기 위해 write 작업을 잠시 중지한다.

이를 위해 다음 명령을 사용한다.

fsfreeze

freeze 상태에서는

read  → 가능
write → 대기

freeze 명령

fsfreeze -f /
fsfreeze -f /home
fsfreeze -f /u01

 

LVM Snapshot 생성

write를 중지한 상태에서 snapshot을 생성한다.

lvcreate -L 20G -s -n root_snapshot /dev/rl/root
lvcreate -L 20G -s -n home_snapshot /dev/rl/home
lvcreate -L 80G -s -n u01_snapshot /dev/rl/u01

옵션 설명

-L  snapshot metadata 공간
-s  snapshot 생성
-n  snapshot 이름

 

snapshot에서 각 볼륨 레벨의 메타데이터를 공간을 잡는 기준

[snapshot의 원리]
해당 시점의 볼륨의 모든 데이터를 저장하는 것이 아니다.
스냅샷 시점을 기준으로, 이후 변경되는 볼륨 레벨 내의 모든 데이터를 스냅샷 내에 쌓아나간다.
그래서 스냅샷 기준으로 롤백을 진행하는 경우,
해당 스냅샷에 쌓인 메타데이터를 기반으로 변경 이전으로 돌아갈 수 있게 한다. 

따라서 메타데이터를 잡을 때는, 
기존 볼륨 레벨의 메모리 할당 공간 크기를 기준으로 판단할 것이 아닌
가장 많이 변경이 일어나는 볼륨에 비중을 두고 가변적으로 판단하면 된다.

 

filesystem write 재개

snapshot 생성이 끝나면 write를 다시 활성화한다.

fsfreeze -u /
fsfreeze -u /home
fsfreeze -u /u01

이제 시스템은 정상적으로 동작한다.

 

Snapshot 생성 확인

lvs

예시

LV               Attr
root             -wi-ao----
root_snapshot    swi-a-s---
home             -wi-ao----
home_snapshot    swi-a-s---
u01              -wi-ao----
u01_snapshot     swi-a-s---

swi-a-s는 snapshot Logical Volume을 의미한다.

 

장애 발생 시 Snapshot Rollback

설치 작업 이후 문제가 발생하면 snapshot 기준으로 복구할 수 있다.

snapshot merge

lvconvert --merge /dev/rl/root_snapshot
lvconvert --merge /dev/rl/home_snapshot
lvconvert --merge /dev/rl/u01_snapshot

재부팅

reboot

복구 후 시스템은 snapshot 시점 상태로 돌아간다.

반응형