Pocket

こんにちは。nemotoです。

画像を整理していたら、数年前と比べて1枚あたりの容量が随分増えたなぁと思いません?
みなさんも大事な画像・動画など、もしものトラブルを考え、DVD、自宅サーバ、オンラインストレージなどの冗長を用いて運用しているのではないでしょうか?

でも心配性なあなた。
その環境に障害があったらどうしよう?とか考えたりしませんか?

そんなことを考えた私もRAIDで冗長性の向上も考えてしまったので、今日はLinux(CentOS)上に、mdadmを用いたソフトウェアでのRAID構築についてです。
また、実験的に実施するのでUSBメモリを用いてRAIDを構築します。(USB3本でRAID5)

1.mdadmのインストール
自身の環境にmdadmがインストールされていない場合は、インストールしてください。

# yum install mdadm

2.RAID用パーティションの構築
RAID構築用のUSBを接続し、対象デバイスにRAID用パーティションタイプ(Linux raid autodetect)を設定します。
今回対象となるUSBは sdb / sdc / sdd として認識されていますので、設定した結果は以下になります。

# fdisk -l /dev/sdb

Disk /dev/sdb: 7743 MB, 7743995904 bytes
239 heads, 62 sectors/track, 1020 cylinders
Units = cylinders of 14818 * 512 = 7586816 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1020     7557149    5  Extended
/dev/sdb5               1        1020     7557118   fd  Linux raid autodetect
# fdisk -l /dev/sdc

Disk /dev/sdc: 7743 MB, 7743995904 bytes
239 heads, 62 sectors/track, 1020 cylinders
Units = cylinders of 14818 * 512 = 7586816 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        1020     7557149    5  Extended
/dev/sdc5               1        1020     7557118   fd  Linux raid autodetect
# fdisk -l /dev/sdd

Disk /dev/sdd: 7743 MB, 7743995904 bytes
239 heads, 62 sectors/track, 1020 cylinders
Units = cylinders of 14818 * 512 = 7586816 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1        1020     7557149    5  Extended
/dev/sdd5               1        1020     7557118   fd  Linux raid autodetect

参考までに上記のパーティションの設定手順は以下。

# fdisk /dev/sdb

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
e
Partition number (1-4): 1
First cylinder (1-1020, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1020, default 1020):
Using default value 1020

Command (m for help): n
Command action
l   logical (5 or over)
p   primary partition (1-4)
l
First cylinder (1-1020, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1020, default 1020):
Using default value 1020

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): fd
Changed system type of partition 5 to fd (Linux raid autodetect)

Command (m for help): w

3.RAIDアレイの作成と初期化
RAIDアレイの作成とは、複数のデバイスを1つのデバイスとして認識させるために行います。
今回は/dev/md0という名前でRAID5を指定し作成します。

# mdadm -C /dev/md0 -l5 -n3 /dev/sdb5 /dev/sdc5 /dev/sdd5
mdadm: array /dev/md0 started.

RAIDアレイを作成しましたら、次にRAIDアレイを利用するパーティションタイプで初期化します。
今回はファイルシステムext3で初期化します。

# mke2fs -j /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1889408 inodes, 3778496 blocks
188924 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3871342592
116 block groups
32768 blocks per group, 32768 fragments per group
16288 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

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

4.マウント
あとはマウントしていただければ完了です。

# mkdir /raid
# mount /dev/md0 /raid/

さてマウントしたパーティションのサイズを確認してみてください。

# df -h | grep /dev/md0
/dev/md0               15G  165M   14G   2% /raid

実際に用意したデバイス(USB)は約8GサイズほどのUSBを3つ用意していますが、実際に有効なパーティションサイズは2/3のサイズとなっています。
これはRAIDアレイをRAID5で構築したことで、1/3の容量をパリティとして利用する為です。

ご覧のとおり、構築までの手順はさほど難しくはないと思います。
次回は、障害時のリカバリ方法について書こうかなと思っています。

ではまた。