mdadm은 다른 장치와 동기화하는 데 적합한 장치를 어떻게 식별합니까?

mdadm은 다른 장치와 동기화하는 데 적합한 장치를 어떻게 식별합니까?

2개의 디스크가 있는 mdadm raid1이 있다고 가정합니다.

그런 다음 서버를 종료하고 각 디스크를 다른 시스템으로 분할한 다음 시작하면 약간 일관성이 없게 됩니다.

이제 두 상자를 모두 닫고 디스크를 원래 머신에 다시 넣고 부팅합니다.

mdadm은 이 2개의 디스크 중 어느 디스크가 올바른지, 어느 디스크가 "잘못"인지 어떻게 결정하고 올바른 디스크와 동기화합니까?

이것을 어떻게든 지정할 수 있나요? 이렇게 하면 실제로 어떤 일이 발생합니까? 디스크가 자동으로 동기화됩니까, 아니면 어레이가 손상됩니까?

답변1

이 경우 각 디스크는 다른 디스크에 오류가 발생했다고 주장합니다.

결과는 디스크를 얼마나 정확하게 조립하느냐에 따라 다르지만 기본적으로 하나의 디스크를 사용하고 다른 디스크는 무시하거나 다른 디스크를 별도의 공격으로 조립하여 분할 두뇌를 제공할 수 있습니다.

루프 장치로 실험을 했는데 loop1을 먼저 변경한 다음 loop2를 변경했기 때문에 loop2가 더 "최근" 장치였지만 무시되었습니다.

# mdadm --assemble /dev/md42 /dev/loop1 /dev/loop2
mdadm: ignoring /dev/loop2 as it reports /dev/loop1 as failed
mdadm: /dev/md42 has been started with 1 drive (out of 2).

반대 방향으로 수행하면 다른 디스크는 무시됩니다.

# mdadm --assemble /dev/md42 /dev/loop2 /dev/loop1
mdadm: ignoring /dev/loop1 as it reports /dev/loop2 as failed
mdadm: /dev/md42 has been started with 1 drive (out of 2).

이로 인해 먼저 발견한 디스크에 고정될 것이라고 믿게 됩니다. 따라서 재부팅 후 갑자기 RAID의 다른 면을 보게 될 가능성이 있습니다. 이건 너무 나쁘다.

자동으로 동기화되지 않으며 다른 디스크도 완전히 무시합니다.

# cat /proc/mdstat 
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md42 : active raid1 loop1[0]
      102272 blocks super 1.2 [2/1] [U_]

이런 상황은 절대 원하지 않으니 피해야 합니다(설명한 방식으로 디스크를 움직여 의도적으로 발생시키지 마세요). 이와 같은 충돌은 수동으로 해결해야 합니다.

관련 정보