기술 가이드

손상된 RAID 어레이 크기 줄이기 가이드

6 min read Storage 업데이트됨 22 Sep 2025
손상된 RAID 어레이 크기 줄이기 가이드
손상된 RAID 어레이 크기 줄이기 가이드

개요

이 가이드는 /dev/md1(두 파티션 /dev/sda5, /dev/sdb5로 구성)이 degraded(한 디스크 실패) 상태일 때, 어레이 전체 크기를 줄이는 방법을 설명합니다. 예시 시스템에서는 /dev/sda5가 실패했고, 최종 목표는 /dev/md1을 5GB에서 4GB로 줄이는 것입니다.

한 줄 정의

  • RAID1: 동일한 데이터를 두 개 이상의 디스크에 복제하는 미러링 방식.
  • PV/LV/VG: LVM의 물리 볼륨(PV), 논리 볼륨(LV), 볼륨 그룹(VG).

중요: 이 과정은 데이터 손실 위험이 있으므로 전체 백업 후 진행하세요. 슈퍼블록 초기화(mdadm –zero-superblock)는 매우 중요합니다. 이 단계를 생략하면 이후 부팅 불가 또는 RAID 재구성 문제를 일으킬 수 있습니다.

사전 확인: 현재 상태 확인 예시

아래는 원본 시스템에서 실행한 상태 출력 예시입니다. 실제 환경에서 같은 명령으로 상태를 확인하세요.

cat /proc/mdstat

예시 출력:

server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]

md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]

unused devices:
server1:~#

파일 시스템 및 LVM 상태 확인 예시:

df -h
pvdisplay
vgdisplay
lvdisplay

(원본 출력은 본문 예시를 참조하세요.)

전체 작업 순서(요약)

  1. 실패한 디스크를 어레이에서 fail/ remove 후 슈퍼블록 초기화
  2. 복구(Rescue) 환경으로 부팅, 필요한 커널 모듈 로드
  3. LVM 및 파일시스템 검사/축소: resize2fs → lvreduce
  4. 불필요한 LV(예: swap)를 삭제(또는 끝에 있는 LV를 축소)
  5. pvresize로 PV 크기 변경
  6. mdadm –grow로 RAID 어레이 실제 크기 감소
  7. pvresize(다시)로 LVM이 새로운 공간을 인식하도록 조정
  8. LV/FS를 필요에 따라 늘리고 검사
  9. 실디스크 복원: /dev/sda5 슈퍼블록 초기화 후 어레이에 재추가
  10. /proc/mdstat로 동기화 검증

아래에서 각 단계를 상세히 설명합니다.

준비 단계: 실패 디스크 제거 및 슈퍼블록 지우기

먼저 실제로 /dev/sda5가 어레이에서 제거되었는지 확인하고 제거합니다.

mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5

그 다음, /dev/sda5의 md 슈퍼블록을 반드시 초기화합니다. 이 단계가 없으면 나중에 재추가 시 부팅 문제가 발생할 수 있습니다.

mdadm --zero-superblock /dev/sda5

중요: –zero-superblock은 디스크의 md 관련 메타데이터만 지웁니다. 디스크의 일반 파티션 테이블이나 다른 데이터를 지우는 명령이 아니지만, 실행 전 디스크 식별을 반드시 확인하세요.

복구 환경으로 부팅 및 모듈 로드

라이브(복구) 시스템으로 부팅한 뒤, 필요한 모듈을 활성화합니다.

modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10

mdadm 설정 파일 백업 및 스캔으로 md 디바이스 활성화:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan

LVM 서비스 시작:

/etc/init.d/lvm start

파일시스템과 LV를 안전하게 변경하기 위해서는 해당 파티션들이 마운트 해제되어 있어야 합니다. 루트의 경우 라이브 시디/USB에서 작업하세요.

파일시스템 검사 및 축소(중요한 순서)

먼저 파일시스템 무결성을 검사합니다.

e2fsck -f /dev/server1/root

원본 예시에서는 PV(/dev/md1) 크기가 5GB였고, 목표는 4GB입니다. LVM 계층 관계를 이해하세요:

  • filesystem <= LV
  • LV 합계 <= PV
  • PV <= md device (RAID)

따라서 안전하게 진행하려면 파일시스템을 먼저 줄여서 LV보다 작게 만든 뒤 LV를 줄이고, PV를 줄이고, 마지막으로 md 크기를 줄입니다.

