ESXi上の CentOS 5.5 に ext4 + Linux SoftRAID でファイルサーバを作ってみる


ext4 がとうとう実用化されました。
折角なのでファイルサーバを ext4 + Linux SoftRAID1 で構成してみようかと思います。

/sda … 400GB
/sdb … 2TB
/sdc … 2TB
/sdd … 2TB

こんな構成で、sdc と sdd をRAID化します。
ちなみに hda じゃなく sda なのは、vmware ESXi 上だからです。
(ファイルサーバにサーバリソース使いたくないから)

CentOS 5.5 で ext4を利用するには、yum install e4fsprogs みたいにしてツールをインストールしてあげてください。詳細はぐぐってね。

まずは、sdc を fdisk で領域確保してシステムタイプを Linux RAID にします。

[email protected]/# fdisk /dev/sdc
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 241951 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-241951, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-241951, default 241951):
Using default value 241951

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

次に sdd も同様に領域確保します。

[email protected]/# fdisk /dev/sdd
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 241951 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-241951, default 1):
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-241951, default 241951):
Using default value 241951

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。

設定が正常になっているか確認。

[email protected]/# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 5221 41833260 8e Linux LVM

Disk /dev/sdb: 1932.7 GB, 1932735283200 bytes
255 heads, 63 sectors/track, 234975 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdb1 * 1 234975 1887436656 83 Linux

Disk /dev/sdc: 1990.1 GB, 1990116046848 bytes
255 heads, 63 sectors/track, 241951 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdc1 1 241951 1943471376 fd Linux raid 自動検出

Disk /dev/sdd: 1990.1 GB, 1990116046848 bytes
255 heads, 63 sectors/track, 241951 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot Start End Blocks Id System
/dev/sdd1 1 241951 1943471376 fd Linux raid 自動検出

sdc と sdd がしっかりと Linux RAID になっています。
そうしたら、 md0(RAID Volume) を作成します。
コマンドは mdadm です。

[email protected]/# mdadm –create –assume-clean /dev/md0 –level=raid1 –raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: array /dev/md0 started.

–assume-clean オプションを付けるのは、新規なので再構築不要だからです。これをつけないと、再構築が始まりとても待たされます。
–level=raid1 は mirror オプション。striping なら raid0 です。
作成したら状態確認をします。

[email protected]/# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdd1[1] sdc1[0]
1943471296 blocks [2/2] [UU]

unused devices:

[email protected]/# mdadm –detail /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Sat Apr 9 16:16:33 2011
Raid Level : raid1
Array Size : 1943471296 (1853.44 GiB 1990.11 GB)
Used Dev Size : 1943471296 (1853.44 GiB 1990.11 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sat Apr 9 16:16:33 2011
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : 60575a3b:ff362399:2ebd512d:292dc9b7
Events : 0.1

Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1

State が clean 、 [UU] なので正常に処理できました。
障害があると、 [U_] とかになったりします。
そうしたら ext4 でフォーマットします。

[email protected]/# /sbin/mkfs.ext4 /dev/md0
mke4fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
121470976 inodes, 485867824 blocks
24293391 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14828 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848

Writing inode tables: done
Creating journal (32768 blocks):
done
Writing superblocks and filesystem accounting information:
done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune4fs -c or -i to override.

フォーマットが完了しました。
一度マウントをして、問題が無ければ一度 umount します。
例では /data にマウントしています。

[email protected]/# mkdir -p /data
[email protected]/# mount -t ext4 /dev/md0 /data
[email protected]/# df -h
[email protected]/# umount /data

起動時にマウントされるように、fstab に記載して、 mount します。

[email protected]/# vi /etc/fstab

> /dev/md0 /data ext4 defaults 0 0

[email protected]/# mount -av
mount: LABEL=/boot は /boot にマウント済です
mount: devpts は /dev/pts にマウント済です
mount: sysfs は /sys にマウント済です
mount: proc は /proc にマウント済です
/dev/md0 on /data type ext4 (rw)

最後に mdmpd と mdmonitor (RAID監視) を起動するように設定します。

[email protected]/# vi /etc/mdadm.conf
DEVICE /dev/sd[cd]1
ARRAY /dev/md0 devices=/dev/sdc1,/dev/sdd1
MAILADDR 通知したいメールアドレス

[email protected]/# chkconfig mdmpd on
[email protected]/# /etc/rc.d/init.d/mdmpd start
[email protected]/# chkconfig mdmonitor on
[email protected]/# /etc/rc.d/init.d/mdmonitor start

ちなみに自宅の ESXi(Core2Duo 6320 + 2GB Mem) + 仮想HDD(sataraid-pci) + 1Gb Ethernet で計測すると、転送速度は 35MB/s (280Mbps)程度はコンスタントに出るようです。

ちなみに自宅サーバではこのUSBメモリからESXiを起動しています。
もしよかったらぽちっとしてあげてください。
[rakuten]bonz:10004776[/rakuten]

コメントを残す

メールアドレスが公開されることはありません。