SYONテクニカル

FreeBSDでgmirrorによるソフトウェアRAID

サイオンコミュニケーションズ株式会社
日比 康介( hibi@syon.co.jp )

1.はじめに

最近、RAID1(ミラーリング)を行う場合、OS非依存のハードウェアRAIDを使う場合が多いのですが、FreeBSD 5.3 から導入されたgmirrorでも簡単に設定できそうなので、今回試してみます。

2.マシン環境

今回、設定するマシン環境は次のとおりです。

CPU Pentium4 2.8GHz
Memory 512MB
HDD Seagate ST3160023AS 160GB x 2
OS FreeBSD 5.4-RELEASE

3.ディスクの確認

2本のディスクの片方(ad4)にFreeBSD 5.4-RELEASEをインストールし、その状況を確認します。空きディスクはad6となっています。

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad4s1b             none            swap    sw              0       0
/dev/ad4s1a             /               ufs     rw              1       1
/dev/ad4s1e             /tmp            ufs     rw              2       2
/dev/ad4s1f             /usr            ufs     rw              2       2
/dev/ad4s1d             /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
# dmesg
...
ad4: 152587MB <ST3160023AS/8.12> [310019/16/63] at ata2-master SATA150
ad6: 152587MB <ST3160023AS/8.12> [310019/16/63] at ata3-master SATA150
Mounting root from ufs:/dev/ad4s1a

4.gmirrorの設定

4.1.fixit modeの起動

FreeBSD 5.4-RELEASEのインストールディスクにてブートします。

FreeBSDのインストーラー画面でFixitモードを選択している

Fixit を選択します。

Fixitモードのオプション選択画面で2 CDROM/DVDを選択している

2 CDROM/DVD を選択し、[OK]にて “fixit” mode となります。

|You might want to symlink /                           |
+------------------------------------------------------+

Good Luck!

Fixit#

4.2.gmirrorの設定

FreeBSD 5.4-RELEASE をインストールしたad4をRAIDに登録します。

Fixit# chroot /dist
Fixit# mount_devfs devfs /dev
Fixit# gmirror load -v
Module available.
Done.
Fixit# gmirror label -v -b split -s 4096 gm0 /dev/ad4
Metadata value stored on /dev/ad4
Done.

gmirror labelでディスクの登録となります。

コマンドラインオプションの説明:

-v
詳細表示モード
-b split
読み込み時、ディスク分けて読み込み
-s 4096
split設定時に設定したサイズ以上の場合、分けて読み込み
gm0
RAIDのデバイス名
/dev/ad4
RAIDに追加するデバイス名

gmirror listにてRAIDの設定状況が確認できます。

Fixit# gmirror list
Geom name: gm0
State: COMPLETE
Components: 1
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 3598314906
Providers:
1. Name: mirror/gm0
   Mediasize: 159999999488 (149G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: ad4
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 776935242

次に、空きディスクのad6を追加します。

Fixit# gmirror insert -v gm0 /dev/ad6
Done.

追加を行うと自動的にリビルドが実行され、ad6の同期が始まります。gmirror list にてRAIDの設定状況を確認すると次のようになり、Synchronized: 0 %で進行状況が確認できます。

Fixit# gmirror list
Geom name: gm0
State: COMPLETE
Components: 1
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 3598314906
Providers:
1. Name: mirror/gm0
   Mediasize: 159999999488 (149G)
   Sectorsize: 512
   Mode: r0w0e0
Consumers:
1. Name: ad4
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 776935242
1. Name: ad6
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: SYNCHRONIZING
   Priority: 0
   Flags: DIRTY, SYONCHRONIZING
   GenID: 0
   SyncID: 1
   Synchronized: 0%
   ID: 3485422195

4.3.ブート設定

設定したRAIDディスクをマウントします。

Fixit# mount /dev/mirror/gm0s1a /mnt

editにて/boot/loader.conf geom_mirror_load="YES"を追加します。

Fixit# edit /mnt/boot/loader.conf

/boot/loader.confのファイル内容

geom_mirror_load="YES"

edit にて /etc/fstabのデバイス名/dev/ad4/dev/mirror/gm0 へ変更します。

Fixit# edit /mnt/etc/fstab

/etc/fstabのファイル内容

# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b      none            swap    sw              0       0
/dev/mirror/gm0s1a      /               ufs     rw              1       1
/dev/mirror/gm0s1e      /tmp            ufs     rw              2       2
/dev/mirror/gm0s1f      /usr            ufs     rw              2       2
/dev/mirror/gm0s1d      /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0

exitにてfixit mode を終了してから、sysinstall Main Menuを終了し、CDを取り出し、再起動します。問題がなくgm0から起動することを確認します。

5.gmirrorの状態確認

進行状況を確認するには、gmirror statusでも可能です。

# gmirror status
      Name    Status  Components
mirror/gm0  DEGRADED  ad4
                      ad6 (8%)

完了すると次のように表示されます。

# gmirror status
      Name    Status  Components
mirror/gm0  COMPLETE  ad4
                      ad6

6.リビルドテスト

ad4のディスクを外してテストを行ってみます。shutdown後、ディスクを外して起動します。

# gmirror list
Geom name: gm0
State: DEGRADED
Components: 2
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 2
ID: 3598314906
Providers:
1. Name: mirror/gm0
   Mediasize: 159999999488 (149G)
   Sectorsize: 512
   Mode: r5w5e2
Consumers:
1. Name: ad6
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 2
   ID: 3485422195

再度shutdown後、ディスクを戻して起動します。自動的にリビルドが開始されます。

# gmirror list
Geom name: gm0
State: DEGRADED
Components: 2
Balance: split
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 2
ID: 3598314906
Providers:
1. Name: mirror/gm0
   Mediasize: 159999999488 (149G)
   Sectorsize: 512
   Mode: r6w5e2
Consumers:
1. Name: ad4
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: SYNCHRONIZING
   Priority: 0
   Flags: DIRTY, SYNCHRONIZING
   GenID: 0
   SyncID: 2
   Synchronized: 2%
   ID: 764935242
2. Name: ad6
   Mediasize: 160000000000 (149G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: DIRTY
   GenID: 0
   SyncID: 2
   ID: 3485422195

7.ベンチマーク

bonnie-2.0.6 にてRAID時に遅くなるかどうか簡単なベンチマークテストをしてみました。

・ RAID前

-------Sequential Output-------- ---Sequential Input-- --Random--
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU  /sec %CPU
          100 58454 46.8 51844 12.1 63145 17.4 102561 99.7 936142 99.6 61638.0 92.6

RAID後

-------Sequential Output-------- ---Sequential Input-- --Random--
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
Machine    MB K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU  /sec %CPU
          100 56888 45.8 52972 12.4 60499 16.8 102416 99.6 939036 99.7 60755.2 90.3

この結果をみると、RAIDによる影響はそれほどないようです。

8.最後に

man gmirror を見てみると、サンプルでバックアップを取る例や、自動リビルドをOFFにしている例などがあり、いろいろと遊べそうです。構築も簡単なのでハードウェアRAIDを買うまでもないといった使い方でしたら試しても良いでしょう。

Copyright 1999-2012 SYON Communications, Co. All rights reserved