RAID1で故障したディスクを置換し、同期を完了してブートローダーを再インストールする手順です。mdadmでデバイスをfail/removeし、パーティションをsfdiskでコピーし、mdadmで再追加して同期完了を確認します。
前提条件
- 対象はソフトウェアRAID1です。mdadmコマンドに慣れていることを想定します。
- ここでは例として /dev/sdb が故障した想定です。/dev/sda が故障する場合はデバイス名を入れ替えて読んでください。
重要: 実機で操作する前に、可能ならテスト環境で手順を確認してください。誤操作でデータを失う可能性があります。
故障をシミュレーションする
任意の方法で故障を再現できます。電源を落として物理的にディスクを抜くか、ソフト的にデバイスを失効させます。例:
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb2
mdadm --manage /dev/md2 --fail /dev/sdb3
続けて取り外しを指示します:
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm --manage /dev/md2 --remove /dev/sdb3
システムをシャットダウンします:
shutdown -h now
故障ディスクの代わりに新しいHDDを装着し、システムを起動します。システムは通常通り起動するはずです。
配列の状態を確認する
起動後、配列がデグレードしていることを確認します:
cat /proc/mdstat
期待される出力の例:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
513984 blocks [2/1] [U_]
md2 : active raid1 sda3[0]
4618560 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
また fdisk -l で新しいディスクがパーティションテーブルを持たないことを確認できます。例:
fdisk -l
(出力は元の例参照)
パーティションテーブルをコピーする
故障していないディスク(例: /dev/sda)のパーティションテーブルを新しいディスク(/dev/sdb)に複製します:
sfdisk -d /dev/sda | sfdisk /dev/sdb
エラーが出る場合は –force オプションを試します:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
成功すると、新しいディスクに同じパーティション構成が書き込まれます。
古いRAID情報を消去して再追加する
新ディスクの各パーティションに残っている可能性のあるスーパーブロック情報を消します:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb2
mdadm --zero-superblock /dev/sdb3
その後、各mdデバイスに新しいパーティションを追加します:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
mdadm -a /dev/md2 /dev/sdb3
同期の監視
同期中は /proc/mdstat を監視します:
cat /proc/mdstat
同期が進行中の例:
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid1 sdb1[1] sda1[0]
104320 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
513984 blocks [2/2] [UU]
md2 : active raid1 sdb3[2] sda3[0]
4618560 blocks [2/1] [U_]
[===>.................] recovery = 15.4% (715584/4618560) finish=4.9min speed=13222K/sec
unused devices:
[root@server1 ~]#
完了後は全て [UU] になっていることを確認します。
ブートローダーの再インストール
必要ならGRUBを両方のディスクにインストールします。grubコマンドで対話的に作業する例:
grub
grubプロンプトで:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
これで両方のディスクから起動可能になります。
確認と後片付け
- 再起動して問題なく起動することを確認します。
- mdadm –detail /dev/mdX で各アレイの状態を確認します。
- 監視ツールや通知設定がある場合は、復旧完了をトリガーしておきます。
トラブルシューティングのポイント
- sfdisk の書き込みが失敗する: デバイス名が正しいか、ディスクが完全に接続されているかを確認します。
- 同期が非常に遅い: I/O負荷やケーブル不良、ディスクのSMARTエラーを疑います。
- GRUBがインストールできない: パーティションのブートフラグやファイルシステムの整合性を確認してください。
代替アプローチ
- dd でパーティションの最初のセクタを丸ごとコピーする(注意: リスク高)
- バックアップから復元して再構築する(大容量データや複雑な構成の場合)
- 新規ディスクに手動でパーティションを作成し、mdadm –add で参加させる
ロール別チェックリスト
- システム管理者: デバイス名確認、mdstat監視、GRUB再インストール
- ストレージ担当: ケーブルと電源の物理チェック、SMARTログの確認
- 運用担当: 通知と監視の更新、手順のログ保存
1行用語集
- mdadm: Linux のソフトウェアRAID管理ツール
- sfdisk: パーティションテーブルのダンプ/書き込みを行うツール
- /proc/mdstat: Linuxが管理するRAIDの状態表示ファイル
リンク
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Fedora: http://fedoraproject.org
まとめ
この手順では、RAID1で故障したディスクを安全に置換し、パーティションを複製してmdadmで再追加、同期完了後にGRUBを両ディスクへ再インストールします。同期を必ず監視し、問題があればログやディスクヘルスを確認してください。