要点
この手順では、RAID1アレイで故障したハードディスクを取り外し、新しいディスクへ交換して再同期するまでの一連の操作を示します。重要なコマンドはそのまま記載しているので、手順に沿って実行してください。
概要
RAID1はミラーリングによる冗長化方式です。ここでは /dev/hda を正常、/dev/hdb を故障として想定し、/dev/hdb を取り外して新しいディスクを入れ、パーティションテーブルの複製、superblock の消去、アレイへの再追加、同期(recovery)を行います。
重要:実際の環境で操作する前に必ずバックアップを取り、該当サーバーの管理コンソールやシリアルコンソールで作業することを推奨します。
テスト手順(故障ディスクのシミュレーション)
どちらのディスクを故障させるかは問いませんが、この例では /dev/hdb が故障した想定です。物理的に取り外すか、ソフト的に以下で(フェイル→リムーブ)シミュレートします:
mdadm --manage /dev/md0 --fail /dev/hdb1
mdadm --manage /dev/md1 --fail /dev/hdb5
mdadm --manage /dev/md2 --fail /dev/hdb6
mdadm --manage /dev/md0 --remove /dev/hdb1
mdadm --manage /dev/md1 --remove /dev/hdb5
mdadm --manage /dev/md2 --remove /dev/hdb6
その後システムを停止します:
shutdown -h now
交換する新しいディスクを投入(物理交換)してから再起動します。システムは通常通り起動するはずです。
状態確認(劣化したアレイの確認)
起動後、以下でアレイの状態を確認します:
cat /proc/mdstat
期待される出力例(劣化状態):
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda5[0]
417536 blocks [2/1] [U_]
md0 : active raid1 hda1[0]
176576 blocks [2/1] [U_]
md2 : active raid1 hda6[0]
4642688 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
またパーティション情報は以下で確認します:
fdisk -l
出力例(/dev/hdb にパーティションテーブルが無い状態)を参照してください。
パーティションテーブルの複製
正常なディスク(ここでは /dev/hda)から新しいディスク(/dev/hdb)へパーティションテーブルをコピーします:
sfdisk -d /dev/hda | sfdisk --force /dev/hdb
成功すると新しいパーティションテーブルが書き込まれます。警告メッセージ(シリンダ境界など)は表示されますが、出力をよく確認してください。
既存のRAID情報の消去とアレイへ追加
以前のRAID情報(superblock)が残っている場合はゼロ化します:
mdadm --zero-superblock /dev/hdb1
mdadm --zero-superblock /dev/hdb5
mdadm --zero-superblock /dev/hdb6
その後、新しいディスクをアレイに追加します:
mdadm -a /dev/md0 /dev/hdb1
mdadm -a /dev/md1 /dev/hdb5
mdadm -a /dev/md2 /dev/hdb6
追加直後は再同期(recovery)が始まります。状態確認は以下:
cat /proc/mdstat
出力例(同期中):
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdb5[2] hda5[0]
417536 blocks [2/1] [U_]
resync=DELAYED
md0 : active raid1 hdb1[1] hda1[0]
176576 blocks [2/2] [UU]
md2 : active raid1 hdb6[2] hda6[0]
4642688 blocks [2/1] [U_]
[===========>.........] recovery = 59.9% (2784512/4642688) finish=7.5min speed=4076K/sec
unused devices:
[root@server1 ~]#
同期が完了して [UU] になれば正常です。
ブートローダの再インストール
必要に応じて両方の物理ディスクに GRUB をインストールします(例は古いGRUBの対話例):
grub
対話操作例:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
BIOS/UEFI 環境やディストリによって手順は異なります。UEFI 環境では grub-install を使うなど適切な方法を選択してください。
受け入れ基準
- /proc/mdstat で各 md デバイスが [UU] の状態になっていること。
- fdisk -l で新しいディスクに正しいパーティションが存在すること。
- システムが再起動後に正しく起動すること(必要に応じて両ディスクへブートローダを配置)。
トラブルシューティングとロールバック
- 再同期が進まない/非常に遅い:I/O 負荷や不良セクタの可能性を確認。smartctl で SMART 情報を確認。
- sfdisk がエラーを出す:手動で fdisk/gdisk を使って同等のパーティションを作成し、開始/終了セクタを合わせる。
- 意図せず元のディスクを誤って操作した場合:作業を即刻止め、バックアップから復旧する手順を用意しておく。
ロールバック指針:アレイに新しいディスクを追加する前に元のディスクバックアップ(ブロックイメージ)を取っておくと安全です。
代替アプローチ
- パーティションをコピーせずに、新ディスクに手動で同一レイアウトを作成する方法。
- mdadm の –add 前に dd で先頭セクタをコピーしておく(旧環境との互換性確保)。
- LVM やファイルシステムレベルでのミラーリングを使う方法(用途によってはより柔軟)。
役割別チェックリスト(例)
- システム管理者:作業前バックアップ、メンテナンスウィンドウの確保、root 権限での実行。
- オペレーター:ディスクの物理交換、ケーブル確認、LED 状態の記録。
- QA/監査担当:同期完了ログの保存、メンテナンス完了報告。
用語(1行定義)
- mdadm:Linux のソフトウェアRAIDを管理するコマンドラインツール。
- superblock:mdadm がディスク上に保存するRAIDメタデータ。
- 再同期(recovery/resync):ミラー間のデータを一致させる処理。
重要な注意点
- 実運用では作業前に必ずデータのバックアップを取り、メンテナンスウィンドウを確保してください。
- BIOS/UEFI の違い、GRUB バージョン、ディストリによってブートローダの手順は変わります。環境に合わせて手順を調整してください。
参考リンク
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Mandriva: http://www.mandriva.com
まとめ
RAID1 の故障ディスク交換は、パーティションテーブルの複製、superblock の消去、アレイへの追加、再同期、必要ならブートローダの再インストール、という流れで行います。作業前のバックアップと同期完了の確認を必ず行ってください。