서버 미사용 디스크를 /data로 만들기 (LVM 편)
ETC./Linux

서버 미사용 디스크를 /data로 만들기 (LVM 편)

뉴비뉴 2026. 9. 15.

서버 용량이 부족하다고 해서 확인해 봤더니, 정작 4TB짜리 하드디스크 3개가 아무 일도 안 하고 놀고 있었습니다. 총 11TB 가까운 공간입니다. 이 글은 디스크들을 찾아내서 /data 하나로 묶어 쓸 수 있게 만든 과정입니다.

1. 문제 발견

df -h 실행 결과

dfDisk Free, 즉 "지금 쓸 수 있는 공간이 얼마나 남았나"를 보여주는 명령입니다. -hhuman-readable의 약자로, 숫자를 사람이 읽기 좋은 GB·TB 단위로 바꿔줍니다. 결과를 보면 / (루트, 시스템의 최상위 폴더)가 233GB 중 166GB를 쓰고 있습니다.

2. 디스크 목록 확인: fdisk

df가 보여주지 않는 걸 보려면 다른 명령이 필요합니다. 

sudo fdisk -l

명령어 결과를 보면 알 수 있듯이 서로 다른 걸 보고 있다는 걸 알 수 있습니다.

  • fdisk -l = "이 컴퓨터에 꽂혀 있는 디스크가 뭐가 있나"
  • df -h = "그중에 실제로 쓰고 있는 게 뭔가?"

두 결과를 겹쳐 본 결과

장치 크기 상태
nvme0n1p2 237GB / 사용 중 (76%)
sda1 1GB /boot/efi 사용 중
sda2 2GB /boot 사용 중
sda3 3.6TB 마운트 안 됨
sdb 3.6TB 파티션 조차 없음
sdc 3.6TB 파티션 조차 없음

3. 마운트(sda3) 안 됐다고 빈 디스크가 아니다

sda에는 /boot와 /boot/efi 가 들어 있다. 이건 서버가 켜질 때 가장 먼저 읽는 부분이다. 그런데 그 뒤에 3.6TB짜리 파티션이 하나 더 있다는 말은 전형적으로 원래 이 디스크에 운영체제를 통째로 설치했다가, 나중에 빠른 NVMe로 옮긴 흔적으로 보인다. 즉, sda3 안에 예전 운영체제와 데이터가 그대로 들어있을 가능성이 있다.

 

확인 방법

# lsblk는 디스크를 나무 구조로 보여주고 -f 를 붙이면 파일시스템 정보까지 보여준다
lsblk -f /dev/sda
# 결과
NAME   FSTYPE FSVER LABEL UUID
sda
├─sda1      vfat   FAT32       E74B-DC41                                 1G     1% /boot/efi
├─sda2      ext4   1.0         a8cee5a5-f550-492f-b127-bf64ca26189c    1.7G     7% /boot
└─sda3

sda3 줄을 보면 FSTYPE 칸이 비어 있는 걸 확인할 수 있다.

  • FSTYPE(파일시스템 종류)은 포맷을 해야 생긴다
  • 이게 비어 있다 = 한 번도 포맷한 적이 없다 = 안에 아무것도 없다

blkid(block device identify; 시스템에 연결된 블록 장치(디스크, 파티션, USB 등)의 신원 정보를 조회하는 명령어) 명령어로 한번 더 확인해보자

sudo blkid /dev/sda3
# 결과
/dev/sda3: PARTUUID="908d27dc-ad75-4ae0-b6f1-d86e4ca9c8d2"
  • PARTUUID = 파티션(칸)을 나눌 때 생기는 번호
  • UUID = 파일시스템을 만들 때 생기는 번호

4. 3개(sda3, sdb, sdc)의 하드디스크를 어떻게 묶을까?

방식 쓸 수 있는 용량 하나가 고장 나면 나중에 늘리기
각각 따로 마운트 3.6T씩 3개 그것만 손실 경로가 계속 늘어남
LVM으로 묶기 10.9T 하나 전체 손실 쉬움
RAID 1 3.6T 버팀 어려움

 

저는 LVM을 선택했습니다. 이유는 두 가지 입니다.

  • 저장 경로가 /data 하나로 끝나서 프로그램 설정이 단순해집니다
  • 나중에 디스크를 더 사서 꽂으면 서비스를 끄지 않고 용량을 늘릴 수 있습니다

5. LVM(Logical Volume Manager, 논리 볼륨 관리자)이란?

쉽게 말하면 여러 개의 물탱크를 파이프로 연결해서 큰 저수조 하나처럼 쓰는 기술입니다.

이름 하는 일 물탱크로 치면
1층 PV (Physical Volume) 디스크에 "나 LVM 부품이야" 표시 탱크에 연결구 달기 
2층 VG (Volume Group) PV들을 묶어 큰 공간 풀을 만듦 파이프로 연결해 저수조로
3층 LV (Logical Volume) 풀에서 실제 쓸 공간을 떼어냄 수도꼭지 하나 빼기

6. 시작 전 확인

which pvcreate vgcreate lvcreate
# 결과
/usr/sbin/pvcreate
/usr/sbin/vgcreate
/usr/sbin/lvcreate

7. 실행: PV -> VG -> LV

1단계 - pvcreate

sudo pvcreate /dev/sda3 /dev/sdb /dev/sdc
# 결과
Physical volume "/dev/sda3" successfully created.
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.

2단계 - vgcreate

