同じ容量、型番のHDDを2台以上手に入れたのであれば、大事なデータを保護する為に RAID を構成したいものです。RAID は、データを複数のディスクに保存する事により、ディスク故障によるデータの破損を防ぎ、
冗長性、耐久性を高める技術の事をいい、RAIDの種類を組み合わせることにより沢山のやり方が存在しますが、おおまかに RAID 0〜6の6種類のやり方が存在します。
また RAID には、ハードウェアで RAID 機能を実現するハードウェア RAID とソフトウェアで RAID 機能を実現するソフトウェア RAID という2つのやり方があります。前者は、RAID カードなど専用ハードウェアを用意する必要がありますが、後者は、HDD が2台以上あるなら、それ以上の機材を用意する事なく Linux の機能を使ってソフトウェア的に実現させる事が出来ます。ソフトウェア RAID は、ハードウェア RAID に比べソフトウェアに処理を行わせる為 CPU に負荷が発生し、ハードウェア RAID より低速であると言われていますが、安価に行えるところが魅力です。
本稿では、もっとも利用されていて、簡単に構築できる RAID1 をソフトウェア RAID で構築する方法を紹介します。RAID1 は、複数台のHDDに、同時に同じ内容を書き込むため、二重化(ミラーリング)と呼ばれています。
同時に2台のHDDが壊れない限りデータが消失する事はありませんが、保存できるデータ量は1/2になります。
RAID1 データのRead/Write | ---------- | | | | ------ ------ |Data 1| |Data 1| ------ ------ |Data 2| |Data 2| ------ ------ |Data 3| |Data 3| ------ ------ |Data 4| |Data 4| ------ ------ |Data 5| |Data 5| ------ ------ /dev/sdb1 /dev/sdc1
RAID0 耐故障性の無いディスクアレイ
RAID1 二重化
RAID2 ビット単位での専用誤り訂正符号ドライブ (
RAID3 ビット/バイト単位での専用パリティドライブ
RAID4 ブロック単位での専用パリティドライブ
RAID5 ブロック単位でのパリティ分散記録
RAID6 ブロック単位・複数パリティ分散記録
今回は、/dev/sda に OS がインストールされているシステムに、2台のHDDを増設して/var/www/html 配下のデータを RAID 化する方法を紹介します。
まず、最初に /dev/sdb に新規のパーティションを作成します。
# fdisk /dev/sdb : コマンド (m でヘルプ): n <- n 新しいパーティションを追加 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p <- p プライマリにパーティションを作成 パーティション番号 (1-4, default 1): 1 <- 1 パーティション番号は1 最初 sector (2048-1953525167, 初期値 2048): <- Enter 最初のセクターに設定 初期値 2048 を使います Last sector, +sectors or +size{K,M,G} (2048-1953525167, 初期値 1953525167): <- Enter 最大サイズを割り当てる 初期値 1953525167 を使います Partition 1 of type Linux and of size 931.5 GiB is set コマンド (m でヘルプ): t <- t パーティションIDを変更 Selected partition 1 Hex code (type L to list all codes): L <- L パーティションID一覧を表示 : 16 隠し FAT16 63 GNU HURD または af HFS / HFS+ fb VMware VMFS 17 隠し HPFS/NTFS 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI スワップ fd Linux raid 自動 1b 隠し W95 FAT32 70 DiskSecure Mult bb 隠し Boot Wizar fe LANstep 1c 隠し W95 FAT32 75 PC/IX be Solaris ブート ff BBT : Hex code (type L to list all codes): fd <- fd Linux raid 自動を選択 : コマンド (m でヘルプ): w <- w 設定を保存して終了 パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。
全く同じように /dev/sdc にパーティションを作成します。
# fdisk /dev/sdc
ソフトウェア RIAD ツール mdadm をインストールします。
# yum install mdadm
RAID デバイスを作成します。
デバイス名 RAIDレベル デバイス数 デバイス # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 Continue creating array? y <- y Enter mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
RAID の進行状態を確認します。 シンクが始まり、シンクに 45分かかる事が分かります。
# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc1[1] sdb1[0] 499975488 blocks super 1.2 [2/2] [UU] [>....................] resync = 0.1% (914496/499975488) finish=45.4min speed=182899K/sec bitmap: 4/4 pages [16KB], 65536KB chunk unused devices: <none>
RAID の詳細情報を表示します。
# mdadm --detail /dev/md0 dev/md0: Version : 1.2 Creation Time : Thu Jan 14 07:32:34 2016 Raid Level : raid1 Array Size : 499975488 (476.81 GiB 511.97 GB) Used Dev Size : 499975488 (476.81 GiB 511.97 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Thu Jan 14 07:33:04 2016 State : clean, resyncing Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Resync Status : 1% complete Name : localhost.localdomain:0 (local to host localhost.localdomain) UUID : cb9fc584:d4d0022b:6b34263d:f7146f7b Events : 6 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1
シンク中も RIAD デバイス /dev/md0 にデータを書き込むことが出来るので、ext4 でフォーマットします。
# mkfs.ext4 /dev/md0
/var/www/html/ に /dev/md0 をマウントします。
# mount /dev/md0 /var/www/html/ # df -h ファイルシス サイズ 使用 残り 使用% マウント位置 /dev/sda1 51G 1007M 50G 2% / devtmpfs 5.7G 0 5.7G 0% /dev tmpfs 5.7G 0 5.7G 0% /dev/shm tmpfs 5.7G 8.6M 5.7G 1% /run tmpfs 5.7G 0 5.7G 0% /sys/fs/cgroup tmpfs 1.2G 0 1.2G 0% /run/user/1000 /dev/md0 470G 73M 446G 1% /var/www/html <- /var/www/html 配下が RAID化されました。
シンクが完了すると以下のようなステータスになります。
# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[0] sdc1[1] 499975488 blocks super 1.2 [2/2] [UU] bitmap: 0/4 pages [0KB], 65536KB chunk unused devices: <none>
構築してもディスクが壊れた場合、復旧の仕方を知らなければ役に立たないので、普及方法を確認しておきます。
mdadm コマンドで、/dev/sdc1 をエラーにします。
# mdadm --fail /dev/md0 /dev/sdc1
/dev/sdc に障害が発生した事が分かります。
# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[0] sdc1[1](F) 499975488 blocks super 1.2 [2/1] [U_] bitmap: 0/4 pages [0KB], 65536KB chunk unused devices: <none>
/dev/sdc1 を /dev/md0 から着脱します。
# mdadm --remove /dev/md0 /dev/sdc1 mdadm: hot removed /dev/sdc1 from /dev/md0
マシンをシャットダウンして、HDDの交換を行います。
# poweroff
先ほどと同様にパーティションを切り直します。
# fdisk /dev/sdc
/dev/sdc1 を /dev/md0 に追加すると再度シンクが始まり自動復旧されます。
# mdadm --add /dev/md0 /dev/sdc1
HDD は突然壊れます。もしもの時に慌てないように普及方法を試しておきましょう。