GEOM RAID0 を使ってみる
Seichan です.こんばんわ.
前回「GEOM のモジュールを理解する」でも書きましたが,GEOM RAID から始めてみたいと思います.RAID ということで、本来は利用頻度の高い RAID1 や RAID3 (GEOM RAID3) を先にと思いつつ、番号の若い順番で…
Pukiwiki の「FreeBSD で GEOM を試してみる」に以前書いていて、新バージョンでの焼き直しになります.ですので,何にも変わってないかもしれません.
1. RAID0 ってなんだ
今更な説明ではありますが,RAID0 について軽く説明します.
RAID0 は複数のディスクを束ねてひとつの大きなディスクとして利用する技術です.束ねるという手法/技術にはコンカチ(コンカチネーション)もありますが,両者の大きな違いは分散して書き込むのか,ディスクの1本目から順に書き込んでいくのか.の違いになります.
RAID0 は複数のディスクに分散して書き込みますので,読み書きのパフォーマンスの向上を狙うことが出来ます.メリットはディスクアクセススピードの向上ですが,デメリットはディスクが1本でも故障等で失われるとその RAID0 ディスク上のデータはすべて消失してしまいます.
ですので,主な用途としては演算や動画編集等の中間データを入れる等,消失してもオリジナルは存在出来る状態かつ,その作業中のパフォーマンスは高い方が望ましい.というシチュエーションで力を発揮します.
2. GEOM RAID0 を使う
では,早速構成してみましょう.
はじめに,kernel module がロードされているのかを確認し,ロードされていなければ明示的にロードしてください.多くの場合,何もしなくても必要に応じてロードしてくれる場合が多いのですがこれを当てにすると予期せぬトラブルになったりしますので,明示的に読み込むクセをつけた方がよいでしょう.
kldstat を実行した結果次のように「geom_stripe.ko」が表示されない場合は kldload geom_stripe でロードします
# kldstat Id Refs Address Size Name 1 1 0xffffffff80200000 15b93c0 kernel # kldload geom_stripe # kldstat Id Refs Address Size Name 1 3 0xffffffff80200000 15b93c0 kernel 3 1 0xffffffff81812000 4900 geom_stripe.ko
GEOM RAID0 は gstripe という専用のコマンドが用意されていますので,これを使用します.
次の例の場合,da1 と da2 の2本を raid0-1 という名前で RAID0 ボリュームを作成します.
# gstripe label raid0-1 da1 da2
GEOM LABEL の時と同様,状態を確認するには status サブコマンドを付けて実行します.それが次の例です.また,/dev/stripe 以下に raid0-1 というデバイスファイルが作成されていますので合わせて確認しても良いでしょう.
# gstripe status Name Status Components stripe/raid0-1 UP da1 da2
status よりも詳細な情報が欲しい場合は list サブコマンドを付けて実行します.この環境では da1,da2 が 20GB のディスクで RAID0 を構成していますので,raid0-1 は 40GB のディスクになっています.
# gstripe list Geom name: raid0-1 State: UP Status: Total=2, Online=2 Type: AUTOMATIC Stripesize: 65536 ID: 2824094330 Providers: 1. Name: stripe/raid0-1 Mediasize: 42949541888 (40G) Sectorsize: 512 Stripesize: 65536 Stripeoffset: 0 Mode: r0w0e0 Consumers: 1. Name: da1 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r0w0e0 Number: 0 2. Name: da2 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r0w0e0 Number: 1
3. ちょっとしたチューニング
先の例では gstripe label でそのままディスク名を渡して作成しています.その結果の gstripe list では次のようにストライプサイズが 65536 と出力されています.
1. Name: stripe/raid0-1 Mediasize: 42949541888 (40G) Sectorsize: 512 Stripesize: 65536 Stripeoffset: 0 Mode: r0w0e0
これは,複数のディスクに分散して書き込む際の分割サイズが 64KB 単位ということになります.普通にこのまま利用しても何も問題は無いのですが,書き込むデータの質によっては少し考慮するとパフォーマンスアップにつなげられます.
この状態のまま 64KB 以下のデータを書き込む場合,どちらか片方のディスクに対してのみ書き込み動作が発生します.64KB 以上の場合は2本のディスクに分散して書き込む事になります.
また,3本以上の場合は… 64-127KB の場合は2本,128KB 以上の場合は3本目も.という形になります.
単純な理想はほとんどのデータの読み書きで全てのディスクを有効にアクセスする事ですので,主要なデータサイズの見積もりと,ディスク本数を含めてストライプサイズを決定する事が望ましいと言えます.
ストライプサイズを変えた RAID0 ディスクを構成する場合,次のように -s オプションを付けて実行します.
# gstripe label -s 128K raid0-1 da1 da2
この場合,-s 128K という指定をしています.当然 128KB になります.バイト数でも良いですし,このように略した書き方でも大丈夫です.
list で結果をみると次のようにストライプサイズが変化している事がわかります.
1. Name: stripe/raid0-1 Mediasize: 42949410816 (40G) Sectorsize: 512 Stripesize: 131072 Stripeoffset: 0 Mode: r0w0e0
この手のチューニングに正解はありませんので,実施する場合は実際のシチュエーションを考慮したパフォーマンス試験を行って最適な値を探してください.
RAID0 ディスクを削除する
利用が終わった場合や間違って作成した場合,ストライプサイズを変えたい場合等で削除アクションを行う事になると思います.
GEOM LABEL でもやってきてますので,単純に書いちゃいます.destroy サブコマンドを使用して該当のディスクを選択するだけですね.
# gstripe destroy raid0-1
完了後,list や status で状態を確認してみてください.
ちょっとした Tips
ディスク本数を変更したい場合(2本から3本に増やしたい場合等),動的に拡張する方法は残念ながら用意されていませんので,削除せずに行おうとした場合はちょっとした工夫が必要になります.
GEOM は重ねがけが出来る点を思い出してください.
ディスク2本で RAID0 を構成していたところに,2本追加したい場合はちょっとパフォーマンス上はもったいない事になる場合もありますが,ディスク2本の RAID0 を2つ用意して,この2つの RAID0 ディスクをコンカチする事で対応が可能になります.
こういう重ねがけで色んなディスク構成を作成することができます.このあたりは RAID 等が一通り出そろったら纏めたいと思います.
と,GEOM RAID0 は以上で終わりとなります.


関連記事
-
-
FreeBSD 4.11 と 6.1
寝ようと思っても,咳がひどくて眠れない Seichan Death. 月末に妹がこっちに来るようなの
-
-
FreeBSD は / から ZFS 化出来るらしいよ
Seichan です.とりあえずよさげなサイトを見つけたので,めもめも.http://www.ish
-
-
djbdns から bind へ移行
DMZ 構成にして,ネットワーク構成を色々変更して,何か良くわからないんですが, djbdns でう
-
-
PostgreSQLが…
家のサーバは2台あって,それぞれが Flets ADSL に接続されています.この内1台マシンの R
-
-
atacontrol
ただいまなのです.Seichan です.じめじめしてて最悪… FreeBSD の ATA デバイスを
-
-
FreeBSD 6.0 入れた
FreeBSD 6.0 を VMWare に入れてみた. 現在使っている 5-STABLE のマシン
-
-
fukuoka-u.ac.jp の NTP サーバ
2ch の Linux 板のあるスレッドに,福岡大学の ntp 管理者(?) からの書込みがあった.
- PREV
- GEOM のモジュールを理解する
- NEXT
- GEOM RAID1 を使ってみる