LabHub
시작하기
배우기 러닝패스 코스

스토리지 실무 — RAID·스냅숏·iSCSI·fio

스냅숏으로 되돌리고, XFS 는 늘리고, ext4 는 줄인다

LabHub 에서 이어서 보기

목표

변경 직전에 LVM 스냅숏을 뜨고, 틀린 변경을 병합으로 되돌리고, XFS 는 온라인으로 늘리고 ext4 는 데이터를 지키며 오프라인으로 줄이고, 씬 풀로 과할당을 만들어 봅니다.

왜 중요한가

변경 작업은 "잘못되면 되돌린다" 를 전제로 승인됩니다. 스냅숏은 그 전제를 몇 초 만에 만들어 주지만, 크기를 잘못 잡으면 작업 중에 조용히 무효가 되고, 되돌리는 절차(마운트 해제 → 병합 → 다시 마운트)를 모르면 새벽에 헤맵니다. 파일시스템 선택도 마찬가지입니다 — XFS 는 늘릴 수는 있어도 줄이지 못한다고 보고 설계하므로, 줄일 가능성이 있는 볼륨에 무엇을 골랐는지가 나중의 선택지를 정합니다.

이 실습은 우분투 24.04 VM 에서 root 로 돕니다. 빈 디스크가 없으므로 3GiB 희소 파일을 루프 장치로 붙여 디스크 대신 씁니다. 세션은 60분에 시작해 최대 180분까지 연장할 수 있고, VM 은 세션이 끝나면 사라집니다.

단계

  1. /var/lib/sto/lvm.img3GiB 로 만들어 루프 장치로 붙이고, PV 로 초기화해 볼륨 그룹 vg_sto 를 만드세요.
  2. 600MiB LV lv_appXFS 로 포맷해 /srv/app 에 마운트하세요. /srv/app/app.confversion=1, /srv/app/orders.csv 에 세 줄 이상의 CSV 를 쓰고, sha256sum /srv/app/orders.csv 출력을 /root/sto/snap/orders.sha256 에 저장하세요.
  3. 스냅숏 lv_app_snap200MiB 로 만들고, lvs -o lv_name,origin,lv_attr,lv_size vg_sto 출력을 /root/sto/snap/snap.txt 에 저장하세요.
  4. 틀린 변경: app.confversion=2 로, orders.csv 를 삭제, /srv/app/junk.bin60MiB 쓰기. 그 뒤 lvs -o lv_name,origin,data_percent vg_sto 출력을 /root/sto/snap/usage.txt 에 저장하세요.
  5. 스냅숏을 병합해 되돌리세요. lv_app_snap 은 없어지고, /srv/app 이 다시 마운트돼 있고, version=1·orders.csv 체크섬 일치·junk.bin 없음이어야 합니다.
  6. lv_app900MiB 로 늘리고 XFS 도 마운트한 채로 늘리세요.
  7. 500MiB LV lv_logsext4/srv/logs 에 마운트하고, /srv/logs/keep.log5MiB 를 쓴 뒤 sha256sum /srv/logs/keep.log 출력을 /root/sto/snap/keep.sha256 에 저장하세요.
  8. lv_logs300MiB 로 줄이세요. 파일시스템도 함께 줄고, 다시 마운트돼 있고, keep.log 가 체크섬과 같아야 합니다.
  9. 400MiB 씬 풀 pool 위에 가상 크기 1GiB 씬 볼륨 lv_thin 을 만들고, lvs -o lv_name,lv_size,pool_lv,data_percent vg_sto 출력을 /root/sto/snap/thin.txt 에 저장하세요.

참고

루프 장치 위에 VG 세우기

/var/lib/sto/lvm.img3GiB 희소 파일로 만들어 루프 장치로 붙이고, PV 로 초기화한 뒤 그 하나로 볼륨 그룹 vg_sto 를 만드세요.

truncate → losetup -f --show → pvcreate → vgcreate 순서입니다. 루프 번호는 losetup -j <파일> 로 되찾습니다.

XFS 볼륨과 지킬 데이터

vg_sto600MiB LV lv_app 을 만들어 XFS 로 포맷하고 /srv/app 에 마운트하세요. /srv/app/app.conf 에 한 줄 version=1 을, /srv/app/orders.csv 에 세 줄 이상의 아무 CSV 를 쓰고, sha256sum /srv/app/orders.csv 출력을 /root/sto/snap/orders.sha256 에 저장하세요.

