GEOM RAID1 を使ってみる
Seichan です.こんばんわ.
前回の「GEOM RAID0 を使ってみる」に続いて今回は RAID1 に触れてみたいと思います.
こちらも同様に Pukiwiki の「FreeBSD で GEOM を試してみる」に以前書いていて、新バージョンでの焼き直しになります.ですので,何にも変わってないかもしれません.
1. RAID1 ってなんだ
今更な説明ではありますが,RAID1 について軽く説明します.
RAID1 は二つ以上のディスクに対して同一のデータを書き込み,耐障害性を確保する技術です.同一データを保持する事から,ミラーリングという呼び方も一般的です.全てのディスクが故障するまでデータは保護し続けられます.多くの RAID コントローラやソフトウェア RAID は3つ以上のディスクを RAID1 としてミラーリングする事ができます.ミラー数が増えるほどに耐障害性は高められることになります.
デメリットはスピードとコストです.同一データを書き込む事から,ディスク本数が増えても速度はディスク1本分の (またはそれより少ない) パフォーマンスとなります.また,コストも1つのデータを保護するのに2倍以上のコストをディスクにかける事になります.
その為,多くの場合は単純な RAID1 では無く,RAID1 と RAID0 を組み合わせた RAID10 と呼ばれる方法を用いたり,RAID5 や RAID6 を用いたり,RAID5 と RAID0 を組み合わせた RAID50 と呼ばれる方法を用いたりします.
OS 領域やいわゆるブートディスクとして利用される部分はデータ量も多くない場合が多数のため,RAID1 が多く利用されます.
2. GEOM RAID1 を使う
では,早速構成してみましょう.
はじめに,kernel module がロードされているのかを確認し,ロードされていなければ明示的にロードしてください.kldload geom_mirror でロードすることが出来ます.
手元の環境では明示的なロードが必要でした…
# kldstat Id Refs Address Size Name 1 1 0xffffffff80200000 15b93c0 kernel # kldload geom_mirror # kldstat Id Refs Address Size Name 1 3 0xffffffff80200000 15b93c0 kernel 3 1 0xffffffff81812000 fe84 geom_mirror.ko
GEOM RAID1 は gmirror という専用のコマンドが用意されていますので,これを使用します.
次の例の場合,da1 と da2 の2本を raid1-1 という名前で RAID0 ボリュームを作成します.
# gmirror label raid1-1 da1 da2
こちらも同様に,status サブコマンドで状態を確認することが出来ます.
# gmirror status Name Status Components mirror/raid1-1 COMPLETE da1 (ACTIVE) da2 (ACTIVE)
status より詳細な情報が欲しい場合は list サブコマンドで確認してください.この環境では da1,da2 が 20GB のディスクで RAID1 を構成していますので raid1-1 は当然 20GB のままとなっています.
# gmirror list Geom name: raid1-1 State: COMPLETE Components: 2 Balance: load Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 2655055578 Providers: 1. Name: mirror/raid1-1 Mediasize: 21474835968 (20G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: da1 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1015435515 2. Name: da2 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 1 Flags: NONE GenID: 0 SyncID: 1 ID: 4199385851
3. ちょっとしたチューニング
GEOM RAID0 では,ブロックサイズ/セクタサイズ の調整がありましたが GEOM RAID1 では,主に読み取り時の動きを調整する事が出来ます.読み取り時にミラー全てから読み取るのか,ひとつのディスクから読み取るのか.という動きを調整可能です.設定可能な項目としては次のとおりです.
- load: 負荷の低いディスクから優先的に読み出しを行う
- prefer: プライオリティの高いディスクを使用する
- round-robin: ラウンドロビンで交互に読み取る
- split 指定した大きさで分割して複数のディスクから読み取る
何も指定していない場合は load となっていますので,負荷の低いディスクから優先的に読み出しを行う.という設定です.
gmirror label で作成する際にオプションとして一緒に渡すことも可能ですが,作成後に変更することも可能です.ここでは,作成済みのものに対する変更を行います.
# gmirror configure -b round-robin raid1-1
設定後,状態を確認したい場合は list サブコマンドで確認します.Balance という行が load から round-robin に変更されています.
# gmirror list Geom name: raid1-1 State: COMPLETE Components: 2 Balance: round-robin Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 2655055578 Providers: 1. Name: mirror/raid1-1 Mediasize: 21474835968 (20G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: da1 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 1015435515 2. Name: da2 Mediasize: 21474836480 (20G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 1 Flags: NONE GenID: 0 SyncID: 1 ID: 4199385851
なお,prefer の場合は各ディスクの Priority 行が一番大きなディスクが使用されます.split の場合は Slice 行の値が分割データサイズとなり,この値で分割されて複数のディスクに読み出しのリクエストを行います.
Slice の値は当然変更することが出来ます.たとえば分割サイズを 128KB にする場合は次のように実行します.その後 list で状態を表示させていますが,Slice の値が 4096 から 131072 に変更されています.
# ただ,この例の場合 Balance タイプの変更はしておらず,round-robin のままなので Slice に意味はありません…
# gmirror configure -s 128K raid1-1 # gmirror list Geom name: raid1-1 State: COMPLETE Components: 2 Balance: round-robin Slice: 131072 Flags: NONE GenID: 0 SyncID: 1 ID: 2655055578 Providers: 1. Name: mirror/raid1-1 Mediasize: 21474835968 (20G) Sectorsize: 512 Mode: r0w0e0
このように RAID1 も簡単に構成する事が出来ます.
4. RAID1 ディスクを削除する
GEOM RAID1 ディスクを壊す場合は次のようなオペレーションとなります.RAID1 は壊してしまいますが,データが破壊されるわけではないので単体としてそのままマウントすることが可能です.
gmirror stop で raid1-1 を停止します.これだけだと次に再起動した場合等でまた RAID1 ディスク化してしまいますので,各ディスクにあるメタデータを削除する必要があります.それが gmirror clear です.メタデータもキレイに削除しておかないと,別の環境に接続した場合等に突然 RAID1 ディスクとして認識します.また,もう一方が存在しないと冗長性が無い.というメッセージが出たりしてちょっとうざったい状態を味わう事が出来ます.
# gmirror stop raid1-1 # gmirror clear da1 # gmirror clear da2
と以上 RAID1 でした.次回は… RAID1 と RAID0 の組み合わせなんかやってみたいですね.


