□Linux 2.4系で Software-RAID その1
参考URL:
「mdadm」を使った構築方法
http://www.tldp.org/HOWTO/Software-RAID-HOWTO.html(NEW!!)
http://www.cse.unsw.edu.au/~neilb/source/mdadm/
「raidtools」を使った構築方法
http://www.linux.or.jp/JF/JFdocs/The-Software-RAID-HOWTO.html
http://www-6.ibm.com/jp/developerworks/linux/010427/j_l-raid1.html
どーにも安いハードウェアRAIDでは限界を感じていたので、速度第一で
Software-RAID を組んでみることにした。
巷では5万円も出せば、ミラーリングできたり、最近ではRAID-5にも対応
したハードウェアRAID装置が手に入る。これらの装置はOSから見ると1つ
のドライブとして見えるし手間も掛からないので楽なのだが、安いが故に
パフォーマンスは今ひとつというのが実情。
なので、どちらを取るかということで、やはり馬鹿でかいファイルを扱う
には容量もそうだけど速度が重要、という事でソフトウェアRAID-0で構築
してみる。
ついこの間までは「raidtools」というRAID管理用ソフトを使っていたの
だが、最近になって「mdadm」や「mdctl」というソフトに変わった。
参考URLのIBMのページやメジャーどころでのソフトウェアRAIDの説明で
すらいまだに「raidtools」なのだけど、これはもうどこにもないです。
少なくとも「kernel.org」にはないです。
そんなんで自力で持ってくる。
ちなみにどっちかをインストールすればOK。何が違うかというと「mdctl」
の方は「MULTI-PATH」という奴をサポートしていないらしい。「mdadm」は
限定的ながらサポートしているらしい。何がどう違うかは全く判りません。
tar xvzf package/mdadm-2.6.7.tgz
cd mdadm-2.6.7/
make
make install
tar xvzf package/mdctl-0.6.tgz
cd mdctl-0.6/
make
make install
どちらもこんな感じでインストール。
補足:Plamo-3.x より前では install のある場所が違う
Plamo-3.x より前では install が /usr/bin/install にあることになって
いることがあるので、/bin/install に Makefile を書き換える。
で、インストールすると
/bin/install -D -m 755 mdadm /sbin/mdadm
/bin/install -D -m 644 mdadm.8 /usr/share/man/man8/mdadm.8
/bin/install -D -m 644 md.4 /usr/share/man/man4/md.4
/bin/install -D -m 644 mdadm.conf.5 /usr/share/man/man5/mdadm.conf.5
こんなところにファイルがそれぞれ入るらしい。って、これじゃ man が
まともに見れねーよ、というわけで、
:
:
> #INSTALL = /usr/bin/install
> INSTALL = /bin/install
> DESTDIR =
> BINDIR = /sbin
> #MANDIR = /usr/share/man
> MANDIR = /usr/man
> MAN4DIR = $(MANDIR)/man4
> MAN5DIR = $(MANDIR)/man5
> MAN8DIR = $(MANDIR)/man8
:
:
と、man 関連のインストール先もちゃんと書き直してインストールしなおし。
補足:Plamo は install コマンドがふるい!
mdadm は install-4.0 以上が必要なので、fileutils-4.0 を入れないとだめ。
上記の install のありかを現在のシステムにあわせて ./configure して
インストール
tar xvzf package/fileutils-4.1.tar.gz
cd fileutils-4.1/
./configure –prefix=/usr
make
make check
make install
http://www.gnu.org/directory/fileutils.html
と思ったら、いつの間にやらパッケージが統合されてしまったらしい。
http://ftp.gnu.org/gnu/coreutils/coreutils-6.12.tar.gz
こちらをインストールしてみる。
tar xvzf package/coreutils-6.12.tar.gz
cd coreutils-6.12/
./configure –prefix=/usr
make
make check
make install
さて本題に戻る。
「raidtools」の時には予め /etc/raidtab 見たいなのを設定しましたが
「mdadm(mdctl)」(以下面倒なので mdadm で話を進める)の場合には、
「/etc/mdadm.conf」というファイルがRAID構築をすると勝手にできる
らしい。(うーん、という事はどないせぇっちゅうんじゃ?)
えー、さてこれからがRAIDの構築です。今回は IBM IC35L080AVVA07-0
(80GB)を2台(hde,hdg)使用してRAIDを構築します。
その前にディスクの速度を測定しておきましょう。「hdparm」でもいいの
ですが、今回はさらに厳密?に Bonnie を使ってみましょう。
http://www.coker.com.au/bonnie++/
まずはパーティションを切る前の「hdparm」での測定結果
> /dev/hde:
> Timing buffered disk reads: 64 MB in 1.40 seconds = 45.71 MB/sec
> /dev/hdg:
> Timing buffered disk reads: 64 MB in 1.40 seconds = 45.71 MB/sec
つづいて「bonnie++」での測定
> ——-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 14004 100.1 137903 101.0 112232 99.7 14591 99.9 240333 100.9 12610.1 100.9
> ——-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 13995 99.8 137088 100.4 112590 100.1 14615 99.9 240702 101.1 12766.6 102.1
ちなみにこちらは同型HDDの reiserfs のパーティション
> ——-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 13910 99.7 136887 100.3 111653 99.2 14526 99.7 240059 98.5 12752.1 98.8
まぁどっちもさしてかわりませんね。
さて、では mdadm で構築です。
mdadm の使い方は man をよーく読んでもらうしかありません。
今回は /dev/hde5 と /dev/hdg5 を使って RAID-0 を作ります。
オプションは -l がRAIDレベル、-n が使うディスク(パーティション)の数、
-C はクリエイト(新規作成)です。
ここでは -B(構築)をしていませんが、なにせRAID-0なので、必要ないです。
やっても怒られるだけです。RAID-1以上の場合には必要だと思いますが。
では作ってみましょ。
> # /sbin/mdadm -C /dev/md0 -l0 -n2 /dev/hd[eg]
> mdadm: /dev/hde5 appears to contain an ext2fs file system
> size=80418176K mtime=Sat Nov 16 21:59:26 2002
> mdadm: /dev/hdg5 appears to contain an ext2fs file system
> size=80418176K mtime=Sat Nov 16 22:02:05 2002
> Continue creating array?
と聞かれるので y とすると
> mdadm: array /dev/md0 started.
といわれて終わります。簡単ですね。
さて、これでRAIDデバイスが出来たのでマウントすればいいのかな?
とやってみたら、
> # mount /dev/md0 /mnt
> # df
> Filesystem 1k-blocks Used Available Use% Mounted on
> /dev/hda1??????????? 1015704? 323028?? 640068???? 34% /
> /dev/hda5??????????? 2104408?? 86528? 2017880????? 5% /var
> /dev/hda6??????????? 4200828 1940744? 2260084???? 47% /usr
> /dev/hda7??????????? 72916768 61516700? 11400068???? 85% /samba
> /dev/md0???????????? 79155480? 32828? 75101744????? 1% /mnt
といわれてしまいました。何ですでにパーティションが…あ、これは
もともと「Bonnie」をやるときに仮に作ったパーティションの情報の
ままですね。
というわけで、/sbin/fdisk でパーティション情報を一旦捨ててから、
/sbin/mkfs で ext3 でフォーマットです。それにしても領域がでかい!
というわけで、-c は面倒なのでつけません。(前にやってたから省略)
> # /sbin/mkfs -t ext3 /dev/md0
> mke2fs 1.27 (8-Mar-2002)
> Filesystem label=
> OS type: Linux
> Block size=4096 (log=2)
> Fragment size=4096 (log=2)
> 20119552 inodes, 40209056 blocks
> 2010452 blocks (5.00%) reserved for the super user
> First data block=0
> 1228 block groups
> 32768 blocks per group, 32768 fragments per group
> 16384 inodes per group
> Superblock backups stored on blocks:
> 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
> 4096000, 7962624, 11239424, 20480000, 23887872
>
> Writing inode tables: done
> Creating journal (8192 blocks): done
> Writing superblocks and filesystem accounting information: done
>
> This filesystem will be automatically checked every 28 mounts or
> 180 days, whichever comes first. Use tune2fs -c or -i to override.
> #
と終わりましたので、tune2fs でディスクのfsckの間隔をちょっと短めに
設定しなおして起きます。(だって怖いし!)
> # /sbin/tune2fs -i 7d -c 10 /dev/md0
> tune2fs 1.27 (8-Mar-2002)
> Setting maximal mount count to 16
> Setting interval between check 1209600 seconds
さーて、これでマウントしたら出来上がり。
> # mount -t ext3 /dev/md0 /mnt
> # df
> Filesystem 1k-blocks Used Available Use% Mounted on
> /dev/hda1??????????? 1015704? 323028?? 640068???? 34% /
> /dev/hda5??????????? 2104408?? 86528? 2017880????? 5% /var
> /dev/hda6??????????? 4200828 1940744? 2260084???? 47% /usr
> /dev/hda7??????????? 72916768 61516700? 11400068???? 85% /samba
> /dev/md0???????????? 158310796 32828? 150236160???? 1% /mnt
> #
うわー、でかい領域が出来た。ぶっ飛んだらどうしよう? (^^;
まずは「hdparm」での測定結果
> /dev/md0:
> Timing buffered disk reads: 64 MB in 0.83 seconds = 77.11 MB/sec
はや!
ちなみに「Bonnie」での測定結果は下記のとおりでした。
> ——-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 12739 97.9 93821 99.0 98763 96.4 14061 98.6 240270 98.5 12320.3 98.6
ちょっと遅くなったかな、という程度ですね。
ちなみに下のようにすると、RAIDの状態を見ることが出来ます。
> # /sbin/mdadm –query –detail –scan /dev/md0
> /dev/md0:
>???????? Version : 00.90.00
>?? Creation Time : Sat Nov 16 22:12:27 2002
>????? Raid Level : raid0
>????? Array Size : 160836224 (153.39 GiB 164.74 GB)
>??? Raid Devices : 2
>?? Total Devices : 2
> Preferred Minor : 0
>???? Persistence : Superblock is persistent
>
>???? Update Time : Sat Nov 16 22:12:27 2002
>?????????? State : dirty, no-errors
>? Active Devices : 2
> Working Devices : 2
>? Failed Devices : 0
>?? Spare Devices : 0
>
>????? Chunk Size : 64K
>
>??????????? UUID : a0bae35c:92b4eb69:cb7d3af2:5e0fdc4a
>????????? Events : 0.11
>
> Number Major Minor RaidDevice State
>??? 0??? 33????? 5????? 0????? active sync?? /dev/hde5
>??? 1??? 34????? 5????? 1????? active sync?? /dev/hdg5
さて、これを起動時にマウントして… と思ったら、マウントできません。
何でかなーと思ったら、その都度 mdadm でRAIDを認識させてあげないと
いけません。なので、/etc/rc.d/rc.S に追記します。
:
> # enable SoftwareRAID
> /sbin/mdadm -As
:
と、こんな感じでマウントする前にRAIDをスタートさせましょう。
これで、あとは /etc/fstab に下記のように書いておけば
> /dev/md0 /samba ext3 defaults 1 1
ちゃんとマウントしてくれました。
そうそう /etc/mdadm.conf に下記のように書いておかないと、リブート時に
認識しません。
> DEVICE /dev/hd[eg]5
> ARRAY /dev/md0 level=raid0 num-devices=2 UUID=a0bae35c:92b4eb69:cb7d3af2:5e0fdc4a
以上。