웹사이트 검색

데이터를 복구하고 실패한 소프트웨어 RAID를 재구축하는 방법 - 8부


이 RAID 시리즈의 이전 기사에서는 0에서 RAID 영웅으로 이동했습니다. 우리는 여러 소프트웨어 RAID 구성을 검토하고 각 구성의 필수 사항과 특정 시나리오에 따라 둘 중 하나를 선택하는 이유를 설명했습니다.

이 가이드에서는 디스크 오류 발생 시 데이터 손실 없이 소프트웨어 RAID 어레이를 재구축하는 방법에 대해 설명합니다. 간략하게 설명하기 위해 RAID 1 설정만 고려하지만 개념과 명령은 모든 경우에 동일하게 적용됩니다.

RAID 테스트 시나리오

계속 진행하기 전에 이 시리즈의 3부: Linux에서 RAID 1(미러)을 설정하는 방법에 제공된 지침에 따라 RAID 1 어레이를 설정했는지 확인하세요.

현재 사례의 유일한 변형은 다음과 같습니다.

1) 해당 기사에 사용된 버전(v6.5)과 다른 CentOS 버전(v7)
2) /dev/sdb/dev/sdc의 디스크 크기가 다릅니다(각각 8GB).

또한 SELinux가 강제 모드에서 활성화된 경우 RAID 장치를 마운트할 디렉터리에 해당 레이블을 추가해야 합니다. 그렇지 않으면 마운트를 시도하는 동안 다음 경고 메시지가 표시됩니다.

다음을 실행하여 이 문제를 해결할 수 있습니다.


restorecon -R /mnt/raid1

RAID 모니터링 설정

저장 장치에 오류가 발생하는 데에는 여러 가지 이유가 있지만(SSD를 사용하면 오류 발생 가능성이 크게 줄었습니다), 원인에 관계없이 언제든지 문제가 발생할 수 있으며 오류가 발생한 장치를 교체할 준비가 되어 있어야 합니다. 귀하의 데이터 가용성과 무결성을 보장하기 위한 것입니다.

먼저 조언 한마디. RAID 상태를 확인하기 위해 /proc/mdstat를 검사할 수 있는 경우에도 모니터 + 스캔에서 mdadm을 실행하는 더 좋고 시간을 절약하는 방법이 있습니다. 모드는 미리 정의된 수신자에게 이메일을 통해 경고를 보냅니다.

이를 설정하려면 /etc/mdadm.conf에 다음 줄을 추가하세요.


MAILADDR user@<domain or localhost>

나의 경우에는:


MAILADDR gacanepa@localhost

모니터 + 스캔 모드에서 mdadm을 실행하려면 다음 crontab 항목을 루트로 추가하세요.


@reboot /sbin/mdadm --monitor --scan --oneshot

기본적으로 mdadm은 60초마다 RAID 배열을 확인하고 문제가 발견되면 경고를 보냅니다. 위의 crontab 항목에 초 단위와 함께 --delay 옵션을 추가하여 이 동작을 수정할 수 있습니다(예: --delay 1800은 30분을 의미함).

마지막으로 mutt 또는 mailx와 같은 메일 사용자 에이전트(MUA)가 설치되어 있는지 확인하세요. 그렇지 않으면 경고를 받을 수 없습니다.

잠시 후 mdadm이 보낸 경고가 어떤 모습인지 살펴보겠습니다.

실패한 RAID 저장 장치 시뮬레이션 및 교체

RAID 배열의 저장 장치 중 하나에 대한 문제를 시뮬레이션하기 위해 다음과 같이 --manage--set-faulty 옵션을 사용합니다.


mdadm --manage --set-faulty /dev/md0 /dev/sdc1  

그러면 /proc/mdstat에서 볼 수 있듯이 /dev/sdc1이 결함이 있는 것으로 표시됩니다.

더 중요한 것은 동일한 경고가 포함된 이메일 알림을 받았는지 살펴보겠습니다.

이 경우 소프트웨어 RAID 어레이에서 장치를 제거해야 합니다.


mdadm /dev/md0 --remove /dev/sdc1

