1. 개요
UTM Ubuntu 환경에서 mdadm을 사용하여 소프트웨어 RAID6과 RAID10을 구성하고, 디스크 장애 상황을 가정하여 복구 절차까지 확인하였다.
기존 RAID0, RAID1, RAID5 실습에 이어 이번에는 안정성과 장애 허용성을 더 강화한 RAID6, 그리고 성능과 안정성을 함께 고려하는 RAID10을 대상으로 실습을 진행하였다.
실습의 흐름은 다음과 같다.
2. 실습 환경
실습은 새로운 Ubuntu 가상머신 환경에서 진행하였다.
| 항목 | 내용 |
|---|---|
| OS | Ubuntu |
| RAID 관리 도구 | mdadm |
| OS 디스크 | /dev/vda |
| RAID6 구성 디스크 | /dev/vdb1, /dev/vdc1, /dev/vdd1, /dev/vde1 |
| RAID10 구성 디스크 | /dev/vdf1, /dev/vdg1, /dev/vdh1, /dev/vdi1 |
| RAID6 마운트 위치 | /raid6 |
| RAID10 마운트 위치 | /raid10 |
실습용 디스크는 1GB 크기의 가상 디스크를 여러 개 추가하여 구성하였다.
3. mdadm 설치
먼저 RAID 구성을 위해 mdadm을 설치하였다.
설치 후 RAID 구성을 위해 사용할 디스크 목록을 확인하였다.
OS가 설치된 디스크는 /dev/vda였고, RAID 실습용 디스크는 /dev/vdb부터 /dev/vdi까지 사용하였다.
4. RAID용 파티션 생성
먼저 /dev/vdb에 RAID용 파티션을 생성하였다.
fdisk에서 다음과 같이 진행하였다.
생성 결과는 다음과 같았다.
이후 나머지 디스크에는 /dev/vdb의 파티션 테이블을 복제하였다.
이 명령은 /dev/vdb의 파티션 구조를 덤프한 뒤, /dev/vdc부터 /dev/vdi까지 동일하게 적용하는 방식이다.
결과적으로 모든 실습 디스크에 Linux raid autodetect 타입의 1023MiB 파티션이 생성되었다.
5. RAID6 구성
RAID6은 최소 4개의 디스크가 필요하며, 2개의 패리티 정보를 사용한다. 따라서 디스크 2개 장애까지 견딜 수 있다.
이번 실습에서는 다음 4개 파티션으로 RAID6을 구성하였다.
RAID6 생성 명령은 다음과 같다.
구성 후 상태를 확인하였다.
정상 구성 후 다음과 같이 RAID6 배열이 활성화되었다.
[4/4] [UUUU]는 RAID 구성에 필요한 4개 디스크가 모두 정상적으로 동작하고 있다는 의미이다.
6. RAID6 파일시스템 생성 및 마운트
RAID6 장치 위에 ext4 파일시스템을 생성하였다.
마운트 디렉터리를 생성하고 마운트하였다.
마운트 상태를 확인하였다.
결과는 다음과 같았다.
1GB 디스크 4개를 사용했지만 RAID6은 패리티 2개 분량을 사용하므로 실제 사용 가능 용량은 약 2GB로 표시되었다.
테스트 파일도 생성하였다.
7. RAID10 구성
RAID10은 RAID1의 미러링과 RAID0의 스트라이핑을 결합한 구조이다. 일반적으로 성능과 안정성을 함께 확보할 수 있지만, 전체 용량의 약 절반만 사용할 수 있다.
이번 실습에서는 다음 4개 파티션으로 RAID10을 구성하였다.
RAID10 생성 명령은 다음과 같다.
상태 확인 명령은 다음과 같다.
RAID10 배열은 다음과 같이 생성되었다.
RAID10의 레이아웃은 near=2로 표시되었다. 이는 일반적인 RAID10 near layout이며, 데이터가 두 개의 복제본으로 구성된다는 의미이다.
8. RAID10 파일시스템 생성 및 마운트
RAID10 장치에도 ext4 파일시스템을 생성하였다.
마운트 디렉터리를 생성하고 마운트하였다.
마운트 확인:
결과:
RAID10도 1GB 디스크 4개를 사용했지만, 미러링 구조 때문에 실제 사용 가능 용량은 약 2GB로 표시되었다.
테스트 파일을 생성하였다.
9. mdadm 설정 저장
RAID 배열이 재부팅 후에도 자동으로 조립되도록 mdadm.conf에 배열 정보를 저장하였다.
먼저 기존 ARRAY 설정이 있는지 확인하였다.
이후 현재 RAID 배열 정보를 저장하였다.
저장된 결과는 다음과 같았다.
이후 initramfs를 갱신하였다.
이 작업을 통해 부팅 초기 단계에서도 RAID 배열 정보를 인식할 수 있게 된다.
10. fstab 자동 마운트 설정
RAID 장치를 부팅 시 자동으로 마운트하기 위해 파일시스템 UUID를 확인하였다.
확인된 UUID는 다음과 같았다.
/etc/fstab에 다음 내용을 추가하였다.
설정 적용을 확인하기 위해 마운트를 해제한 뒤 mount -a를 실행하였다.
결과:
테스트 파일도 정상적으로 읽혔다.
11. 재부팅 후 자동 인식 확인
재부팅 후 RAID 배열과 마운트 상태를 확인하였다.
정상적으로 RAID6과 RAID10이 자동 조립되고, /raid6, /raid10에 자동 마운트되는 것을 확인하였다.
12. 디스크 장애 상황 재현
장애 대응 실습을 위해 VM을 종료한 뒤, RAID6과 RAID10에 속한 디스크를 각각 1개씩 제거하였다.
이후 VM을 다시 부팅하자 RAID 배열은 다음과 같이 inactive 상태로 감지되었다.
이는 RAID 메타데이터는 감지되었지만, 디스크가 부족한 degraded 상태에서 자동 실행되지 않은 상황이다.
이때 다음 명령으로 배열을 수동 실행하였다.
실행 후 상태는 다음과 같았다.
[4/3] [UUU_]는 원래 4개 디스크로 구성된 배열에서 현재 3개만 동작하고 있으며, 1개가 빠져 있음을 의미한다.
이후 수동으로 마운트하였다.
마운트 후 테스트 파일을 확인하였다.
결과:
이를 통해 디스크 1개 장애 상태에서도 RAID6과 RAID10 모두 기존 데이터 접근이 가능함을 확인하였다.
13. 새 디스크 추가 및 리빌드
장애 복구를 위해 새 디스크를 추가하였다. 부팅 후 확인 결과 /dev/vdh, /dev/vdi가 새 디스크로 인식되었다.
새 디스크에 기존 RAID용 파티션 구조를 복제하였다.
RAID6 복구용 디스크:
RAID10 복구용 디스크:
이후 각 RAID 배열에 새 파티션을 추가하였다.
리빌드 완료 후 /proc/mdstat 결과는 다음과 같았다.
[4/4] [UUUU] 상태로 돌아왔기 때문에 두 배열 모두 정상 복구된 것을 확인할 수 있다.
상세 상태도 확인하였다.
두 배열 모두 다음 상태를 보였다.
마운트와 데이터도 정상 상태였다.
14. 복구 후 재부팅 검증
새 디스크를 추가하고 리빌드까지 완료한 뒤, 다시 재부팅하여 RAID 배열이 정상적으로 자동 조립되고 자동 마운트되는지 확인하였다.
재부팅 후 mdadm --detail 결과에서 두 배열 모두 정상 상태를 보였다.
/proc/mdstat에서도 두 배열 모두 [4/4] [UUUU] 상태였다.
마운트 상태도 정상적으로 유지되었다.
테스트 파일도 정상적으로 읽혔다.
이를 통해 새 디스크 추가 후에도 기존 mdadm.conf와 fstab 설정이 정상적으로 동작하며, 재부팅 이후에도 RAID 배열과 마운트 상태가 유지됨을 확인하였다.
15. 실습 중 확인한 주요 개념
RAID6
RAID6은 2개의 패리티 정보를 사용한다. 따라서 디스크 1개 장애뿐 아니라 2개 장애까지도 견딜 수 있다.
이번 실습에서는 디스크 1개 제거 후 degraded 상태에서도 데이터 접근이 가능함을 확인하였다.
이번 실습에서는 1GB 디스크 4개를 사용했기 때문에 약 2GB의 사용 가능 용량이 표시되었다.
RAID10
RAID10은 미러링과 스트라이핑을 결합한 방식이다. 읽기/쓰기 성능과 장애 대응 능력이 모두 좋은 편이다.
다만 RAID6과 달리 디스크 2개 장애를 항상 보장하지는 않는다. 같은 미러 쌍에 속한 디스크가 동시에 장애가 나면 데이터 손실이 발생할 수 있다.
이번 실습에서는 디스크 1개 제거 후 degraded 상태에서도 데이터 접근이 가능함을 확인하였다.
16. 정리
이번 실습을 통해 Ubuntu에서 mdadm을 이용해 RAID6과 RAID10을 구성하고, 장애 발생 및 복구 과정을 직접 확인하였다.
최종적으로 다음 내용을 검증하였다.
| 항목 | 결과 |
|---|---|
| RAID6 생성 | 성공 |
| RAID10 생성 | 성공 |
| ext4 파일시스템 생성 | 성공 |
/raid6, /raid10 마운트 | 성공 |
| mdadm.conf 저장 | 성공 |
| fstab 자동 마운트 설정 | 성공 |
| 재부팅 후 자동 조립 | 성공 |
| 디스크 1개 제거 후 degraded 상태 확인 | 성공 |
| degraded 상태에서 데이터 접근 | 성공 |
| 새 디스크 추가 후 리빌드 | 성공 |
| 복구 후 재부팅 검증 | 성공 |
이번 실습에서 가장 중요한 부분은 단순히 RAID를 생성하는 것이 아니라, 장애 발생 후에도 데이터를 읽을 수 있는지, 그리고 새 디스크를 추가했을 때 정상적으로 리빌드되어 다시 clean 상태로 돌아오는지를 확인한 점이다.
최종적으로 RAID6과 RAID10 모두 다음 상태로 복구되었다.