실험 목적으로 단일 시스템에 최대한 많은 디스크를 마운트해야 합니다. 예비 디스크가 6개밖에 없었기 때문에 이를 128개의 GPT 파티션으로 나누고 각 파티션을 사용하여 장치의 RAID0 배열을 만들기로 결정했습니다.
문제는 mdadm이 512개의 배열만 생성 /dev/md[0-511]
하고 다른 배열은 생성할 수 없다는 것입니다.
513번째 어레이를 생성하려고 시도한 후 오류가 발생합니다.
% mdadm -C /dev/md512 -l raid0 -n 1 /dev/sdd128 --force
mdadm: /dev/md512를 열 때 예기치 않은 오류가 발생했습니다.
이것이 디자인의 한계인가요? 우회할 수 있는 방법이 있나요?
답변1
/dev/md*
단일 Linux 시스템의 최대 어레이 제한에 도달했습니다.
이는 전통적인 Unix 장치의 메이저 및 마이너 번호와 관련이 있습니다. 처음에 MD RAID 드라이버는 주 블록 장치 번호 9( /usr/include/linux/raid/md_u.h
MD_MAJOR로 정의됨)를 할당하고 256개의 부 장치 번호 세트를 허용하여 256개의 고유한 RAID 어레이 장치를 허용합니다.(장치 번호 할당의 표준 목록은 커널 소스 패키지와 함께 제공되는 문서에 포함되어 있습니다.)
mdp_major
이는 궁극적으로 불충분한 것으로 판명되었으며 256개 이상의 RAID 어레이가 필요할 때 추가 메이저 번호(커널 코드에서 호출됨)를 사용하는 메커니즘이 개발되었습니다.커널 소스 파일에서 이를 처리하는 코드를 찾을 수 있습니다 .../drivers/md/md.c
.추가 주요 번호는 mdp_major
동적 주요 번호 범위(234..254, 위에서 시작하여 아래로)에서 동적으로 할당됩니다.
단일 호스트에서 512개가 넘는 MD RAID 어레이를 사용하려면 필요한 경우 여러 동적 주 번호를 사용하도록 이 메커니즘을 다시 작성해야 합니다.
답변2
다소 더러운 해결 방법이 있습니다( 3.10.0-862.11.6
브랜치의 최신 커널에서 작동).
# echo md512 > /sys/module/md_mod/paramaters/new_array
# mdadm -C /dev/md512 -l raid0 -n 1 /dev/sdd128 --force