lvcreate -L 600M -n lv_app vg_sto, mkfs.xfs, mount 순서입니다. 체크섬 파일에 절대 경로가 들어가야 나중에 sha256sum -c 로 검사할 수 있습니다.

변경 직전 스냅숏

lv_app 의 스냅숏 lv_app_snap200MiB 로 만드세요. 그리고 lvs -o lv_name,origin,lv_attr,lv_size vg_sto 출력을 /root/sto/snap/snap.txt 에 저장하세요.

lvcreate -s -L <크기> -n <이름> vg_sto/lv_app 입니다. 스냅숏의 lv_attr 는 s 로 시작하고 Origin 열에 원본 이름이 보입니다.

틀린 변경과 스냅숏 사용률

틀린 변경을 흉내 내세요: /srv/app/app.confversion=2 로 바꾸고, /srv/app/orders.csv 를 지우고, /srv/app/junk.bin60MiB 를 쓰세요. 그 뒤 lvs -o lv_name,origin,data_percent vg_sto 출력을 /root/sto/snap/usage.txt 에 저장하세요.

dd if=/dev/urandom of=... bs=1M count=60 으로 쓸 수 있습니다. 쓴 뒤 sync 를 해야 스냅숏 사용률(Data%)에 반영됩니다. 스냅숏보다 많이 쓰면 스냅숏이 무효가 되니 크기를 지키세요.

병합으로 되돌리기

스냅숏을 원본에 병합해 틀린 변경 이전으로 되돌리세요. 끝나면 lv_app_snap 은 없어야 하고, /srv/app 이 다시 마운트돼 있고, app.confversion=1, orders.csv 는 체크섬과 같아야 하며, junk.bin 은 없어야 합니다.

lvconvert --merge 는 원본이 마운트돼 있으면 다음 활성화까지 미뤄집니다. 마운트를 먼저 풀고 병합한 뒤 다시 마운트하세요.

XFS 를 마운트한 채로 늘리기

lv_app900MiB 로 늘리고, 마운트를 풀지 않은 채 XFS 도 함께 늘리세요. df 로 본 /srv/app 이 커져야 합니다.

lvextend -r 은 LV 를 늘린 뒤 파일시스템에 맞는 도구(XFS 면 xfs_growfs)를 불러 줍니다. xfs_growfs 는 마운트된 상태에서만 동작합니다.

줄일 수 있는 볼륨 만들기

vg_sto500MiB LV lv_logs 를 만들어 ext4 로 포맷하고 /srv/logs 에 마운트하세요. /srv/logs/keep.log5MiB 임의 데이터를 쓰고 sha256sum /srv/logs/keep.log 출력을 /root/sto/snap/keep.sha256 에 저장하세요.

2단계와 같은 흐름이고 파일시스템만 ext4 입니다. 다음 단계에서 이 볼륨을 줄입니다.

ext4 를 데이터를 지키며 줄이기

lv_logs300MiB 로 줄이세요. 파일시스템도 함께 줄어야 하고, 끝나면 /srv/logs 에 다시 마운트돼 있고 keep.log 가 체크섬과 같아야 합니다.

ext4 는 마운트를 푼 상태에서만 줄어듭니다. 순서가 중요합니다 — 파일시스템을 목표보다 작게 먼저 줄이고(e2fsck -f 가 먼저 필요합니다), 그다음 LV 를 줄이고, 마지막에 파일시스템을 LV 크기에 다시 맞추세요.

씬 풀과 과할당

vg_sto400MiB 씬 풀 pool 을 만들고, 그 풀 위에 가상 크기 1GiB 씬 볼륨 lv_thin 을 만드세요. lvs -o lv_name,lv_size,pool_lv,data_percent vg_sto 출력을 /root/sto/snap/thin.txt 에 저장하세요.

lvcreate --type thin-pool -L 로 풀을, lvcreate -V <가상 크기> -T vg_sto/pool -n <이름> 으로 씬 볼륨을 만듭니다. 풀보다 큰 볼륨을 만들면 과할당 경고가 나오는데, 그것이 이 단계에서 보려는 것입니다.