忍者ブログ
♥ Admin ♥ Write ♥ Res ♥ 
底辺でもがくITエンジニア
[11]  [10]  [9]  [8]  [7]  [6]  [5]  [4]  [3]  [2]  [1
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

個人利用であっても商用管理であってもサーバを維持するということはその役割はデジタルライフを快適なものにするために重要な位置づけにあることでしょう。
商用管理の場合知識あるエンジニアたちが集まってさまざまな対策を行うので管理において非常に強固な環境を構築できます。
では個人利用でその大切なデータを保護するためにもっとも有効な手段とは何か。
セキュリティの話を除けばデータの保護でもっとも現実性が高く、容易な管理が行えるのはやはりRAIDではないでしょうか。
今回はRAIDの構築の備忘録です。

さて、一言でRAIDといってもいくつか種類がありますが、個人なら以下の3点が主流じゃないでしょうか。
RAID-0(ストライピング)
RAID-1(ミラーリング)
RAID-5(分散パリティ)

今回はデータ保護、の観点で見たいと思いますのでRAID-1かRAID-5を組みます。

RAIDの構築タイミング
データの完全性を考えた場合、初回のRAIDの構築タイミングはインストール時に構築してしまうのが良いでしょう。
初回で構築してしまうことのメリットはなんと言っても容易であること。
ひとつのディスクでレイアウトを構築してしまえば2台目以降はディスクレイアウトをコピーできるので非常に楽です。
もちろんGUIインストールだった場合ですが。
RAIDを構築する場合パーティションをRAID領域用にフォーマットします。
このRAID領域に2台以上参加させて、ひとつのパーティションを作成したらさらにEXT3などのフォーマットが必要になります。
これらの手間とフォーマット類を扱うリスクを考えるとインストール時の構築が良いと思われます。
まして/bootや/パーティションを後からRAID化するのはリスクの塊です。
ですのでRAID構築を考えたらインストール時に行う事を検討に入れてみてください。
もちろん一部のパーティションのみをRAID化するというのであればまったく問題ありません。

RAIDの確認
インストール時にRAID構築を行ってしまった場合インストール後の起動に問題がなければRAIDはほぼ問題なく稼動していると思います。
稼動状況は/proc配下で監視されます。

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid1 sdc1[2] sdb1[1] sda1[0]
      256896 blocks [3/3] [UUU]

上記はRAID-5を構成した場合です(一部略)。
Personalities でRAID構成がいくつあるのかわかります。
md0 は/dev/md0のことであり、パーティションの集まりです。
どこのパーティションが集まっているのかがsdc1[2] sdb1[1] sda1[0]でわかります。
3行目の[UUU]で稼動状況がわかります。
この[UUU]が[UU_]になるとRAID-IDの2番目、すなわちsdc1[2]が稼動していない状況になります。
監視スクリプトを作成する場合この部分をgrepするのが効果的と思われます。

RAIDの復旧
どんなに強固なシステムを構築してもやがて障害に見舞われます。
これは商用でも個人でもリスクは変わりません。
問題は障害にあったときにいかに復旧する手段があるか、これが強固といえるのではないでしょうか。
と、いうことで実際にディスクが障害に出会ってしまったときの復旧手順です。
RAID-5で解説しますが、RAID-1でも同じだと思います。

現状のディスクの確認
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      256896 blocks [3/2] [UU_]

[UU_]になっており、3台構成のはずが稼動中(active )のパーティションが2つしかありません。
RAID-1の3台構成ならばまだ余裕がありますが、RAID-5の3台構成では後1台に障害が起きた場合対応できません。
復旧できる段階でシャットダウンを試みます。
その後新しいディスクと障害対象ディスクを交換し、起動します。
起動が出来たらRAIDを復旧させるため新しいディスク(今回は/dev/sdc)にパーティションの作成を行います。

作成するパーティションは現状のRAID構成と同じにしなければならないので生き残っているディスクのパーティションを確認します。
---------------------------------------------------------------------------------------
# fdisk /dev/sda

このディスクのシリンダ数は 3002 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

Disk /dev/sda: 24.6 GB, 24696061952 bytes
255 heads, 63 sectors/track, 3002 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      257008+  fd  Linux raid 自動検出
/dev/sda2              33        1307    10241437+  fd  Linux raid 自動検出
/dev/sda3            1308        1434     1020127+  fd  Linux raid 自動検出
/dev/sda4            1435        3002    12594960    5  拡張領域
/dev/sda5            1435        3002    12594928+  fd  Linux raid 自動検出

---------------------------------------------------------------------------------------

これで/dev/sdcにも同じ構成が出来ます。
まずはパーティションサイズを作成します。
/dev/sda1が、、、

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      257008+  fd  Linux raid 自動検出

でしたので同じように/dev/sdc1を作成します。
---------------------------------------------------------------------------------------
# fdisk /dev/sdc

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-3002, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-3002, default 3002): 32
---------------------------------------------------------------------------------------

