2004年12月05日

FreeBSD gvinum でソフトウェア RAID-5 の構築してみちゃいました。

みたいな。

要件:
ただソフトウェア RAID がやってみたい。それだけ。 root までやるつもりはなく、データ領域だけ redundant であればよい。
どうせやるなら RAID-5 がかっくいい。それっぽく動けばよいのだ。
そして相変わらずバックアップなどしないのであった。
  ※これのどこらへんが要件なのか。

ハードウェア的には
資源を有効利用するの〜 ソフトウェア RAID 構築の下準備
きょーも RAID の道はまったりと。デバイス認識まで。
にてすでに待ち状態。え〜加減はじめますかぁ。

で、とても長くなったので追記行き。

まずは fdisk でパーティションを切るです。といっても全ディスクは FreeBSD スライスとしていただいちゃいます。

# fdisk -BI da2
******* Working on device /dev/da2 *******
# fdisk -BI da3
******* Working on device /dev/da3 *******
# fdisk -BI da4
******* Working on device /dev/da4 *******
全ての HDD にデフォルトな BSD ラベルを書いて、
# bsdlabel -w da2s1
# bsdlabel -w da3s1
# bsdlabel -w da4s1
BSD ラベルを編集します。
# bsdlabel -e da2s1
エディタが起動しまふ。
a パーティションの fstype を unused から vinum に変更しませう。
# /dev/da2s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a: 17767811       16    unused        0     0
  c: 17767827        0    unused        0     0         # "raw" part, don't edit
    ↑これを、こう↓
# /dev/da2s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a: 17767811       16    vinum         0     0
  c: 17767827        0    unused        0     0         # "raw" part, don't edit
  ※ fstype は gvinum って書くと "Warning, unknown file system type gvinum" って怒られます。
    コマンド名は vinum から変わったくせに。なんや、中途半端やなぁ。

でもって、この BSD ラベルをファイル化してほかの HDD にも同様に BSD ラベルを反映させます。
# bsdlabel da2s1 > bsdlabel.da2s1
# bsdlabel -R da3s1 bsdlabel.da2s1
# bsdlabel -R da4s1 bsdlabel.da2s1
そしておもむろに
# kldload geom_vinum
kldload します。これ以降の gvinum コマンドを使う作業はカーネルモジュール geom_vinum.ko がロードされていなければなりません。たぶん。
念のため kldstat できちんとロードされていることは確認しておきましょう。エラーが出てなけりゃ大丈夫だけども。

で、で、さっそく gvinum に入ります。 gvinum を起動したら、 gvinum のプロンプトで create してください。
# gvinum
gvinum -> create
エディタが起動します。
アレイセットまで一気に記述しても良いんやけど、ここはまず BSD ラベルの fstype にvinum 設定したディスクが認識されるか確認ですよ。
drive d0 device /dev/da2s1a
drive d1 device /dev/da3s1a
drive d2 device /dev/da4s1a
エディタでドライブ指定を記述して保存すると、その直後に list が実行されます。
3 drives:
D d2                    State: up       /dev/da4s1a     A: 8675/8675 MB (100%)
D d1                    State: up       /dev/da3s1a     A: 8675/8675 MB (100%)
D d0                    State: up       /dev/da2s1a     A: 8675/8675 MB (100%)

0 volumes:

0 plexes:

0 subdisks:
なぜかドライブ名が逆順に並んでいるわけだが。
まぁそれはいいとして、ドライブも認識できたのでいざ RAID-5 アレイの構築に参りませう。
もっかい create たたいてね。
gvinum -> create
またエディタが起動するねん。(←誰?)
先に記述した drive 〜〜 はコメントされて(もう有効だから)るんで、その下に追記しまふ。
# drive d2 device /dev/da4s1a
# drive d1 device /dev/da3s1a
# drive d0 device /dev/da2s1a
volume raid5set
plex org raid5 512k
sd length 0 drive d0
sd length 0 drive d1
sd length 0 drive d2
すると、
3 drives:
D d2                    State: up       /dev/da4s1a     A: 0/8675 MB (0%)
D d1                    State: up       /dev/da3s1a     A: 0/8675 MB (0%)
D d0                    State: up       /dev/da2s1a     A: 0/8675 MB (0%)

