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のインストールディスクにてブートします。

Fixit を選択します。

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を買うまでもないといった使い方でしたら試しても良いでしょう。