그런 다음 머신에서 물리적으로 제거하고 예비 부품(fd 유형의 파티션이 이전에 생성된 /dev/sdd)으로 교체할 수 있습니다.


mdadm --manage /dev/md0 --add /dev/sdd1

다행스럽게도 시스템은 방금 추가한 부분으로 어레이를 자동으로 재구축하기 시작합니다. /dev/sdb1을 결함이 있는 것으로 표시하고 이를 배열에서 제거한 다음 tecmint.txt 파일이 /에서 여전히 액세스 가능한지 확인하여 이를 테스트할 수 있습니다. mnt/raid1:


mdadm --detail /dev/md0
mount | grep raid1
ls -l /mnt/raid1 | grep tecmint
cat /mnt/raid1/tecmint.txt

위 이미지는 /dev/sdc1을 대체하기 위해 어레이에 /dev/sdd1을 추가한 후 개입 없이 시스템에 의해 데이터 재구축이 자동으로 수행되었음을 명확하게 보여줍니다. 우리 쪽에서는.

꼭 필요한 것은 아니지만 결함이 있는 장치를 좋은 드라이브로 교체하는 과정을 신속하게 완료할 수 있도록 예비 장치를 준비해 두는 것이 좋습니다. 이를 위해 /dev/sdb1/dev/sdc1을 다시 추가해 보겠습니다.


mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdc1

중복 손실 복구

앞서 설명했듯이 mdadm은 디스크 하나에 장애가 발생하면 자동으로 데이터를 다시 빌드합니다. 하지만 어레이의 디스크 2개가 실패하면 어떻게 될까요? /dev/sdb1/dev/sdd1을 결함으로 표시하여 이러한 시나리오를 시뮬레이션해 보겠습니다.


umount /mnt/raid1
mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm --stop /dev/md0
mdadm --manage --set-faulty /dev/md0 /dev/sdd1

이때 생성된 것과 동일한 방식으로(또는 --assume-clean 옵션을 사용하여) 배열을 다시 생성하려고 하면 데이터 손실이 발생할 수 있으므로 최후의 수단으로 남겨 두어야 합니다.

예를 들어 /dev/sdb1의 데이터를 유사한 디스크 파티션(/dev/sde1)으로 복구해 보겠습니다. 이를 위해서는 다음과 같은 파티션을 만들어야 합니다. 계속하기 전에 /dev/sdefd를 입력하고 ddrescue를 사용하세요.


ddrescue -r 2 /dev/sdb1 /dev/sde1

지금까지는 RAID 배열의 일부였던 파티션인 /dev/sdb 또는 /dev/sdd를 건드리지 않았습니다.

이제 /dev/sde1/dev/sdf1을 사용하여 배열을 다시 빌드해 보겠습니다.


mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1

실제 상황에서는 일반적으로 원래 배열과 동일한 장치 이름, 즉 /dev/sdb1/dev/sdc1을 뒤에 사용하게 됩니다. 실패한 디스크는 새 디스크로 교체되었습니다.

이 기사에서는 새로운 디스크로 어레이를 다시 생성하고 원래 고장난 드라이브와의 혼동을 피하기 위해 추가 장치를 사용하기로 선택했습니다.

배열 쓰기를 계속할지 묻는 메시지가 나타나면 Y를 입력하고 Enter를 누릅니다. 어레이가 시작되어야 하며 다음을 통해 진행 상황을 볼 수 있어야 합니다.


watch -n 1 cat /proc/mdstat

프로세스가 완료되면 RAID 콘텐츠에 액세스할 수 있습니다.

요약

이 문서에서는 RAID 오류 및 중복성 손실을 복구하는 방법을 검토했습니다. 그러나 이 기술은 스토리지 솔루션이며 백업을 대체하지 않습니다.

이 가이드에 설명된 원칙은 모든 RAID 설정에 동일하게 적용되며, 이 시리즈의 다음 가이드와 마지막 가이드(RAID 관리)에서 다룰 개념에도 적용됩니다.

이 기사에 대해 질문이 있는 경우 아래 의견 양식을 사용하여 언제든지 메모를 남겨주세요. 여러분의 의견을 기다리겠습니다!