How to recover multiple disk failure..

음 얼마전에 mdraid 로 만들어놓은 nas 하나가 말썽을 일으켜서, 복구 하는 과정을 정리 해볼까 합니다. Disk 4장으로 RAID5 걸어서 사용하고 있었는데, 이경우에 Disk 1개 까지만 장애가 있어도 Volume 이 Offline 되지는 않습니다. 그러나, 여기서 두개가 Offline 된다면 데이터는 유실 되겠죠, 이경우에 실제 물리적인 디스크가 동시에 두개가 나갔다면,  백업해놓은 데이터를 복구 하는것이 빠를거구요, 디스크 장애가 아니라 아래와 같은 경우로 단순히 offline 된것이라면 데이터를 살릴수 있을것입니다.

messages-20150427:Apr 27 01:11:35 nas kernel: md: md0 still in use.
messages-20150427:Apr 27 01:11:35 nas kernel: md/raid:md0: Disk failure on sdd, disabling device.
messages-20150427:md/raid:md0: Operation continuing on 3 devices.
messages-20150427:Apr 27 01:11:50 nas kernel: md/raid:md0: Disk failure on sde, disabling device.
messages-20150427:md/raid:md0: Operation continuing on 2 devices.
messages-20150427:Apr 27 01:11:50 nas kernel: md: md0 still in use.
messages-20150503:Apr 27 10:19:50 nas kernel: XFS (md0): metadata I/O error: block 0x1dbf0 ("xfs_trans_read_buf_map") error 5 numblks 8
messages-20150503:Apr 27 10:19:50 nas kernel: XFS (md0): page discard on page ffffea00009e78c0, inode 0x1683e, offset 0.
messages-20150503:Apr 27 10:19:55 nas kernel: XFS (md0): metadata I/O error: block 0x1dbf0 ("xfs_trans_read_buf_map") error 5 numblks 8
messages-20150503:Apr 27 10:19:55 nas kernel: XFS (md0): page discard on page ffffea0000830c00, inode 0x1683e, offset 4096.
messages-20150503:Apr 27 10:20:00 nas kernel: Buffer I/O error on device md0, logical block 7040
messages-20150503:Apr 27 10:20:00 nas kernel: lost page write due to I/O error on md0

위의 커널 로그를 보면, /dev/sdd , /dev/sde 가 약간의 시간차를 두고 거의 동시에 빠진것을 볼수 있는데요, cable이나 backplane 에 문제로 인해서 disk를 엑세스 못하는경우, 이에 해당할것입니다. 적어도 Disk가 나간것이 아니니 데이터를 복구 할수 있다는 희망이 어느정도는 보이는거죠..

Date: Mon, 27 Apr 2015 01:11:51 +0900 (KST)
From: mdadm monitoring <root@nas.localdomain>
To: root@localhost.localdomain
Subject: Fail event on /dev/md/0:nas

This is an automatically generated mail message from mdadm
running on nas

A Fail event had been detected on md device /dev/md/0.

It could be related to component device /dev/sde.

Faithfully yours, etc.

P.S. The /proc/mdstat file currently contains the following:

Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc[1] sda[0]
      2929893888 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/2] [UU__]

unused devices: 

/proc/mdstat을 보면 두개의 disk가 빠져서 offline 된상태를 볼수가 있죠… lsscsi 로 디스크가 다시 정상적으로 붙은것을 확인하면…

# mdadm --assemble --force

위의 명령어로 다시 붙일수 있는데, 이렇게 해서 online 이 되지 않는다면, 아래와 같이 하면 올라옵니다..단순히 raid 구성에 대한 메타 영역만 새로 만들어 주면, 그위에 올라가 있던 파일시스템만 체크해서 문제 없으면 그대로 사용할수가 있는데, 만약 이것의 영향으로 super block 까지 맛이 갔다고 하면, 이경우에는 worst case 가 되겠네요, 복구가 어려울수도 있구요..

# mdadm --stop /dev/md0
# mdadm --assemble --force /dev/md0 /dev/sd[abdefghij]1
# mdadm --assemble --run --force /dev/md0 /dev/sd[abdefghij]1
# mdadm --create --assume-clean /dev/md0 /dev/sd[abcdefg]1

순차적으로 진행하면서, 중간에 온라인이 되면 사용하면 되구요, 잘 안되면 마지막에 있는 명령어로 raid 구성 다시 만들어 주어야 합니다. 이경우 다행히 mdadm 이 기존의 데이터는 건들지 않고, raid 만 재구성을 해주도록 되어 있네요, 이렇게 해서 data 를 살릴수가 있습니다.

Reference:

  • https://raid.wiki.kernel.org/index.php/Reconstruction
  • http://zackreed.me/articles/50-recovery-from-a-multiple-disk-failure-with-mdadm

How to recover multiple disk failure..”에 대한 2개의 생각

  1. 김동식

    성공했어요.
    다행히 디스크 불량이 없었습니다.

    mdadm –examine /dev/sd[c-q]
    mdadm –examine /dev/sd[c-q] |grep State

    디스크 모두 clean 이라

    무사히 마쳤습니다.

    응답

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다