|
|
데이터가 블록 단위로 여러 디스크에 분산 저장됨.
예: 4개의 디스크, 블록 크기 64KB → 첫 64KB는 디스크1, 다음 64KB는 디스크2, … 이런 식.
특정 데이터의 저장 디스크 = (블록 번호) % (디스크 수)
RAID 1 (미러링)
데이터가 동일하게 모든 디스크에 복제됨.
특정 데이터의 위치 = 모든 디스크에 동일하게 존재.
RAID 5 (스트라이프 + 패리티)
데이터 블록과 패리티 블록이 디스크에 분산됨.
특정 블록 위치를 찾으려면:
블록 번호 % (디스크 수) → 데이터 위치 결정
패리티 블록은 순환(Rotating) 방식으로 배치됨.
수식으로 계산 가능하지만, 디스크 배열과 스트라이프 크기(stripe size)를 알아야 함.
RAID 6 (이중 패리티)
RAID 5와 유사하지만, 패리티가 2개.
위치 계산이 RAID 5보다 복잡.
RAID 10 (RAID 1+0)
먼저 미러링, 그 다음 스트라이핑.
데이터 블록은 먼저 미러 그룹 안에 저장되고, 그룹 간 스트라이핑 적용.
2. 데이터 위치 확인 방법
소프트웨어 RAID (Linux mdadm)
mdadm --detail /dev/mdX : RAID 배열 정보 확인
스트라이프 사이즈(chunk size)와 디스크 순서를 확인 가능
블록 단위 오프셋 계산 → 어느 디스크 어느 블록에 있는지 유추 가능
예:
OFFSET = (파일 블록 번호 / chunk size) % number_of_data_disks하드웨어 RAID
RAID 컨트롤러 제조사마다 전용 유틸리티 제공
Dell PERC: perccli
HP Smart Array: hpacucli
LSI MegaRAID: MegaCli
RAID 레벨, 스트라이프 크기, 디스크 매핑 정보를 확인
특정 파일의 논리 블록 → RAID 스트라이프 계산 후 물리 디스크 추적 가능
파일시스템 수준
ext4, NTFS 등 파일시스템에서 블록 오프셋 확인
Linux: filefrag -v filename → 파일 블록 번호 확인
그 후 RAID 레벨과 스트라이프 계산 공식 적용 → 물리 디스크 추적
⚠️ 주의
하드웨어 RAID는 컨트롤러에서 논리적으로 하나의 디스크처럼 보이므로 직접 디스크에서 데이터 확인은 어렵습니다.
실수로 디스크를 조작하면 RAID 배열 전체가 손상될 수 있습니다.
대부분의 경우, 컨트롤러 유틸리티 + 파일시스템 블록 정보로 위치를 유추합니다.
원하시면 제가 RAID 5에서 특정 파일 블록이 어느 디스크에 있는지 계산하는 구체적인 공식과 예제도 만들어 드릴 수 있습니다.
혹시 그걸 원하시나요?