シングルドライブをソフトウェアRAID1に移行する
データはそのままでミラーリングに移行する簡単な方法です、シングルドライブで運用中のHDDをソフトウェアRAID1を使って冗長化してみます。


(はじめに)
必ずバックアップをとってから作業してください。動作を確認した環境はCentOS5.5で、160GBのHDDを2つ使用しています。


(シングルドライブの状態確認)
シングルドライブで運用中のドライブをdfコマンドで確認しておきます。
# df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/hdc1 157566568 198632 149363956 1% /mnt/mdtest
/mnt/mdtestにhdc1をマウントしています。
(HDDのシステムタイプ変更)
hdc1をアンマウントし、fdiskでHDDのシステムタイプを変更します。
# umount /dev/hdc1 # fdisk /dev/hdc コマンド (m でヘルプ): p Disk /dev/hdc: 163.9 GB, 163928604672 bytes 255 heads, 63 sectors/track, 19929 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdc1 1 19929 160079661 83 Linux コマンド (m でヘルプ): t Selected partition 1 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): p Disk /dev/hdc: 163.9 GB, 163928604672 bytes 255 heads, 63 sectors/track, 19929 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdc1 1 19929 160079661 fd Linux raid 自動検出 コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。
fdiskの「t」コマンドでHDDのシステムタイプを0x83のLinuxから0xfdのLinux raidに変更します。
(ミラーリング用ディスクを用意する)
別のディスクを用意し、fdiskで同じ容量、タイプに設定します。
# fdisk /dev/hdd コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-19929, default 1): Using default value 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-19929, default 19929): Using default value 19929 コマンド (m でヘルプ): p Disk /dev/hdd: 163.9 GB, 163928604672 bytes 255 heads, 63 sectors/track, 19929 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdd1 1 19929 160079661 83 Linux コマンド (m でヘルプ): t Selected partition 1 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): p Disk /dev/hdd: 163.9 GB, 163928604672 bytes 255 heads, 63 sectors/track, 19929 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/hdd1 1 19929 160079661 fd Linux raid 自動検出 コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。

(RAIDデバイスの作成)
mdadmコマンドでRAIDデバイスを作成します。
# /sbin/mdadm -C -l1 /dev/md0 -n2 /dev/hdc1 /dev/hdd1 mdadm: /dev/hdc1 appears to contain an ext2fs file system size=160079660K mtime=Tue Dec 14 16:20:36 2010 mdadm: /dev/hdd1 appears to contain an ext2fs file system size=156248064K mtime=Tue Dec 14 15:36:42 2010 mdadm: /dev/hdd1 appears to be part of a raid array: level=raid1 devices=2 ctime=Tue Dec 14 16:00:25 2010 Continue creating array? y mdadm: array /dev/md0 started.
コマンドオプション-Cは作成、-l1はRAIDレベル1、-n2はHDD2台という意味です。

作成した/dev/md0の状態を確認します。 cat /proc/mdstat かmdadm -D /dev/md0で確認できます。

# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdd1[1] hdc1[0] 160079552 blocks [2/2] [UU] [>....................] resync = 1.1% (1878784/160079552) finish=44.9min speed=58712K/sec unused devices:

(ミラーリング完成)
しばらく時間がかかりますが、リビルド完了後の状態です。
# /sbin/mdadm -D /dev/md0 /dev/md0: Version : 0.90 Creation Time : Tue Dec 14 16:36:29 2010 Raid Level : raid1 Array Size : 160079552 (152.66 GiB 163.92 GB) Used Dev Size : 160079552 (152.66 GiB 163.92 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Dec 14 17:35:09 2010 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 92dfa8c5:111c80f7:62e79e1e:90e57eb8 Events : 0.2 Number Major Minor RaidDevice State 0 22 1 0 active sync /dev/hdc1 1 22 65 1 active sync /dev/hdd1
マウントしてdfコマンドで状態を見てみると、最初の/dev/hdc1と同じ容量になっていることが確認できます。ちなみに中身のファイルも問題ありません でした。
# mount /dev/md0 /mnt/mdtest/ Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/md0 157566568 198632 149363956 1% /mnt/mdtest

(障害発生時の確認)
障害が発生したと仮定して、元々のディスクを抜いてみます。
# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdd1[1] 160079552 blocks [2/1] [_U] unused devices:
1台で動いていることが確認できます。

抜いていたHDDを元に戻してリビルドして完了です。

# mdadm /dev/md0 -a /dev/hdc1 mdadm: re-added /dev/hdc1 # cat /proc/mdstat Personalities : [raid1] md0 : active raid1 hdc1[0] hdd1[1] 160079552 blocks [2/1] [_U] [>....................] recovery = 0.2% (458496/160079552) finish=46.4min speed=57312K/sec unused devices:
Dec. 2010
Linux,POSIX,BSD,UNIX,gcc,gdb,コマンド,プログラミング,サーバー,ネットワーク,ソースコード,デバッグ,パケットキャプチャ