Software RAID

LinuxでSoftware RAIDを利用する為の設定です。 Softwareだから信頼性が心配だとか言われますが、 暴走/ハングするようなマシンを使うからいけないのであって、安定しているマシンなら何の問題もありません。 (ハングさせても壊れたことありませんけどね)

ただしHotSwapにはやはり不安がありますし、CPUパワーの消費やSCSIバスの帯域飽和等がありますので、性能面ではRAID Controllerに遠く及びません。 また、OSの制限でSCSI HDDが16台までとなっていますからHDDを20台、30台と繋ぎたい場合はRAID Controllerか外付のRAID BOXを利用すべきです。

私は数十台のHDDをバラで使うのが面倒なので公私共に積極的に活用していますが、 ftp serverや作業領域として利用した方が安全でしょう。


kernel構築

  1. Patch&Toolの取得
    RAIDを利用する為にはkernel sourceにパッチをあてる必要が有るので、 ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/alpha またはミラーサイトから使用するカーネルに有ったものをdownloadします。 kernel 2.2.6用のパッチはraid0145-19990421-2.2.6.bz2、ツールはraidtools-19990421-0.90.tar.bz2です。
  2. raidtoolのコンパイル
    	./configure ; make ; make install
    
  3. パッチあて
    	cd /usr/src/
    	bzip2 -d -c hogehoge/raid0145-19990421-2.2.6.bz2 | patch -p
    
  4. kernel configuration
    "Block devices"の設定で以下の項目を設定します。 カーネルに組み込みたいので、moduleにはしていません。 Linear, RAID 0,1は不要なのでNoにしています。
    [*] Multiple devices driver support
    [*] Autodetect RAID partitions
    < >    Linear (append) mode
    < >    RAID-0 (striping) mode
    < >    RAID-1 (mirroring) mode
    <*>    RAID-4/RAID-5 mode
    <*>    Translucent mode
    
  5. kernelをインストール
    make bzImage ; make installすれば完了です。 安全の為 make bzdisk して動作確認を取った方が良いでしょう。

導入

  1. 構成を決める
    HDDの台数、スペアディスクの数、パーティションの切り方等を決めます。 ここでは/dev/sdc〜/dev/sdkまでの9台を使用し、スペア1台、パーティションは1に統一、RAID Levelは5、RAID Device は/dev/md0とします。
  2. 定義ファイルの作成
    /etc/raidtab が定義ファイルなので、これを編集します。
    # sample raiddev configuration file
    
    raiddev /dev/md0
        raid-level                5
        nr-raid-disks             8
        nr-spare-disks            1
        chunk-size                128k
    
        device                    /dev/sdc1
        raid-disk                 0
        device                    /dev/sdd1
        raid-disk                 1
        device                    /dev/sde1
        raid-disk                 2
        device                    /dev/sdf1
        raid-disk                 3
        device                    /dev/sdg1
        raid-disk                 4
        device                    /dev/sdh1
        raid-disk                 5
        device                    /dev/sdi1
        raid-disk                 6
        device                    /dev/sdj1
        raid-disk                 7
    
        device                    /dev/sdk1
        spare-disk                 0
    
    #raiddev /dev/md1
    #    raid-level                5
    #    nr-raid-disks             3
    #    nr-spare-disks            0
    #
    #    device                    /dev/sda1
    #    raid-disk                 0
    #    device                    /dev/sdb1
    #    raid-disk                 1
    #    device                    /dev/md0
    #    raid-disk                 2
    
  3. Patritionの作成
    RAIDに使用するHDDにPartitionを作成します。 fdiskで普通のLinux Partition(ID 0x83)として作ります。 サイズは同じにした方が良いでしょう。
  4. RAIDの開始
    デーモン君を動かします。
    	raidstart -a
    
  5. RAID領域の作成
    やっとRAID領域の作成です。
    	mkraid -c /etc/raidtab /dev/md0
    
    これが成功するとRAID Deivceの再構築が開始しますので、29GBの領域を構築するのに1.5時間とかかかります。 RAIDの動作状態は
    	cat /proc/mdstat
    
    とやれば確認できます。
  6. RAID領域の初期化
    このままではfilesystemとして使えないので、mke2fsでext2fsを作成します。 再構築中だととても時間がかかりますから再構築後に行った方がいいです。
    	mke2fs /dev/md0
    
  7. mountして読み書きを行い、動作を確認する。
  8. RAIDをいったん停止
    これで動作確認は完了です。後はシステム起動/終了時に適切な処理を行うように設定するだけです。
    	umount /dev/md0
    	raidstop /dev/md0
    
  9. /etc/rc.d/rc.S
    起動時にRAIDが動作するようにするため、/etc/rc.d/rc.Sの/sbin/fsck動作直前に次の記述を追加します。
    	# Starting RAID Devices
    	if [ -x /sbin/mdadd ]; then
    	  echo "Starting RAID Devices"
    	  raidstart -a
    	fi
    
  10. /etc/rc.d/rc.0
    システム停止時にRAIDを停止させるため、、/etc/rc.d/rc.0のumount後、syncの前に次の記述を追加します。
    	# stop raid daemons
    	raidstop /dev/md*
    
  11. /etc/fstab に/dev/md0を追加
    とくにRAIDかどうかの区別は有りませんが、起動時に/dev/md0が無いと当然文句を言われます。
    	/dev/md0       /a/tulip-1/home/share        ext2        defaults   1   1
    
  12. 再起動すれば次回から自動的にRAID Partitionがmountされます。

ディスク交換

  1. 壊れたHDDを切り離す (例 /dev/sdf1)
    	raidhotremove /dev/md0 /dev/sdf1
    
  2. 壊れたHDDを交換する。
    HotSwapできない時はシステムを停止して交換する。 この場合、新しく取り付けたHDDにPartitionが存在してはいけません。 RAID以外のPartitionが有ると安全の為にデーモンが動作しないようになっています。
  3. fdisk で /dev/sdf1 を作る
  4. HDDを追加
    	raidhotadd /dev/md0 /dev/sdf1
    
  5. 再構築が始まる。

戻る