개요
손상된(degraded) RAID 배열이 있을 때, 제거된 디스크를 다시 붙이기 전에 배열의 남은 디스크 공간을 최대화하고 LVM 볼륨과 파일시스템을 확장해야 합니다. 이 문서는 mdadm, LVM(pvresize, lvextend) 및 파일시스템(resize2fs, e2fsck)을 사용하는 실전 절차를 제공합니다. 핵심 개념: mdadm의 –grow는 배열 장치의 사이즈를 변경하고, pvresize는 물리 볼륨(PV)을 재스캔해 사용 가능한 전체 공간을 LVM에 노출합니다.
중요: 아래 명령은 루트 권한으로 실행해야 하고, 실제 환경에서 실행 전 반드시 백업하세요.
전제 조건
- rescue(복구) 시스템으로 부팅할 수 있어야 합니다.
- mdadm, lvm2, 관련 커널 모듈이 rescue 환경에 로드되어야 합니다.
- /dev/sda5(예시) 같은 디스크명은 환경에 맞게 조정하세요.
단계별 절차
1) 제거된 디스크가 배열에서 완전히 제거되었는지 확인
먼저 /dev/sda5가 배열에서 실패 및 제거 처리되었는지 확인합니다. 예시 명령:
mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5
중요: 슈퍼블록을 초기화하지 않으면, 나중에 디스크를 다시 추가할 때 동기화가 제대로 이루어지지 않거나 부팅 문제를 일으킬 수 있습니다.
슈퍼블록 초기화:
mdadm --zero-superblock /dev/sda5
2) rescue 시스템으로 부팅 및 모듈 활성화
rescue 환경으로 부팅한 뒤 필요한 커널 모듈을 로드합니다:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
그다음 배열을 활성화합니다. mdadm 설정을 백업하고 스캔 결과를 기록합니다:
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
(위 경로 중간의 공백은 원문을 따랐습니다. 실환경에서는 “/etc/init.d/lvm start”로 실행하세요.)
3) 배열 확장
이제 /dev/md1을 가능한 최대 크기로 확장합니다:
mdadm --grow /dev/md1 --size=max
–size=max은 가능한 최대값을 의미합니다. KiBytes 단위로 직접 지정할 수도 있습니다.
4) PV(LVM 물리 볼륨) 확장
PV를 최대값으로 늘립니다:
pvresize /dev/md1
그다음 볼륨 그룹 상태를 확인합니다:
vgdisplay
예시 출력(원문 유지):
root@Knoppix:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 29
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.75 GB
PE Size 4.00 MB
Total PE 1217
Alloc PE / Size 1023 / 4.00 GB
Free PE / Size 194 / 776.00 MB
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
root@Knoppix:~#
위 예에서 Free PE가 194이므로 해당 PE를 루트 LV에 할당할 수 있습니다.
LV 확장(예시):
lvextend -l +194 /dev/server1/root
5) 파일시스템 검사 및 확장
파일시스템을 확장하기 전에 반드시 검사합니다:
e2fsck -f /dev/server1/root
파일시스템 크기 조정:
resize2fs /dev/server1/root
확인용 재검사:
e2fsck -f /dev/server1/root
6) 원 시스템으로 부팅 후 디스크 재추가
정상 시스템으로 재부팅한 뒤, /dev/sda5를 배열에 다시 추가합니다. 먼저 슈퍼블록을 다시 초기화하고 추가합니다:
mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5
동기화 상태 확인:
cat /proc/mdstat
이제 /dev/sdb5와 /dev/sda5가 동기화 중인 것을 확인할 수 있어야 합니다.
역할별 체크리스트
- 시스템 관리자
- 전체 절차와 복구 계획 숙지
- 백업 확인 및 스냅샷 확보
- 복구 담당자
- rescue 이미지와 필요한 패키지(mdadm, lvm2) 준비
- 커널 모듈 로드 및 mdadm 설정 검증
- 운영팀
- 동기화 기간 동안 모니터링(디스크 I/O/로그)
- 완료 후 파일무결성/서비스 상태 확인
간단한 방법론(메모리 모델)
- 디스크 제거 상태 확인 및 슈퍼블록 초기화
- rescue로 부팅해 모듈 로드 및 배열 어셈블
- mdadm으로 배열 최대화 → pvresize → lvextend
- 파일시스템 검사 및 확장 → 재부팅 → 디스크 재추가
실패 사례와 대안
- pvresize가 새 공간을 인식하지 못함
- /proc/partitions와 dmesg로 장치 인식 확인. mdadm이 올바르게 어셈블되었는지 점검.
- 디스크를 실수로 초기화한 경우
- 즉시 작업 중단, 가능한 경우 백업에서 복구. 전문 데이터 복구 서비스 상담.
- 파일시스템에서 resize2fs 실패
- 파일시스템 유형과 버전에 맞는 툴 사용(xfs면 xfs_growfs 등).
간단 용어집(1줄)
- mdadm: 리눅스에서 소프트웨어 RAID를 관리하는 툴
- pvresize: LVM 물리 볼륨의 크기를 변경하는 명령
- lvextend: LVM 논리볼륨을 확장하는 명령
- e2fsck/resize2fs: ext2/3/4 파일시스템 검사 및 확장 툴
결정 흐름(간단 mermaid)
flowchart TD
A[디스크 분리 확인] --> B{슈퍼블록 초기화 필요?}
B -- 예 --> C[mdadm --zero-superblock]
B -- 아니오 --> C
C --> D[rescue로 부팅]
D --> E[모듈 로드 및 mdadm -A --scan]
E --> F[mdadm --grow --size=max]
F --> G[pvresize /dev/md1]
G --> H[lvextend && e2fsck && resize2fs]
H --> I[정상 부팅 후 mdadm -a /dev/md1 /dev/sda5]
I --> J[동기화 확인: cat /proc/mdstat]
마무리 요약
- 데이터 손실을 피하려면 작업 전 백업이 필수입니다.
- mdadm과 LVM 명령의 순서를 지켜야 안전하게 확장이 가능합니다.
- 확장 후 반드시 파일시스템 검사를 실행하세요.
참고 링크
- Knoppix: http://www.knoppix.net/