mdadm; 이전에는 작동했지만 "실패"한 후에는 디스크 크기로 인해 배열에 참여할 수 없습니다.

mdadm; 이전에는 작동했지만 "실패"한 후에는 디스크 크기로 인해 배열에 참여할 수 없습니다.

추상적인

Raid 5 어레이가 작동하고 있는데 상자를 재부팅했는데 mdadm이 부품 중 하나를 재조립하지 못했습니다.

이것은 일부일 뿐이므로 다시 동기화하는 것이 쉬울 것이라고 생각했습니다. 그러나 이제 장치가 어레이에 합류할 만큼 크지 않기 때문에 이것이 작동하지 않는 것으로 나타났습니다! ?

초기 레이드 설정

슬프게도 꽤 복잡합니다. 저는 3TB 디스크 2개와 선형 RAID 2개(1TB+2TB로 구성)를 결합한 Raid 5를 가지고 있습니다. 디스크를 분할하지 않았습니다. 즉, RAID가 물리적 디스크에 걸쳐 있습니다. 돌이켜보면 이것이 초기 실패의 원인이었을 수도 있습니다.

운명적인 재부팅 후

mdadm은 슈퍼 블록이 존재하지 않는다고 주장하면서 선형 배열 중 하나를 조립하는 것을 거부합니다(mdadm --examine으로 둘 다 확인하면 아무것도 반환되지 않습니다). 더 이상한 점은 여전히 ​​분할 가능한 잔재물이 남아 있다는 것입니다.

이 시점에서 가장 빠른 해결책은 선형 배열을 다시 만들고 이를 더 큰 raid5 배열에 추가한 다음 다시 동기화하는 것이라고 생각합니다. 따라서 저는 이러한 파티션 테이블 항목을 삭제하기로 결정했습니다. 즉, 여유 공간을 확보하기 위해 파티션을 나누었습니다. 그런 다음 두 디스크에 걸쳐 선형 배열을 만들었습니다.

# mdadm --create /dev/md2 --level=linear --raid-devices=2 /dev/sda /dev/sdc

그러나 배열에 다시 추가하려고 하면

# mdadm --add /dev/md0 /dev/md2        
mdadm: /dev/md2 not large enough to join array

그렇다면 디스크가 축소된 것으로 정확하게 추측하고 있는 것일까요?

카운팅 블록

이제 블록 계산을 할 시간인 것 같아요!

선형 배열의 두 가지 구성요소:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0   1000204886016   /dev/sda
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0   2000398934016   /dev/sdc

mdadm의 선형 모드에 오버헤드가 없다면 두 크기의 합은 3TB 드라이브 중 하나(3000592982016)보다 커집니다. 그러나 그것은 진실이 아니다:

/proc/mdstat는 선형 배열의 크기를 필요한 것보다 120016 작은 2930015024로 보고합니다.

# mdadm --detail /dev/md0 | grep Dev\ Size
Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)

그런데 이건...너무 의심스럽네요! 재부팅하기 전에(비록 이전 버전에서는) 이 라인 어레이는 더 큰 어레이의 일부였습니다!

나는 무슨 일이 일어났는지 믿는다

재부팅 후 mdadm은 어레이의 일부가 누락되었음을 발견했습니다. 가장 작은 구성원이므로 배열 장치의 크기는 다음으로 가장 작은 장치를 채울 수 있도록 자동으로 커집니다.

하지만 그건 어, 합리적인 행동처럼 들리지 않죠, 그렇죠?

대안은 어떤 이유에서인지 더 이상 최대 크기의 선형 공격대를 생성하지 않는다는 것입니다. 하지만... 그것도 좀 우스꽝스럽습니다.

나는 무엇을 해야할지 고민하고 있었어요

성능이 저하된 배열을 축소하여 "손상된" 선형 배열을 제외하고 --add 및 --grow를 다시 시도하십시오. 하지만 이것이 실제로 장치의 크기를 변경하지는 않습니다.

정확히 무엇이 잘못되고 있는지 이해하지 못하기 때문에, 무엇이든 서두르기 전에 먼저 이 문제의 원인이 무엇인지 이해하고 싶습니다.

답변1

그럼 어...제 생각에는...글쎄...디스크가...줄어들었나요?

기본적으로 메타데이터의 영역 보존 기간은 늘어날 수 있습니다. 최근에 최대 128MiB의 공간이 뚜렷한 이유 없이 낭비되는 mdadm사례를 접했습니다 . 이 항목을 mdadm확인하고 싶습니다 . 이상적으로는 섹터 수가 2048개를 초과해서는 안 됩니다.mdadm --examine /dev/device*data offset

이것이 실제로 문제인 경우 mdadm --create--data-offset=매개변수 와 함께 사용하여 mdadm메타데이터에 낭비되는 공간을 줄일 수 있습니다.

충분하지 않은 경우 오래된 0.90메타데이터(오프셋을 사용하지 않기 때문에 아마도 가장 공간 효율적일 것임)를 사용하거나 RAID의 다른 쪽을 약간 축소해야 합니다(축소는 LV/첫 번째 파일 시스템이라는 것을 기억하십시오).

관련 정보