sudo vgcreate vg_data /dev/sda3 /dev/sdb /dev/sdc
# 결과
Volume group "vg_data" successfully created

 

PV들을 묶어 하나의 큰 저장 공간 풀을 만듭니다. vg_data 는 원하는 이름으로 수정 가능하고 이 순간 3.6T + 3.6T + 3.6T가 합쳐저 약 10.9T 짜리 풀이 됩니다.

3단계 - lvcreate

sudo lvcreate -l 100%FREE -n lv_data vg_data
# 결과
Logical volume "lv_data" created.

 

풀에서 공간을 떼어내 실제로 포맷하고 마운트할 가상의 디스크를 만듭니다.

  • -l 100%FREE: 남은 공간을 전부 사용
  • -n lv_data: 이름 지정
  • 마지막 vg_data: 어느 풀에서 떼어낼지

실행하면 /dev/vg_data/lv_data  라는 경로가 생기고 이제부터는 이걸 그냥 디스크 하나 처럼 다루면 됩니다.

sudo pvs     # PV 목록
sudo vgs     # VG 목록과 총 용량
sudo lvs     # LV 목록

8. 포맷하기

sudo mkfs.ext4 -m 0 -L DATA /dev/vg_data/lv_data
# 결과
mke2fs 1.46.5 (30-Dec-2021)
/dev/vg_data/lv_data contains a ext4 file system labelled 'DATA'
        created on Mon Sep 14 23:49:50 2026
Proceed anyway? (y,N) y
Creating filesystem with 2929461248 4k blocks and 366186496 inodes
Filesystem UUID: 82e6f442-aacb-41f6-b6ea-ff01bb4b5a2c
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
        2560000000

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done

 

mkfsmake filesystem, 즉 포맷입니다. 빈 공간에 파일을 이렇게 정리해서 넣겠다"는 규칙을 세우는 작업입니다. ext4는 리눅스에서 가장 널리 쓰이는 규칙입니다.

옵션 중 -m 0은 특히 중요하다

ext4는 기본적으로 전체 용량의 5%를 관리자 전용으로 몰래 빼놓습니다. 시스템 디스크가 꽉  찼을 때도 관리자는 최소한의 작업을 할 수 있게 하려는 안전장치입니다. 그런데 10.9TB의 5%면 약 550GB입니다. 데이터 저장용 디스크에는 필요 없는 기능이니 -m 0으로 꺼야 합니다.

  • -T largefile4: 큰 파일(영상 등) 위주일 때 관리 정보를 줄여 효율을 높입니다. 작은 파일이 수백만 개 쌓일 예정이면 이 옵션은 빼세요.
  • -L data: 이름표를 붙여둡니다. 나중에 알아보기 편합니다.

9. 마운트와 자동 등록

sudo mkdir -p /data
sudo mount /dev/vg_data/lv_data /data
df -h /data

 

여기까지 하면 /data가 생기고 바로 쓸 수 있습니다. 그런데 이 상태로 재부팅하면 사라집니다. mount 명령은 지금 이 순간만 유효하기 때문입니다.

영구 등록 (fstab)

재부팅해도 자동으로 마운트되게 하려면 /etc/fastab 파일에 등록해야 합니다. 이 파일은 리눅스가 켜질 때 읽는 "어떤 디스크를 어디에 연결할지" 목록표입니다.

sudo blkid /dev/vg_data/lv_data
# 결과
/dev/vg_data/lv_data: LABEL="DATA" UUID="82e6f442-aacb-41f6-b6ea-ff01bb4b5a2c" BLOCK_SIZE="4096" TYPE="ext4"

그리고 /etc/fstab 마지막 줄에 추가합니다.

# 확인한 UUID를 복사
sudo vi /etc/fstab
# 마지막 줄에 추가
UUID=82e6f442-aacb-41f6-b6ea-ff01bb4b5a2c  /data  ext4  defaults,noatime,nofail,x-systemd.device-timeout=10  0  2
  • 장치명(/dev/sdb) 대신 UUID를 쓰는 이유가 있습니다. 장치명은 고정이 아닙니다. 디스크를 추가하거나 케이블 순서가 바뀌면 sdb가 sdc가 도리 수 있습니다. 그러면 엉뚱한 디스크가 마운트됩니다. UUID는 그 파일시스템의 고유 번호라 절대 안 바뀝니다.
  • nofail은 "이 디스크 없어도 일반 부팅은 해라" 라는 뜻

검증

# 재부팅 전에 문법이 맞는지 확인하는 용도
sudo mount -a

# 확인
df -h /data
sudo chown -R 사용자명:그룹명 /data

정리

  • df -h와 fdisk -l을 겹쳐서 보면 안 쓰는 디스크가 보입니다
  • 마운트 안 됐다고 빈 디스크가 아닙니다. lsblk -f로 반드시 확인 후 진행하세요
  • LVM은 pvcreate → vgcreate → lvcreate 3단계로 쌓습니다
  • mkfs.ext4에 -m 0을 빼면 수백 GB가 그냥 사라집니다
  • fstab에는 UUID와 nofail을 쓰고, 재부팅 전에 mount -a로 검증하세요

'ETC. > Linux' 카테고리의 다른 글

[리눅스] 하드 링크와 심볼릭 링크 차이점과 파일 용량  (0) 2024.02.05
DAY 10  (0) 2018.05.09
DAY 9  (0) 2018.05.03
DAY 5  (0) 2018.04.04
DAY 4  (0) 2018.03.28

댓글

💲 추천 글