Linux에서 SSD/NVME 친화적인 MD RAID1 재구성

Linux에서 SSD/NVME 친화적인 MD RAID1 재구성

SSD와 NVME RAID1 어레이를 사용하여 대부분의 가상 머신 디스크를 저장합니다. 데이터의 75% 이상이 0입니다(사전 할당된 이미지, 여유 공간).

디스크에 오류가 발생하여 교체되면 재구축 시 모든 데이터가 교체 디스크에 복사 및 기록되어 NVME에 열 조절이 발생하고 SSD/NVME에 더 많은 마모가 발생할 것으로 가정합니다. 먼저 두 디스크의 데이터를 비교한 다음 필요한 경우에만 새 디스크에 쓰도록 재구축을 구성하는 방법이 있습니까?

아니면 SSD/NVME 칩이 데이터가 0인지 확인하고 대상 블록이 아직 작성되지 않은 경우(읽을 때 0이 제공됨) 쓰기 주기를 낭비하지 않고 데이터를 삭제해야 합니까? 또는 대상 데이터가 있는 경우 0이 생성되도록 블록을 잘라야 합니까?

오래된 스레드를 찾았습니다https://www.spinics.net/lists/raid/msg57529.html 하지만 답을 주지는 않습니다.

해결 방법을 시도했지만 상황이 좋지 않아 RAID를 오프라인으로 전환해야 한다고 생각합니다.

mdadm --fail /dev/md0 /dev/sde
mdadm -r /dev/md0 /dev/sde

(/dev/sde 교체)

mdadm -S /dev/md0
ddpt if=/dev/sdd of=/dev/sde verbose=1 oflag=sparing
mdadm -C -v /dev/md0 --assume-clean -l 1 -n 2 /dev/sdd /dev/sde

쓰기와 RAID1 재구축을 비교하는 것에 대해 어떻게 생각하시나요? 감사해요.

답변1

가장 간단한 대답은 '아니요'입니다.

md 드라이버는 성능에 맞게 조정되었습니다. 레이드 1 멤버의 동기화를 유지하기 위한 간단한 더티 맵이 있습니다.

그래서 한 멤버가 실패하면 맵 전체가 더러워집니다. md는 블록 기반이므로 블록의 내용에는 신경 쓰지 않고 블록을 복사하고 해당 블록의 더티 비트를 지웁니다.

KISS 원칙_간단하게 유지하세요. 다른 것들은 더 높은 수준에 있을 것입니다.

원하는 경우 md raid1 대신 두 명의 로컬 구성원과 함께 drbd를 사용할 수 있습니다. DRBD는 동기화 전 검증 방법을 제공합니다.

답변2

따라서 MDRAID1에서 비교 쓰기 재구축을 수행하는 유일한 방법(예: ddpt를 통한 오프라인 동기화 외에)은 수정하는 것 같습니다(디스크 교체 시 어레이를 중지하고 재구성해야 하며 양호한 디스크가 먼저 새 어레이에 들어가야 함). )가 ID 0 및 데이터 소스가 됨)

mdadm -C -v /dev/md0 -l 1 -n 2 /dev/sdd /dev/sde
mdadm /dev/md0 -f /dev/sdd -r /dev/sdd
mdadm -S /dev/md0
mdadm -C -v /dev/md0 -l 1 -n 2 --assume-clean /dev/sde /dev/sdd
echo repair > /sys/block/md0/md/sync_action

또한 여러 개의 미러에서도 작동하는 것 같습니다.

mdadm -C -v /dev/md0 -l 1 -n 3 /dev/sdd /dev/sde /dev/sdf
mdadm /dev/md0 -f /dev/sde -f /dev/sdf -r /dev/sde -r /dev/sdf
mdadm -S /dev/md0
mdadm -C -v /dev/md0 -l 1 -n 3 --assume-clean /dev/sdd /dev/sde /dev/sdf
echo repair > /sys/block/md0/md/sync_action

또한 중지하지 않고 어레이를 재구성하는 아이디어도 시도했지만(RAID0 -> RAID1_or_RAID10 -> RAID0) RAID10에서 비교 쓰기가 표시되지 않습니다(분명히 원래 Linux-raid 스레드당 RAID10의 경우). RAID0 -> RAID1 변환에서는 예상대로 작동하지 않습니다.

전체 사본이지만 유효함:

mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdd /dev/sde
mdadm -G /dev/md0 -n 4 -l 10 -a /dev/sdf -a /dev/sdg
mdadm /dev/md0 -f /dev/sdf -f /dev/sdg -r /dev/sdf -r /dev/sdg
mdadm -G /dev/md0 -n 2 -l 0

전체 사본(또한 유효함:

mdadm -C -v /dev/md0 -l 0 -n 3 /dev/sdd /dev/sde /dev/sdf
mdadm -G /dev/md0 -n 6 -l 10 -a /dev/sdg -a /dev/sdh -a /dev/sdi
mdadm /dev/md0 -f /dev/sdg -f /dev/sdh -f /dev/sdi -r /dev/sdg -r /dev/sdh -r /dev/sdi
mdadm -G /dev/md0 -n 3 -l 0

하지만 문제는 다음과 같습니다.

mdadm -C -v /dev/md0 -l 1 -n 2 /dev/sdd /dev/sde
mdadm /dev/md0 -f /dev/sde -r /dev/sde
mdadm -G /dev/md0 -n 1 -l 0

RAID1->RAID0 변환 시 디스크 수를 변경할 수 없습니다.

mdadm -G /dev/md0 -l 0

하지만 -n 1 없이는 작동합니다.

mdadm -G /dev/md0 -l 1 -n 2 --force -a /dev/sde

불가능한 레벨 변경을 요청했습니다

mdadm -C -v --force /dev/md0 -l 0 -n 1 /dev/sdd
mdadm -G /dev/md0 -l 1 -n 2 --force -a /dev/sde

불가능한 레벨 변경을 요청했습니다

관련 정보