概要
このドキュメントは、ソフトウェアRAID1(mdadm)でシステムが稼働中にハードディスクを交換し、再同期させる手順とテスト方法を解説します。例では /dev/sda と /dev/sdb を使い、/dev/sdb が故障した場合を想定しています。手順は次の主要フェーズに分かれます。
- 故障ディスクの切り離し(物理またはソフト)
- 新しいディスクへのパーティションのコピー
- 古いRAIDメタデータの消去
- 新ディスクをRAIDに追加して同期
- 同期完了後にブートローダを両方のディスクにインストール
重要: デバイス名(/dev/sda や /dev/sdb)は環境に依存します。lsblk、blkid、udevadm info 等で確実に実機のデバイスを確認してから操作してください。
準備と前提条件
- root 権限または sudo を持つこと。
- 事前にバックアップがあること(必須とはしないが強く推奨)。
- mdadm がインストールされ設定済みであること。
- 交換用の新しいディスクが用意されていること。
- 再起動や電源オフが許容される保守ウィンドウがあること(必要に応じて)。
重要: 本手順は本番環境での作業を想定しています。操作ミスはデータ損失やブート不能を引き起こす可能性があるため、作業前に必ずデバイス名と現在のRAID状態を確認してください。
テスト手順(故障シミュレーションと復旧)
以下は手順の実際の操作と、ログ/コマンド出力の例を含みます。コマンド部分はそのまま実行可能です。
- 故障ディスクのシミュレーション
どちらのデバイスが故障しても同じ手順です。ここでは /dev/sdb が故障した想定で進めます。物理的に取り外すか、ソフト的にfail/removeします。
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb5
その後必要であればシステムをシャットダウンして物理ディスクを交換します。
shutdown -h now
新しい /dev/sdb を装着してシステムを再起動します(故障が /dev/sda の場合は、/dev/sda の位置に新しいディスクを入れ、古い /dev/sda を /dev/sdb として接続するなどハードウェア仕様に合わせてください)。通常は再起動後もシステムは起動します。
- RAID の状態確認
再起動後、配列が degraded(欠け)になっていることを確認します。
cat /proc/mdstat
(出力例は次の通り)
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[2]
248820 blocks super 1.2 [2/1] [U_]
unused devices:
root@server1:~#
また fdisk -l によるディスクとパーティションの状況も確認します。
fdisk -l
(出力例をドキュメント中に示します。実際の環境に合わせて読み替えてください。)
- パーティションテーブルをコピー
故障したディスクと同等のパーティション構成を新しいディスクに作成します。sfdisk のダンプとリストアで一括コピーできます。
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
出力例(sfdisk は警告を出す場合がありますが、最後に “Successfully wrote the new partition table” と表示されれば正しく書き込まれています)。
- 旧RAIDメタデータの抹消
古いディスクに残っている可能性のある mdadm スーパーブロックをゼロ化します。
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5
- RAID に新ディスクを追加して同期開始
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb5
追加後、同期の進行状況を確認します。
cat /proc/mdstat
(同期中の出力例)
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
[========>…………] recovery = 44.7% (2233024/4989940) finish=0.2min speed=159501K/sec
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
同期が 100% になり [UU] 表示が揃うまで待ちます。
- ブートローダを両方のディスクにインストール
同期後、GRUB を両方のディスクにインストールして、どちらのディスクからでも起動可能にします。
grub-install /dev/sda
grub-install /dev/sdb
これで交換は完了です。
受け入れ基準(Критерии приёмки)
- cat /proc/mdstat の該当配列が [UU] を示し、degraded 表示が消えていること。
- fdisk -l または lsblk で新しいディスクのパーティションが正しく認識されていること。
- システムが両方のディスクから正常に起動できること(片方を外して試験起動する場合はメンテナンスウィンドウ内で実施)。
- ブートローダ(grub)が両方のディスクにインストールされていること。
作業前チェックリスト(管理者向け)
- 事前バックアップを取得した(重要データはスナップショット/バックアップ)。
- 保守ウィンドウを確保した。
- lsblk / blkid でデバイス名を確認した。
- mdadm –detail /dev/mdX で現在のRAID状態を確認した。
- 交換用ディスクの容量が十分であることを確認した。
- 新ディスクが正しいスロットに装着されていることを確認した。
重要: デバイスを間違えると既存データを失います。必ず確認ダブルチェックを行ってください。
トラブルシューティングとよくあるケース
- sfdisk エラー: “sector 0 does not have an msdos signature”
- これはターゲットディスクに既存の不正なシグネチャがあるか、パーティションテーブルが空でない場合に出ます。sfdisk の出力に続いて新しいパーティションが表示され、”Successfully wrote the new partition table” と出れば問題ありません。
- もしパーティションが作成できない場合は、gdisk や parted、あるいは dd を使って先頭セクタをクリアしてから再試行します。
例:
dd if=/dev/zero of=/dev/sdb bs=512 count=2048
(注意: この操作はデータを完全に消します。対象デバイスを再確認のうえ実行してください。)
- mdadm –add が受け付けない、または自動で同期しない
- パーティションの type が fd(Linux raid autodetect)になっているか確認する。
- mdadm –examine /dev/sdb1 でスーパーブロックが残っていないか確認し、残っている場合は –zero-superblock を再実行する。
- パーティション開始オフセットが既存と一致しているか確認する(sfdisk のコピーで整合性が取れるはず)。
- 同期が非常に遅い、あるいは停止する
- I/O 負荷やディスクの健康状態(SMART)を確認する。
- 速度は使用しているディスク性能、バス(SATA, SAS)、または負荷によって大きく変わる。speed 表示で目安を確認する。
- 必要ならば –write-mostly や –resync-window などの mdadm オプション調整を検討する。
- ブートできない(grub インストール失敗)
- grub-install の出力を確認し、エラーがあれば /boot のマウント状態、EFI/BIOS モード(UEFI vs BIOS)を確認する。
- UEFI 環境では efibootmgr と EFI パーティションのマウントが必要。
代替アプローチと拡張オプション
- パーティションのコピーに sfdisk の代わりに sgdisk(GPT 環境)や parted を使用する。GPT ディスクでは sfdisk は適切でない場合がある。
- ホットスワップに対応したシャーシなら物理交換をしつつ mdadm で即時追加可能。
- ディスクを交換する前に mdadm –fail で明示的に故障扱いにし、–remove してから物理的に抜くことで安全性を高める。
- 代替の冗長化戦略として RAID6 や分散ストレージ(Ceph、Gluster)を検討する(要件による)。
ミニSOP(ステップごと)
- 事前確認: lsblk, mdadm –detail /dev/mdX, df -h
- 故障ディスクの切り離し: mdadm –manage –fail, –remove
- 交換ディスク取り付け
- パーティションコピー: sfdisk -d /dev/sda | sfdisk –force /dev/sdb
- スーパーブロック削除: mdadm –zero-superblock /dev/sdb*
- RAID に追加: mdadm -a /dev/mdX /dev/sdbY
- 同期完了を待つ: watch cat /proc/mdstat
- grub-install /dev/sda && grub-install /dev/sdb
- 動作検証とログ確認
役割別チェックリスト
システム管理者(実行役)
- デバイス名を確認し、コマンドを実行する。
- 同期状況を監視し、エラー発生時に即時報告する。
オペレーション(調整役)
- メンテナンスウィンドウを管理し、影響範囲を通知する。
- 必要に応じてシステムを一時的に停止する決定を下す。
セキュリティ/監査
- 交換記録(誰が、いつ、何を交換したか)をログに残す。
リスクと軽減
誤ったデバイス操作によるデータ消失
- 軽減: lsblk, blkid で二重確認。作業者を複数にしてクロスチェック。
同期中のさらに別ディスク障害
- 軽減: 可能な限り保守ウィンドウ外で行い、バックアップを保持。重要システムは RAID6 等を検討。
ブート失敗
- 軽減: grub を両方のディスクに必ずインストールし、起動テストを行う。
1行用語集
- RAID1: 2台以上のディスクに同じデータを保持するミラーリング方式。
- mdadm: Linux のソフトウェアRAID 管理ツール。
- sfdisk: MBRパーティションテーブルのダンプ・復元ツール。
- スーパーブロック: mdadm がディスク上に書くメタデータ領域。
まとめ
本手順では故障ディスクの安全な切り離しから、新ディスクへのパーティションコピー、mdadm による再追加と同期、最後に GRUB を両ディスクへインストールして起動冗長性を回復するまでを扱いました。操作前にデバイス名の確認とバックアップを必ず行ってください。
参考リンク
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Debian: http://www.debian.org/