예시에서는 다음과 같이 진행했습니다 (값은 사례용이며 실제 환경에서는 사용량에 맞춰 결정하세요):

  1. /dev/server1/root의 파일시스템을 2G로 축소(파일이 모두 들어갈 수 있도록 넉넉히 설정)
resize2fs /dev/server1/root 2G
  1. LV 자체를 2.5G로 축소
lvreduce -L2.5G /dev/server1/root

경고: lvreduce는 위험합니다. lvreduce 전에 resize2fs로 파일시스템을 LV보다 작게 축소했는지 다시 확인하세요.

끝 쪽(만약 존재) LV 제거 및 PV 축소

예시에서는 swap LV(/dev/server1/swap_1)가 디스크 끝에 있어 이를 삭제했습니다. 모든 경우에 삭제가 필요하지 않습니다. 중요한 것은 PV의 물리적 끝에서부터 공간을 확보해야 한다는 점입니다.

lvremove /dev/server1/swap_1

그 다음 PV(/dev/md1)를 원하는 크기로 설정합니다. 예시에서 PV를 3GB로 설정했습니다:

pvresize --setphysicalvolumesize 3G /dev/md1

RAID 어레이 크기 축소

이제 mdadm으로 어레이 크기를 줄입니다. –size는 KiB 단위로 지정해야 합니다. 4GB = 4 × 1024 × 1024 KiB = 4194304 KiB입니다. 또한 md 블록 단위(기본 64 KiB 등)로 정렬되어야 합니다. mdadm은 내부에서 블록 경계를 체크하므로 –size 값이 64로 나뉘는지 확인하세요.

mdadm --grow /dev/md1 --size=4194304

성공하면 md 장치 크기가 변경됩니다. 주의: 이 작업은 복구 모드에서 수행하는 것이 안전합니다.

PV 재확장 및 LV/FS 복원

mdadm으로 줄인 후, pvresize를 다시 실행하여 LVM이 새로운 디스크 크기를 반영하도록 합니다.

pvresize /dev/md1

그 다음 vgdisplay로 상태를 확인하고, 삭제했던 swap LV를 재생성하거나 root LV를 필요한 만큼 확장합니다. 예시에서는:

lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1

그리고 root LV를 남은 PE로 확장:

lvextend -l +317 /dev/server1/root
resize2fs /dev/server1/root

확장 후 파일시스템 검사:

e2fsck -f /dev/server1/root

모든 것이 정상이라면 라이브 환경을 빠져나가 시스템을 정상 부팅합니다.

실패 디스크 복원(옵션)

실제 /dev/sda5를 시스템에 다시 사용하려면 슈퍼블록 초기화 후 어레이에 재추가합니다.

mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5

그런 다음 /proc/mdstat을 확인하여 동기화(progress)가 진행 중인지 확인하세요.

cat /proc/mdstat

점검 및 검증 체크리스트

  • 전체 데이터 백업 완료
  • /proc/mdstat, pvdisplay, vgdisplay, lvdisplay 출력 캡처
  • 실패 디스크에 대해 mdadm –fail, –remove 실행
  • 실패 디스크의 md 슈퍼블록을 –zero-superblock로 초기화
  • 라이브 환경에서 필요한 모듈 로드 및 mdadm -A –scan 실행
  • e2fsck로 FS 무결성 검사
  • resize2fs로 파일시스템 축소(안전 마진 확보)
  • lvreduce로 LV 축소 (순서 엄수)
  • 필요시 끝 LV 제거(lvremove) 또는 축소
  • pvresize –setphysicalvolumesize로 PV 축소
  • mdadm –grow로 md 장치 크기 조정(크기: KiB, 64단위 정렬 확인)
  • pvresize로 LVM 인식 업데이트
  • lvextend/resize2fs로 LV/FS 재조정
  • e2fsck로 최종 검사
  • 정상 부팅 및 md 동기화 확인

롤백/사고 대응(Incident runbook)

  1. 작업 중 심각한 문제 발생 시 즉시 모든 변경을 중지하고, 가능한 경우 이전 백업에서 복원 준비.
  2. LV나 PV가 잘못 줄어들어 데이터가 손상됐다면, lvreduce 전에 만든 LV snapshot이나 백업에서 복원.
  3. mdadm으로 잘못된 디스크를 추가했다면 즉시 –fail로 표기 후 –remove로 제거.
  4. 부팅 불가시 라이브 환경으로 부팅하여 /etc/fstab 및 initramfs 문제를 점검(특히 UUID 변경 여부).

