Linuxdoc Sgml/Software-RAID5-Failure-Test
<!doctype linuxdoc system>
<ARTICLE>
<TITLE>Software RAID5 Failure Test
<AUTHOR>한승수, <tt>Seungsu Han</tt>
<htmlurl url="mailto:netkevin_at_hanmail.net" name="netkevin_AT_hanmail.net">
<DATE>v1.1, 2004-12-30
<ABSTRACT>Software RAID5에서 고의로 구성 디스크를 고장내고 복구하는 과정을 담은 문서입니다.</ABSTRACT>
<TOC>
<SECT>서문
<P>
이 문서는 네 개의 SCSI디스크로 구성된 Software RAID5 장치에서 고의로 디스크 장애를 발생시키고 On-line상태에서 HotSwap하는 작업에 대해 설명합니다.
<P>
Software RAID의 설정 및 사용에 관한 내용은 <htmlurl
url="http://wiki.kldp.org/wiki.php/LinuxdocSgml/Software-RAID%5FHOWTO" name="Software RAID HOWTO">를 참고하시기 바랍니다.
<SECT1>문서의 원본
<P>
이 문서의 원본이나 최신판은 <htmlurl url="http://computer.snut.ac.kr/~netkevin/files/raid/" name="여기">에서 구할 수 있습니다.
<SECT1>책임의 한계
<P>
본 문서의 내용으로 인해 일어날 수 있는 어떠한 일에 대해서도 저자 및 해당 소프트웨어 개발자는 책임을 지지 않습니다.
<P>
본 문서의 내용을 실행하기 전에 귀하의 데이터를 백업하실것을 권장합니다.
<SECT>실험에 사용될 RAID시스템
<SECT1>시스템에 인식된 RAID의 모습
<SECT2>dmesg중 RAID관련 부분입니다.
<P>
<TSCREEN><VERB>
md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
md: raidstart(pid 493) used deprecated START_ARRAY ioctl. This will not be supported beyond 2.6
md: autorun ...
md: considering sde ...
md: adding sde ...
md: adding sdd ...
md: adding sdc ...
md: adding sdb ...
md: created md0
md: bind<sdb>
md: bind<sdc>
md: bind<sdd>
md: bind<sde>
md: running: <sde><sdd><sdc><sdb>
raid5: automatically using best checksumming function: pIII_sse
pIII_sse : 2044.000 MB/sec
raid5: using function: pIII_sse (2044.000 MB/sec)
md: raid5 personality registered as nr 4
raid5: device sdd operational as raid disk 2
raid5: device sdc operational as raid disk 1
raid5: device sdb operational as raid disk 0
raid5: allocated 3161kB for md0
raid5: raid level 5 set md0 active with 3 out of 3 devices, algorithm 2
RAID5 conf printout:
--- rd:3 wd:3 fd:0
disk 0, o:1, dev:sdb
disk 1, o:1, dev:sdc
disk 2, o:1, dev:sdd
md: ... autorun DONE.
</VERB></TSCREEN>
<SECT1>/etc/raidtab 의 구성내용
<P>
<BF>RAID 장치의 설정 내용을 담고 있는 /etc/raidtab 파일의 내용입니다.</BF>
<P>
<BF>/dev/sde가 spare-disk로 설정되어 있기때문에 장애가 발생하면 즉시 문제의 디스크를 대체하게 됩니다.</BF>
<P>
<TSCREEN><VERB>
[root@csdove /]# more /etc/raidtab
raiddev /dev/md0
raid-level 5
nr-raid-disks 3
nr-spare-disks 1
parity-algorithm left-symmetric
persistent-superblock 1
chunk-size 128
device /dev/sdb
raid-disk 0
device /dev/sdc
raid-disk 1
device /dev/sdd
raid-disk 2
device /dev/sde
spare-disk 0
</VERB></TSCREEN>
<SECT1>/proc/mdstat의 내용
<P>
<BF>정상 작동중인 array의 /proc/mdstat의 내용입니다.</BF>
<TSCREEN><VERB>
[root@csdove /]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sde[3] sdd[2] sdc[1] sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
</VERB></TSCREEN>
<SECT>디스크의 장애 발생과 복구 과정
<P>
<SECT1>디스크의 장애 발생
<P>
<BF>array의 구성 디스크중 하나(sdc)를 갑자기 탈착했습니다.</BF>
<P>
<BF>잠깐의 시간이 흐른뒤 시스템은 장치의 이상을 감지하고 에러메세지를 출력합니다.</BF>
<TSCREEN><VERB>
SCSI error : <0 0 4 0> return code = 0x10000
end_request: I/O error, dev sdc, sector 71687168
md: write_disk_sb failed for device sdc
SCSI error : <0 0 4 0> return code = 0x10000
md: write_disk_sb failed for device sdc
end_request: I/O error, dev sdc, sector 71687168
SCSI error : <0 0 4 0> return code = 0x10000
end_request: I/O error, dev sdc, sector 71687168
md: write_disk_sb failed for device sdc
SCSI error : <0 0 4 0> return code = 0x10000
end_request: I/O error, dev sdc, sector 71687168
md: write_disk_sb failed for device sdc
SCSI error : <0 0 4 0> return code = 0x10000
end_request: I/O error, dev sdc, sector 71687168
md: write_disk_sb failed for device sdc
</VERB></TSCREEN>
<SECT1>장애의 감지와 복구
<P>
<BF>RAID에서도 이상을 감지합니다.</BF>
<P>
<TSCREEN><VERB>
RAID5 conf printout:
--- rd:3 wd:2 fd:1
disk 0, o:1, dev:sdb
disk 1, o:0, dev:sdc
disk 2, o:1, dev:sdd
RAID5 conf printout:
--- rd:3 wd:2 fd:1
disk 0, o:1, dev:sdb
disk 2, o:1, dev:sdd
</VERB></TSCREEN>
<BF>예비 디스크로 설정해 두었던 sde가 자동으로 sdb를 대체한뒤 reconstruction을 시작합니다.</BF>
<P>
<BF>RAID5에서는 당연한 이야기지만 디스크 장애를 감지하고 자동 복구가 수행되는 동안에도
array의 데이터는 아무런 이상없이 액세스가 가능합니다.</BF>
<TSCREEN><VERB>
RAID5 conf printout:
--- rd:3 wd:2 fd:1
disk 0, o:1, dev:sdb
disk 1, o:1, dev:sde
disk 2, o:1, dev:sdd
md: syncing RAID array md0
md: minimum _guaranteed_ reconstruction speed: 1000 KB/sec/disc.
md: using maximum available idle IO bandwith (but not more than 200000 KB/sec) for reconstruction.
md: using 128k window, over a total of 35843584 blocks.
</VERB></TSCREEN>
<SECT1>장애 디스크의 제거
<P>
<BF>raidhotremove 명령으로 고장난 장치를 array에서 제거합니다.</BF>
<P>
<BF>이 작업은 복구가 수행되는 중에도 할 수 있습니다.</BF>
<TSCREEN><VERB>
[root@csdove ~]# raidhotremove /dev/md0 /dev/sdc
md: trying to remove unknown-block(8,32) from md0 ...
md: unbind<sdc>
md: export_rdev(sdc)
</VERB></TSCREEN>
<BF>위 명령 수행후의 /proc/mdstat 의 내용입니다.</BF>
<TSCREEN><VERB>
[root@csdove ~]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sde[1] sdd[2] sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
</VERB></TSCREEN>
<SECT1>새 디스크의 장착
<P>
<BF>고장난 디스크를 교체하여 시스템에 부착하면 시스템이 이를 감지하고 메세지를 출력합니다.</BF>
<TSCREEN><VERB>
scsi0: Someone reset channel A
scsi0: Someone reset channel A
scsi0: Someone reset channel A
scsi0: Someone reset channel A
scsi0: Someone reset channel A
</VERB></TSCREEN>
<BF>raidhotadd 명령으로 새장치를 array에 추가합니다.</BF>
<TSCREEN><VERB>
[root@csdove ~]# raidhotadd /dev/md0 /dev/sdc
md: trying to hot-add unknown-block(8,32) to md0 ...
md: bind<sdc>
RAID5 conf printout:
--- rd:3 wd:3 fd:0
disk 0, o:1, dev:sdb
disk 1, o:1, dev:sde
disk 2, o:1, dev:sdd
</VERB></TSCREEN>
<SECT1>복구 과정중의 /proc/mdstat 내용
<P>
<BF>장애가 발생한 디스크 sdc가 (F) - Fail 로 표시되어 있는 것을 확인할 수 있으며</BF>
<BF>복구의 진행상황도 알아볼 수 있습니다.</BF>
<TSCREEN><VERB>
[root@csdove ~]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sde[3] sdd[2] sdc[4](F) sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/2] [U_U]
[========>............] recovery = 44.8% (16076544/35843584) finish=14.2m
in speed=23114K/sec
unused devices: <none>
[root@csdove ~]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sde[3] sdd[2] sdc[4](F) sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/2] [U_U]
[============>........] recovery = 60.3% (21639168/35843584) finish=10.0m
in speed=23552K/sec
unused devices: <none>
[root@csdove ~]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sde[3] sdd[2] sdc[4](F) sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/2] [U_U]
[===================>.] recovery = 99.9% (35824896/35843584) finish=0.0mi
n speed=23019K/sec
unused devices: <none>
</VERB></TSCREEN>
<SECT1>복구 완료
<P>
<BF>복구가 완료된 RAID장치의 상태를 확인합니다.</BF>
<P>
<BF>RAID를 구성하는 디스크의 순서가 바뀌었음을 알 수 있습니다.</BF>
<TSCREEN><VERB>
[root@csdove ~]# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdc[3] sde[1] sdd[2] sdb[0]
71687168 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
</VERB></TSCREEN>
<SECT>감사의 글
<P>
<BF>이 문서를 만드는데 도움을 주신 분들입니다.</BF>
<ITEMIZE>
<ITEM>김종복 조교님 - RAID를 사용할 수 있는 IBM x240 시스템을 제공하여 주셨습니다.
<ITEM>Mycluster님 - 본 테스트를 하게끔 영감을 주셨습니다. ;-)
</ITEMIZE>
<P>
이 문서에 대한 개선사항이나 문의점을 저자에게 보내주시기 바랍니다.
</ARTICLE>
|
You love your home and want it to be beautiful. |











