Btrfs로 리눅스 하드디스크 풀링과 미러링 설정하기

핵심 요약
- Btrfs는 스냅샷, 풀링, 미러링 등 고급 기능을 파일시스템 레벨에서 제공합니다.
- 서로 다른 크기의 디스크를 묶을 때는
-d single
같은 프로파일을 사용합니다. - RAID 프로파일(raid0, raid1, raid10 등)은 생성 시 또는 변환 명령으로 적용할 수 있습니다.
- 디스크 장애 시
-o degraded
옵션으로 마운트하고,btrfs device delete missing
로 제거합니다. - /etc/fstab에 권장 마운트 옵션을 넣어 자동마운트 및 성능 최적화를 할 수 있습니다.
무엇이 Btrfs인가
Btrfs는 B-tree 기반의 파일시스템으로, 흔히 B-tree filesystem, Butter FS, Better FS로 불립니다. 다음 기능을 파일시스템 수준에서 제공합니다: 스냅샷, 서브볼륨, 디스크 풀링, 다양한 데이터/메타데이터 프로파일(RAID) 등. 이 문서는 특히 ‘스토리지 풀링’과 ‘미러링’에 초점을 맞춥니다.
간단 정의: 파일시스템은 저장장치 위에 파일과 디렉터리를 조직하는 소프트웨어 계층입니다.
주요 포인트:
- 개인용 또는 연구용으로 대부분의 기능은 안정적입니다. 다만 일부 고급 기능은 주의가 필요합니다.
- 단일 디스크 단순 사용에서는 여전히 ext4가 기본적이고 안정적인 선택일 수 있습니다.
예제 구성과 전제
예제로는 총 4개의 하드디스크를 사용합니다:
- /dev/sdb: 1TB
- /dev/sdc: 1TB
- /dev/sdd: 500GB
- /dev/sde: 500GB
또한 시스템 부트로더·OS가 설치된 /dev/sda는 건드리지 않습니다. 목표는 나머지 4개 디스크를 Btrfs로 묶어 하나의 풀로 사용하는 것입니다.
파일시스템 생성 절차
- 개별 디스크에 Btrfs 파일시스템 생성
sudo mkfs.btrfs /dev/sdb
원하는 디스크 경로로 바꿔 실행하세요. 이후 첫 번째 디스크를 마운트합니다.
sudo mount /dev/sdb /mnt
- 나머지 디스크도 같은 방식으로 포맷(또는 이미 포맷되어 있으면 건너뜀)
sudo mkfs.btrfs /dev/sdc
sudo mkfs.btrfs /dev/sdd
sudo mkfs.btrfs /dev/sde
- 기존 마운트된 풀에 디바이스 추가
sudo btrfs device add /dev/sdc /mnt
sudo btrfs device add /dev/sdd /mnt
sudo btrfs device add /dev/sde /mnt
- 데이터를 모든 디스크로 균등 분배(밸런스)
sudo btrfs filesystem balance /mnt
- 처음부터 모든 디스크를 포함해 파일시스템을 만든다면
sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde
설명:
-d
플래그는 데이터 배치 정책을 지정합니다.-m
은 메타데이터 정책입니다.- 디스크 크기가 제각각일 때는
-d single
을 사용해 모든 장치를 활용합니다. - 동일 크기의 디스크로만 구성한다면
-d raid0
같은 레이드 프로파일을 사용할 수 있습니다.
예시 RAID 결과(우리 예제 기준):
-d single
: 총 용량 3TB(1TB + 1TB + 500GB + 500GB)-d raid1
: 미러링으로 인해 사용 가능 용량은 최소 디스크 크기에 의해 제한되어 대략 500GB-d raid10
: RAID 1과 RAID 0 혼합으로, 예제에서는 1.5TB 정도의 사용 가능 용량
파일시스템 프로파일 변환
기존 Btrfs 볼륨을 다른 RAID 프로파일로 변환할 수 있습니다. 볼륨을 마운트한 뒤 변환 명령을 실행하세요.
먼저 마운트(이미 마운트되어 있지 않다면):
sudo mount /dev/sdb1 /mnt
프로파일 변환 예: RAID1로 전환
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
설명:
-dconvert
는 데이터,-mconvert
는 메타데이터 변환입니다. 메타데이터는 선택적으로 변환할 수 있습니다.- 변환 가능한 프로파일은 디스크 수와 디스크 크기에 제약을 받습니다. 예: RAID10은 최소 4개 디스크 필요.
하드디스크 고장 시 대처
하드디스크 하나가 실패하면 파일시스템을 손상 없이 유지하려면 해당 장치를 제거해야 합니다.
- 장애 디스크 있는 풀을 강제로 마운트
sudo mount -o degraded /dev/sdb /mnt
- 누락된 디바이스를 파일시스템에서 제거
sudo btrfs device delete missing /mnt
주의:
- RAID1 또는 RAID10을 사용 중이라면 미러된 데이터로부터 복구 가능성이 높습니다.
- RAID0 또는
-d single
프로파일을 사용 중이면 실패한 디스크의 데이터는 복구 불가능한 경우가 많습니다.
디스크 제거
운영 중에 특정 디스크를 안전하게 빼려면 데이터 이동이 완료될 때까지 기다려야 합니다.
sudo btrfs device delete /dev/sdc /mnt
설명:
- 이 작업은 대상 디스크의 데이터를 다른 디스크로 옮기는 과정이므로 시간이 걸립니다.
- 공간이 부족하면 실패합니다. 사전에 충분한 여유공간을 확보하세요.
자동 마운트 설정
/etc/fstab에 항목을 추가하면 부팅 시 자동으로 마운트됩니다. 예시:
/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0
디스크 대신 UUID를 사용하는 것이 더 권장됩니다. UUID는 디바이스 명칭 변경(/dev/sdX 변경)에 안전합니다.
권장 마운트 옵션
대용량 HDD 풀용 추천 옵션:
compress-force=zlib,autodefrag,nospace_cache
설명:
- compress-force=zlib: 모든 데이터를 zlib로 강제 압축합니다. 공간 절약에 도움됩니다.
- autodefrag: 작은 파일이 자주 수정되는 경우 단편화를 줄여줍니다.
- nospace_cache: 특정 케이스에서 공간 관리 동작을 다르게 하여 안정성을 높입니다.
SSD용 권장 옵션:
noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache
설명:
- noatime: 접근 시간 기록 생략으로 쓰기 감소
- compress=lzo: 빠른 압축으로 SSD 성능과 수명에 유리
- ssd,discard: TRIM을 활성화(드라이브이 지원하는 경우) 등
- space_cache/inode_cache: 공간 관련 캐시 성능 개선
전체 예시(fstab, SSD용):
/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache 0 0
점검 및 유지보수 체크리스트
Sysadmin용 기본 점검 목록:
- SMART 상태 확인:
smartctl -a /dev/sdX
- Btrfs 상태 확인:
btrfs filesystem df /mnt
,btrfs filesystem show
- 밸런스 작업 주기 설정: 로그·사용패턴에 따라 주기적으로
btrfs filesystem balance
실행 - 스냅샷 정책: 중요한 데이터는 정기 스냅샷으로 보호
- 백업: RAID는 백업을 대신하지 않음. 중요한 데이터는 별도 백업 유지
Home 사용자용 간단 체크:
- 중요한 파일은 외장 HDD 또는 클라우드에 백업
- 새 디스크 추가 전
mkfs.btrfs
실행 여부 확인 - fstab에 UUID 사용 권장
빠른 명령어 치트시트
- 파일시스템 생성:
sudo mkfs.btrfs /dev/sdX
- 디바이스 추가:
sudo btrfs device add /dev/sdY /mnt
- 디바이스 제거:
sudo btrfs device delete /dev/sdY /mnt
- 밸런스 시작:
sudo btrfs filesystem balance /mnt
- RAID 변환:
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
- 누락 디바이스 삭제:
sudo btrfs device delete missing /mnt
- 볼륨 정보 보기:
btrfs filesystem df /mnt
/btrfs filesystem show
의사결정 흐름도
다음 간단한 흐름도는 새로운 디스크를 풀에 추가하거나 RAID 프로파일을 결정할 때의 기준을 정리합니다.
flowchart TD
A[새 디스크 추가?] -->|예| B{디스크 크기 동일?}
B -->|예| C{미러링 필요?}
B -->|아니요| D[단일 프로파일 사용: -d single]
C -->|예| E[raid1 또는 raid10 고려]
C -->|아니요| F[raid0 또는 single 선택]
A -->|아니요| G[기존 구성 유지]
언제 Btrfs가 적합하지 않은가
- 극도로 안정성이 중요하고 검증된 환경(금융, 의료 등)에서는 충분한 테스트 후 사용 권장
- 단일 디스크 단순 사용으로 특별한 기능이 필요 없다면 ext4가 더 단순하고 안전
- 특수한 RAID 컨트롤러 기능(하드웨어 RAID의 특정 기능)에 의존하는 환경에서는 호환성 검토 필요
마이그레이션 팁
- 기존 데이터가 있다면 먼저 전체 백업을 생성하세요.
- 디스크를 한 번에 추가하기 어렵다면 단계적으로
btrfs device add
후balance
를 통해 확장하세요. - 변환 작업은 디스크 I/O를 많이 사용하므로 비사용 시간대에 실행하세요.
위험 요인과 완화책
- 디스크 장애로 인한 데이터 손실: RAID1/RAID10 사용, 정기 스냅샷 및 외부 백업
- 변환 중 전원 장애: UPS 사용 권장
- 공간 부족으로 인한 삭제 실패: 사전 여유공간 확인, 임시 외부 저장소 확보
SSD와 HDD의 지역 특이점
- SSD: compress=lzo 권장, discard(TRIM) 활성화 시 성능/수명 영향 확인
- HDD: zlib 등이 더 높은 압축률을 제공하나 CPU 부하 검토 필요
- 혼합 환경(SSD + HDD): 데이터/메타데이터 정책을 분리하여 성능 최적화 검토
1줄 용어집
- Btrfs: 스냅샷·풀링·RAID 프로파일을 지원하는 리눅스용 최신 파일시스템
- 밸런스: 디스크 간 데이터 분산을 재조정하는 작업
- 서브볼륨: Btrfs 내부의 논리적 볼륨 단위
템플릿: /etc/fstab 예시 모음
HDD 풀(압축 강제):
UUID= /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,compress-force=zlib,autodefrag,nospace_cache 0 0
SSD 풀(권장):
UUID= /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache 0 0
UUID 확인 명령: blkid /dev/sdb
요약
Btrfs는 다수의 디스크를 하나의 풀로 묶고, 필요한 경우 미러링까지 제공하는 유연한 파일시스템입니다. 생성·추가·변환·장애복구와 같은 주요 작업은 명령줄로 비교적 간단히 수행되며, fstab 마운트 옵션과 정기 점검 절차를 마련하면 안정적으로 운영할 수 있습니다.
중요: RAID는 백업을 대체하지 않습니다. 중요한 데이터는 항상 별도 백업을 유지하세요.
요약 정리:
- 작은 환경에서는 ext4가 더 간단할 수 있음
- 다양한 디스크 크기를 묶을 때는
-d single
유용 - 미러링(RAID1/10)은 데이터 보호에 도움
- 자동마운트와 마운트 옵션으로 성능 최적화 가능
중요: 마이그레이션·변환 작업 전 전체 백업을 권장합니다.
참고 이미지 크레딧: William Hook