1 volume:
V raid5set              State: down     Plexes:       1 Size:         16 GB

1 plex:
P raid5set.p0        R5 State: down     Subdisks:     3 Size:         16 GB

3 subdisks:
S raid5set.p0.s2        State: stale    D: d2           Size:       8675 MB
S raid5set.p0.s1        State: stale    D: d1           Size:       8675 MB
S raid5set.p0.s0        State: stale    D: d0           Size:       8675 MB
あらやだ奥さん! それっぽくできてるじゃあ〜りませんか!
相変わらず subdisks のあたりも名前が逆順だがな。
まぁご覧の通り State: が volumu/plex では down だの、 subdisk では stale だの、 こりゃ初期状態じゃ気持悪いったらありゃしないので、アレイの initialize させますよ〜。
gvinum -> start raid5set
3 drives:
D d2                    State: up       /dev/da4s1a     A: 0/8675 MB (0%)
D d1                    State: up       /dev/da3s1a     A: 0/8675 MB (0%)
D d0                    State: up       /dev/da2s1a     A: 0/8675 MB (0%)

1 volume:
V raid5set              State: down     Plexes:       1 Size:         16 GB

1 plex:
P raid5set.p0        R5 State: down     Subdisks:     3 Size:         16 GB

3 subdisks:
S raid5set.p0.s2        State: I 0%     D: d2           Size:       8675 MB
S raid5set.p0.s1        State: I 0%     D: d1           Size:       8675 MB
S raid5set.p0.s0        State: I 0%     D: d0           Size:       8675 MB
さぁ、 subdisks: の State: が "I 〜〜%" となって initialize が始まりましたっ!
進捗状況は list とたたいてもわかりますけど、 ls ってたたくと subdisks: だけが表示されるので無駄がなくて助かりますよ〜
gvinum -> ls
3 subdisks:
S raid5set.p0.s2        State: I 45%    D: d2           Size:       8675 MB
S raid5set.p0.s1        State: I 45%    D: d1           Size:       8675 MB
S raid5set.p0.s0        State: I 45%    D: d0           Size:       8675 MB
gvinum -> ls
3 subdisks:
S raid5set.p0.s2        State: I 97%    D: d2           Size:       8675 MB
S raid5set.p0.s1        State: I 97%    D: d1           Size:       8675 MB
S raid5set.p0.s0        State: I 96%    D: d0           Size:       8675 MB
あと少しっ! って s0 と s1 でパーセンテージが違う。こんなタイミングもあるのね...

ってなわけで...
gvinum -> list
3 drives:
D d2                    State: up       /dev/da4s1a     A: 0/8675 MB (0%)
D d1                    State: up       /dev/da3s1a     A: 0/8675 MB (0%)
D d0                    State: up       /dev/da2s1a     A: 0/8675 MB (0%)

1 volume:
V raid5set              State: up       Plexes:       1 Size:         16 GB

1 plex:
P raid5set.p0        R5 State: up       Subdisks:     3 Size:         16 GB