関連記事
-
-
FreeBSD で NFS (4) 【NFSクライアントとマウントオプション】
Seichan です.こんばんわ. 前回「FreeBSD で NFS (3)」までは NFS Se
-
-
GEOM RAID0 を使ってみる
Seichan です.こんばんわ. 前回「GEOM のモジュールを理解する」でも書きましたが,GE
-
-
ucspi-tcp (SSL Patch) と ucspi-ssl (TLS Patch)
Seichan です.qmail 関連の SSL/TLS 化を考えてます.特に SMTP(submi
-
-
FreeBSD をクライアントとして使用する (X.org)
Seichan です.FreeBSD をクライアントとして使用する,其ノ三. 今回も X.org
-
-
FreeBSD をクライアントとして利用する (サウンド)
Seichan です.FreeBSD をクライアントとして利用する為の覚え書き其ノ一.まずはやっぱり
-
-
FreeBSD 6.3-RELEASE でちょっと遊んだ
Seichan です.インフルエンザで丸々一週間会社を休んでしまいました...有給休暇の残がゼロに!
-
-
FreeNAS 0.683b Japanese
Seichan です.おひさしぶしです. FreeNAS のメッセージを日本語化しておりました. と
-
-
GEOM RAID0 と GEOM RAID1 の組み合わせ
Seichan です.こんばんわ. 前回の「GEOM RAID1 を使ってみる」に続いて今回は R