· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Software-RAID5-Failure-Test

Software RAID5 Failure Test

Software RAID5 Failure Test

한승수, Seungsu Han netkevin_AT_hanmail.net

v1.1, 2004-12-30
Software RAID5에서 고의로 구성 디스크를 고장내고 복구하는 과정을 담은 문서입니다.

1. 서문

이 문서는 네 개의 SCSI디스크로 구성된 Software RAID5 장치에서 고의로 디스크 장애를 발생시키고 On-line상태에서 HotSwap하는 작업에 대해 설명합니다.

Software RAID의 설정 및 사용에 관한 내용은 Software RAID HOWTO를 참고하시기 바랍니다.

1.1 문서의 원본

이 문서의 원본이나 최신판은 여기에서 구할 수 있습니다.

1.2 책임의 한계

본 문서의 내용으로 인해 일어날 수 있는 어떠한 일에 대해서도 저자 및 해당 소프트웨어 개발자는 책임을 지지 않습니다.

본 문서의 내용을 실행하기 전에 귀하의 데이터를 백업하실것을 권장합니다.

2. 실험에 사용될 RAID시스템

2.1 시스템에 인식된 RAID의 모습

dmesg중 RAID관련 부분입니다.

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.

2.2 /etc/raidtab 의 구성내용

RAID 장치의 설정 내용을 담고 있는 /etc/raidtab 파일의 내용입니다.

/dev/sde가 spare-disk로 설정되어 있기때문에 장애가 발생하면 즉시 문제의 디스크를 대체하게 됩니다.

[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

2.3 /proc/mdstat의 내용

정상 작동중인 array의 /proc/mdstat의 내용입니다.

[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>

3. 디스크의 장애 발생과 복구 과정

3.1 디스크의 장애 발생

array의 구성 디스크중 하나(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                                 
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                                      

3.2 장애의 감지와 복구

RAID에서도 이상을 감지합니다.

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                                                        
예비 디스크로 설정해 두었던 sde가 자동으로 sdb를 대체한뒤 reconstruction을 시작합니다.

RAID5에서는 당연한 이야기지만 디스크 장애를 감지하고 자동 복구가 수행되는 동안에도 array의 데이터는 아무런 이상없이 액세스가 가능합니다.

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.

3.3 장애 디스크의 제거

raidhotremove 명령으로 고장난 장치를 array에서 제거합니다.

이 작업은 복구가 수행되는 중에도 할 수 있습니다.

[root@csdove ~]# raidhotremove /dev/md0 /dev/sdc
md: trying to remove unknown-block(8,32) from md0 ...                        
md: unbind<sdc>                                                              
md: export_rdev(sdc)  

위 명령 수행후의 /proc/mdstat 의 내용입니다.

[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>

3.4 새 디스크의 장착

고장난 디스크를 교체하여 시스템에 부착하면 시스템이 이를 감지하고 메세지를 출력합니다.

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

raidhotadd 명령으로 새장치를 array에 추가합니다.

[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                                                        

3.5 복구 과정중의 /proc/mdstat 내용

장애가 발생한 디스크 sdc가 (F) - Fail 로 표시되어 있는 것을 확인할 수 있으며 복구의 진행상황도 알아볼 수 있습니다.

[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>

3.6 복구 완료

복구가 완료된 RAID장치의 상태를 확인합니다.

RAID를 구성하는 디스크의 순서가 바뀌었음을 알 수 있습니다.

[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>

4. 감사의 글

이 문서를 만드는데 도움을 주신 분들입니다.

  • 김종복 조교님 - RAID를 사용할 수 있는 IBM x240 시스템을 제공하여 주셨습니다.
  • Mycluster님 - 본 테스트를 하게끔 영감을 주셨습니다. ;-)

이 문서에 대한 개선사항이나 문의점을 저자에게 보내주시기 바랍니다.


ID
Password
Join
Mind your own business, Spock. I'm sick of your halfbreed interference.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-07-15 00:00:18
Processing time 0.0048 sec