3 subdisks:
S raid5set.p0.s2        State: up       D: d2           Size:       8675 MB
S raid5set.p0.s1        State: up       D: d1           Size:       8675 MB
S raid5set.p0.s0        State: up       D: d0           Size:       8675 MB
めでたく、全ての State: が up となりました。
それではいよいよ mount といきましょう。その前に gvinum を抜けて、 newfs をやりましょうったらやりましょう。
gvinum -> exit
# newfs /dev/gvinum/raid5set
/dev/gvinum/raid5set: 17351.0MB (35534848 sectors) block size 16384, fragment size 2048
        using 95 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976,
 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792,
 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
 9408960, 9785312, 10161664, 10538016, 10914368, 11290720, 11667072, 12043424,
 12419776, 12796128, 13172480, 13548832, 13925184, 14301536, 14677888,
 15054240, 15430592, 15806944, 16183296, 16559648, 16936000, 17312352,
 17688704, 18065056, 18441408, 18817760, 19194112, 19570464, 19946816,
 20323168, 20699520, 21075872, 21452224, 21828576, 22204928, 22581280,
 22957632, 23333984, 23710336, 24086688, 24463040, 24839392, 25215744,
 25592096, 25968448, 26344800, 26721152, 27097504, 27473856, 27850208,
 28226560, 28602912, 28979264, 29355616, 29731968, 30108320, 30484672,
 30861024, 31237376, 31613728, 31990080, 32366432, 32742784, 33119136,
 33495488, 33871840, 34248192, 34624544, 35000896, 35377248
newfs する際、以前は -v オプションを付ける必要があったみたいですが、いまは必要ありません。 src/sbin/newfs/newfs.c - view - 1.60 でさっくり remove されてます。

では mount してみましょう。
# mount /dev/gvinum/raid5set /mnt
# df /mnt
Filesystem                  1K-blocks     Used    Avail Capacity  Mounted on
/dev/gvinum/raid5set         17204942        4 15828544     0%    /mnt
あぁっ! RAID-5 まうんとしてるぅぅっ! まうんとしちゃってましゅぅぅぅ!!!
はぁはぁ...
で、まぁ、読み書きテストとかしてみて特に問題ないようだったら、 /etc/fstab とか /boot/loader.conf とか更新しちゃいましょう。
# vim /etc/fstab

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/gvinum/raid5set    /raid           ufs     rw              1       1
  ↑を追加。
# vim /boot/loader.conf
geom_vinum_load="YES"  ← を追加。
これで再起動してみて、きちんとマウントされたら成功ですよ〜。

というわけで、ソフトウェア RAID-5 の構築までやってみました。ここまで記事にするので疲れたさ。
今後としては、
・ケーブル抜いたりしてアレイをおかしくしてみる。
  → さらに HDD を交換してリビルドしてみる。
・アレイがおかしゅうなったら messages に出るが、メールも飛ぶとよい。
・リムーバブルユニットのついた PC ケースが欲しいなぁ。
などを記事にしようかと妄想しています。はぁはぁ。

...で。ソフトウェア RAID-5 を使ってみての感想というか、あれですが...

・噂通り書き込みが遅い...
実質、ストライピングの 25% は伊達じゃない(vinum(8) より)。
この記事を vim で書いている裏で /usr を RAID-5 領域に書き込ませてますが、 7GB のコピーに 1h かかりました。パリティの計算が頻発するからかリアルタイム系の作業がもたつく感じがします。まぁ速度を求めるもんじゃないからねぇ。速くしたけりゃハードウェア RAID にしろってことで。

・変なことはするもんじゃない。
RAID-5 の初期ビルド中に無理やり gvinum の rm コマンドを発行して subdisk → plex → volume の順で消去、 drive はどうやっても消せないのでそのまま exit して放置してしばらくすると固まった。タイミングからすると、 rm してもビルドは続行していて、ビルド完了直後に固まったようだ。 Xorg 上で作業していたのでマウスもキーボードも利かず。外から ping は通るけど ssh は応答もなく...

・gvinum の help にあって使えないコマンドあり。
resetconfig なんて unknown とか言われましてよ。どういうことかしら。
それ以前に man に gvinum がありませんことよ。


参考リンク:
vinum編 (FreeBSD覚え書き)
  っていうかそのままパクらせていただきました。ほんと、すいますいません。

Posted by mass at 2004年12月05日 04:18 [UNIX] | TrackBack
Comments
Post a comment









Remember personal info?