複数のハードディスクをまとめて1台のハードディスクとして管理し、高速化や安全性の向上を図る技術。
Linuxにはkernel2.4からソフトウエアRAIDが搭載されている。
このサイトでは、稼働中の既存ディスク(hda)と同じ容量の新しいディスク(hdc)を使って、RAID 1(ミラーリング)を構築した。
※RAID構築作業は、rescueディスクを用意し、システムのバックアップを取ってから行ってください。
以下は、raidtoosを使用、ブートローダがliloのときの構築方法です。
# /sbin/fdisk /dev/hda Disk /dev/hda: 10.2 GB, 10242892800 bytes 255 heads, 63 sectors/track, 1245 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス ブート 始点 終点 ブロック ID システム /dev/hda1 * 1 8 64228+ 83 Linux /dev/hda2 9 530 4192965 83 Linux /dev/hda3 531 563 265072+ 82 Linux スワップ /dev/hda4 564 1245 5478165 f Win95 拡張領域 (LBA) /dev/hda5 564 1245 5478133+ 83 Linux # df ファイルシステム 1k-ブロック 使用中 空き 使用% マウント場所 /dev/hda2 4127108 1312340 2605120 34% / /dev/hda1 62193 10855 48127 19% /boot /dev/hda5 5392052 182560 4935588 4% /home none 61068 0 61068 0% /dev/shm
既存のディスクと同じ構成にしますが、ID 83と82はfd(Linux raid自動検出) にします。また、ブートパーティションを忘れずに設定しておきます。
# /sbin/fdisk /dev/hdc このディスクのシリンダ数は 1245 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): m コマンドの動作 a ブート可能フラグをつける b bsd ディスクラベルを編集する c dos 互換フラグをつける d 領域を削除する l 既知の領域タイプをリスト表示する m このメニューを表示する n 新たに領域を作成する o 新たに空の DOS 領域テーブルを作成する p 領域テーブルを表示する q 変更を保存せずに終了する s 空の Sun ディスクラベルを作成する t 領域のシステム ID を変更する u 表示/項目ユニットを変更する v 領域テーブルを照合する w テーブルをディスクに書き込み、終了する x 特別な機能 (エキスパート専用) コマンド (m でヘルプ): 〜以下省略〜
# vi /etc/raidtab raiddev /dev/md1 ← RAIDデバイスファイル名 raid-level 1 ← RAIDレベル nr-raid-disks 2 ← 使用するディスク数 nr-spare-disks 0 ← 故障時の予備ディスク数 chunk-size 4 ← 書き込み最小データ単位(KB) persistent-superblock 1 ← システムのブート時にRAIDデバイスを自動検出させる device /dev/hdc1 ← RAIDを構成するデバイス(新ディスク) raid-disk 0 ← deviceパラメータディスク番号 device /dev/hda1 ← RAIDを構成するデバイス(既存ディスク) failed-disk 1 ← 既存ディスクを壊さないようにする raiddev /dev/md2 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/hdc2 raid-disk 0 device /dev/hda2 failed-disk 1 raiddev /dev/md3 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/hdc3 raid-disk 0 device /dev/hda3 failed-disk 1 raiddev /dev/md5 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 chunk-size 4 persistent-superblock 1 device /dev/hdc5 raid-disk 0 device /dev/hda5 failed-disk 1
# /sbin/init 1 ← シングルユーザーモードへ移行 # /sbin/mkraid /dev/md1 # /sbin/mkraid /dev/md2 # /sbin/mkraid /dev/md3 # /sbin/mkraid /dev/md5 mkraid: aborted.となる場合は、次のようにしてみる。 # /sbin/mkraid --really-force /dev/md1 # /sbin/mkraid --really-force /dev/md2 # /sbin/mkraid --really-force /dev/md3 # /sbin/mkraid --really-force /dev/md5 # cat /proc/mdstatでRAID稼動状態を確認 新しいディスクがRAID化され、[2/1] [U_]となっていればOK
# /sbin/mkfs.ext3 /dev/md1 # /sbin/mkfs.ext3 /dev/md2 # /sbin/mkswap -c /dev/md3 # /sbin/mkfs.ext3 /dev/md5 # /sbin/tune2fs -c -1 /dev/md1 # /sbin/tune2fs -c -1 /dev/md2 # /sbin/tune2fs -c -1 /dev/md5
# mkdir /1 # mkdir /2 # mkdir /5 # /bin/mount /dev/md1 /1 # /bin/mount /dev/md2 /2 # /bin/mount /dev/md5 /5 (hda1のコピー) # cp -a /boot/* /1/ (hda2のコピー) # mkdir /2/bin /2/dev /2/etc /2/initrd /2/lib /2/misc /2/opt /2/proc /2/root /2/sbin /2/tmp /2/usr /2/var /2/mnt /2/boot /2/home ※作成したディレクトリのパーミッションが既存ディスクと同じかどうか確認しておくこと。 # cd /bin; find . -xdev | cpio -pm /2/bin # cd /dev; find . -xdev | cpio -pm /2/dev # cd /etc; find . -xdev | cpio -pm /2/etc # cd /initrd; find . -xdev | cpio -pm /2/initrd # cd /lib; find . -xdev | cpio -pm /2/lib # cd /misc; find . -xdev | cpio -pm /2/misc # cd /opt; find . -xdev | cpio -pm /2/opt # cd /root; find . -xdev | cpio -pm /2/root # cd /sbin; find . -xdev | cpio -pm /2/sbin # cd /tmp; find . -xdev | cpio -pm /2/tmp # cd /usr; find . -xdev | cpio -pm /2/usr # cd /var; find . -xdev | cpio -pm /2/var (hda5のコピー) # cp -a /home/* /5/
# uname -a Linux ****** 2.4.33-0vl0.5 #1 Thu Sep 7 07:05:34 JST 2006 i586 unknown # /sbin/mkinitrd -f --with=raid1 /1/initrd-2.4.33-0vl0.5.raid.img 2.4.33-0vl0.5 # /sbin/mkinitrd -f --with=raid1 /boot/initrd-2.4.33-0vl0.5.raid.img 2.4.33-0vl0.5
# vi /2/etc/fstab /dev/md2 / ext3 defaults 1 1 /dev/md1 /boot ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 /dev/md5 /home ext3 defaults 1 2 /dev/md3 swap swap defaults 0 0
以下を追加し、既存のディスクからRAIDで起動できるようにする。
# vi /etc/lilo.conf
image=/boot/vmlinuz-2.4.33-0vl0.5
label=linuxRaid
initrd=/boot/initrd-2.4.33-0vl0.5.raid.img
read-only
root=/dev/md2
append=" resume2=swap:/dev/md3"
# /sbin/lilo -v ← 書き込む
# cp /etc/lilo.conf /2/etc/lilo.conf # vi /2/etc/lilo.conf boot=/dev/hdaをhdcに変更して保存する。 # /sbin/lilo -v -C /2/etc/lilo.conf
システムを再起動させ、メニューからlinuxRaidを選択。
次のコマンドなどで動作確認を行う。
# /sbin/swapon -s # cat /proc/mdstat # df # free
その他、システム全体が正しく動作していることを確認します。
# /sbin/fdisk /dev/hda
※新しいディスクと同じパーティションになっていること。 ※ID 83と82をfd(Linux raid自動起動)にする。
# vi /etc/raidtab failed-diskをraid-diskに変更する
# /sbin/raidhotadd /dev/md1 /dev/hda1
# /sbin/raidhotadd /dev/md2 /dev/hda2
# /sbin/raidhotadd /dev/md3 /dev/hda3
# /sbin/raidhotadd /dev/md5 /dev/hda5
# cat /proc/mdstat ← 進行状況の確認
同期が終わると次のような表示になります。
Personalities : [raid1]
read_ahead 1024 sectors
md5 : active raid1 hda5[1] hdc5[0]
5478016 blocks [2/2] [UU]
md3 : active raid1 hda3[1] hdc3[0]
264960 blocks [2/2] [UU]
md2 : active raid1 hda2[1] hdc2[0]
4192896 blocks [2/2] [UU]
md1 : active raid1 hda1[1] hdc1[0]
64128 blocks [2/2] [UU]