次に作成したパーティションをRAID領域用にフォーマットします。
16進コードは/dev/sdaを確認したときに

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          32      257008+  fd  Linux raid 自動検出

出ていたIdを参照すると楽です。

---------------------------------------------------------------------------------------
コマンド (m でヘルプ): t
領域番号 (1-5): 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました
---------------------------------------------------------------------------------------

すべて作成し終えたら、コミットします。

---------------------------------------------------------------------------------------
コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
---------------------------------------------------------------------------------------

4番目のパーティションは拡張領域としてフォーマットしてから5番目以降のパーティションを作ることに気をつけてください。

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda4            1435        3002    12594960    5  拡張領域

これで準備は整いました。
後は現状のRAIDに作成した/dev/sdcのパーティションを追加してあげるだけです。

---------------------------------------------------------------------------------------
# mdadm /dev/md0 -a /dev/sdc1
mdadm: added /dev/sdc1
# mdadm /dev/md1 -a /dev/sdc5
mdadm: added /dev/sdc5
# mdadm /dev/md2 -a /dev/sdc2
mdadm: added /dev/sdc2
# mdadm /dev/md3 -a /dev/sdc3
mdadm: added /dev/sdc3
---------------------------------------------------------------------------------------

多くのRAID構築サイトを参考にするとraidhotaddコマンドを使いますが、CentOS5.2ではコマンドがないためmdadmコマンドを使います。

コマンドを投入した時点でディスクの同期(復旧)が始まります。
状況は/proc/mdstatで確認できます。

---------------------------------------------------------------------------------------
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [raid1]
md0 : active raid1 sdc1[2] sdb1[1] sda1[0]
      256896 blocks [3/3] [UUU]

md3 : active raid5 sdc3[2] sdb3[1] sda3[0]
      2039808 blocks level 5, 256k chunk, algorithm 2 [3/3] [UUU]

md1 : active raid5 sdc5[2] sdb5[1] sda5[0]
      25189376 blocks level 5, 256k chunk, algorithm 2 [3/3] [UUU]

md2 : active raid5 sdc2[3] sdb2[1] sda2[0]
      20482560 blocks level 5, 256k chunk, algorithm 2 [3/2] [UU_]
      [==================>..]  recovery = 93.9% (9625028/10241280) finish=1.0min speed=9478K/sec
---------------------------------------------------------------------------------------

復旧状況がグラフとパーセンテージでわかるようになっています。
また復旧が終わったものは何事もなかったかのように表示されます。


後書き
今回はソフトウェアRAIDの場合を書きました。
ハードウェアRAIDはRAIDカード等のメーカによると思います。
また、復旧時や管理がしやすいようにRAIDに含むパーティション番号はすべて統一(/dev/sda1,/dev/adb1/,/dev/sdc1)しています。
違っても動きますが、少なくとも同じRAID領域に含まれるパーティションの開始と終了シリンダはあわせたほうが良いでしょう。

構成をシュミレートしておけばあわてずにすみますし、ヒアドキュメントを用いればスクリプト化も可能だと思います。
スクリプト化しておけば障害時にディスクを交換し、シェル一発で復旧なんてことも可能でしょう。
これは追々実験します。
でも壊れないことが一番ですね^^
PR
この記事にコメントする
Name
Title
Color
Mail
URL
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (管理人しか読むことができません)
この記事へのトラックバック
この記事にトラックバックする:
♥ カレンダー ♥
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
♥ カウンター ♥
♥ バーコード ♥
Copyright(c) アナログを愛するデジタル生活室(別館) All Rights Reserved.
* material by Pearl Box   * Template by tsukika

忍者ブログ [PR]