중요: PV 축소, LV 축소는 되돌리기 어렵습니다. 미리 전체 백업을 권장합니다.

언제 이 방법이 실패하는지 / 한계

  • LV가 PV 끝쪽에 걸쳐 있고 끝 방향으로 충분한 공간이 확보되지 않는 경우, 단순 삭제/축소만으로는 해결 불가.
  • 암호화된 파티션(LUKS 등)이나 비표준 파일시스템(Btrfs, XFS)은 다른 절차가 필요합니다. XFS는 온라인으로 줄일 수 없으므로 다른 방법 사용.
  • RAID 레벨이 degraded 상태에서 –grow –size 감소가 항상 안전한 것은 아닙니다. 메타데이터/정렬을 주의해야 합니다.

대안적 접근

  • 백업 후 새 디스크로 전체 재구성: 위험 회피를 위해 가장 안전한 방법.
  • LVM을 사용하지 않은 단순 파티션이면 파티션 단위로 재파티셔닝 후 데이터 복사.

역할별 체크리스트

관리자:

  • 백업 스냅샷 생성
  • 작업 일정 및 유지보수 윈도우 공지 엔지니어:
  • 라이브 환경에서 명령 실행, 로그 캡처
  • mdadm/pvdisplay 출력 보관 운영팀:
  • 서비스 중단 알림 및 복원 시나리오 준비

테스트 케이스 및 수용 기준

  • 모든 명령 실행 후 df, lvdisplay, vgdisplay가 기대값을 만족해야 함.
  • /proc/mdstat에 디스크 재동기화가 표시되어야 함.
  • resize2fs 및 e2fsck가 에러 없이 통과해야 함.

의사결정 흐름(간단한 다이어그램)

flowchart TD
  A[디스크 실패 확인] --> B{백업 있나?}
  B -- No --> C[즉시 전체 백업]
  B -- Yes --> D[실패 디스크 fail/remove 및 --zero-superblock]
  D --> E[라이브 환경 부팅 & 모듈 로드]
  E --> F[FS 검사'e2fsck']
  F --> G[파일시스템 축소 -> LV 축소]
  G --> H[PV 축소 -> mdadm --grow'크기 감소']
  H --> I[pvresize -> LV/FS 확장 및 검사]
  I --> J[정상 부팅 및 md 동기화 확인]
  J --> K[작업 완료]

호환성 및 주의사항

  • 이 절차는 ext2/3/4 계열 파일시스템을 전제로 합니다. XFS 등은 resize2fs를 지원하지 않습니다.
  • mdadm 버전과 커널 RAID 모듈의 버전에 따라 –size 단위와 정렬 규칙이 다를 수 있습니다. 최신 mdadm 매뉴얼을 확인하세요.
  • LVM의 물리적 확장/축소는 PE 단위로 작업되므로 pvdisplay의 PE Size를 확인하고 계산하세요.

요약

  • 기본 원칙: 파일시스템 <= LV <= PV <= md device.
  • 안전한 순서: FS 축소 → LV 축소 → PV 축소 → mdadm으로 md 크기 축소 → pvresize로 LVM 인지 → LV/FS 복원 및 검사.
  • 항상 백업을 준비하고, –zero-superblock 단계와 e2fsck 검사를 생략하지 마세요.

중요: 실제 값(크기/PE 수)은 본 예시와 다를 수 있습니다. 각 명령 전에 현재 상태를 확인하고 계산하세요.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

iOS 16 통화 대기 문제 해결 가이드
모바일

iOS 16 통화 대기 문제 해결 가이드

NotebookLM으로 비디오 개요 만들기 — 단계별 가이드
튜토리얼

NotebookLM으로 비디오 개요 만들기 — 단계별 가이드

Android 백그라운드 앱 차단 및 배터리 최적화 방법
모바일/안드로이드

Android 백그라운드 앱 차단 및 배터리 최적화 방법

손상된 RAID 어레이 크기 줄이기 가이드
Storage

손상된 RAID 어레이 크기 줄이기 가이드

아이폰 인스타그램 스토리 소리 안 날 때 해결법
모바일 팁

아이폰 인스타그램 스토리 소리 안 날 때 해결법

가짜 전화번호 추적 및 차단 가이드
보안

가짜 전화번호 추적 및 차단 가이드