テクノロジーガイド

RAID1で故障したHDDを交換して再同期する手順

1 min read システム管理 更新されました 30 Sep 2025
RAID1で故障HDDを交換し同期する手順
RAID1で故障HDDを交換し同期する手順

前提条件

  • 対象はLinuxのソフトウェアRAID(mdadm)で構築されたRAID1アレイです。
  • この記事では例として /dev/sdb が故障した想定で手順を説明しますが、/dev/sdaが故障した場合はデバイス名を入れ替えてください。
  • 重要なデータは事前にバックアップしてください。

テスト: HDD故障のシミュレーション

まずは故障をシミュレートします。実際の取り外しを行うか、ソフト的に取り外す場合は次のコマンドを実行します。

mdadm --manage /dev/md0 --fail /dev/sdb1  
mdadm --manage /dev/md1 --fail /dev/sdb2

残骸を取り除きます:

mdadm --manage /dev/md0 --remove /dev/sdb1  
mdadm --manage /dev/md1 --remove /dev/sdb2

システムをシャットダウンして物理的にディスクを交換する場合:

shutdown -h now

(/dev/sdaを故障と想定している場合は、/dev/sdaの位置に新しいディスクを装着して/dev/sdbとして接続しないよう注意してください。常にデバイス名を確認すること。)

システム起動後に次を確認します:

cat /proc/mdstat

例(省略なしの出力はそのまま表示されます):

[root@server1 ~]# cat /proc/mdstat  
Personalities : [raid1] [raid6] [raid5] [raid4]  
md0 : active raid1 sda1[0]  
      200704 blocks [2/1] [U_]  
  
md1 : active raid1 sda2[0]  
      5036288 blocks [2/1] [U_]  
  
unused devices:   
[root@server1 ~]#

fdisk出力の例(確認用):

[root@server1 ~]# fdisk -l  
  
Disk /dev/sda: 5368 MB, 5368709120 bytes  
255 heads, 63 sectors/track, 652 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x0008b885  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sda1   *           1          25      200781   fd  Linux raid autodetect  
/dev/sda2             26         652     5036377+  fd  Linux raid autodetect  
  
Disk /dev/sdb: 5368 MB, 5368709120 bytes  
255 heads, 63 sectors/track, 652 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/sdb doesn't contain a valid partition table  
  
Disk /dev/md1: 5157 MB, 5157158912 bytes  
2 heads, 4 sectors/track, 1259072 cylinders  
Units = cylinders of 8 * 512 = 4096 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/md1 doesn't contain a valid partition table  
  
Disk /dev/dm-0: 4462 MB, 4462739456 bytes  
255 heads, 63 sectors/track, 542 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/dm-0 doesn't contain a valid partition table  
  
Disk /dev/dm-1: 637 MB, 637534208 bytes  
255 heads, 63 sectors/track, 77 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x30307800  
  
Disk /dev/dm-1 doesn't contain a valid partition table  
  
Disk /dev/md0: 205 MB, 205520896 bytes  
2 heads, 4 sectors/track, 50176 cylinders  
Units = cylinders of 8 * 512 = 4096 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/md0 doesn't contain a valid partition table  
[root@server1 ~]#

パーティションテーブルをコピーする

故障したディスクの代わりに新しいディスクを接続したら、/dev/sda のパーティションテーブルを /dev/sdb にコピーします。

sfdisk -d /dev/sda | sfdisk /dev/sdb

エラーが出る場合は –force オプションを試します:

sfdisk -d /dev/sda | sfdisk --force /dev/sdb

出力例(成功例):

[root@server1 #] sfdisk -d /dev/sda | sfdisk /dev/sdb  
Checking that no-one is using this disk right now ...  
OK  
  
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track  
  
sfdisk: ERROR: sector 0 does not have an msdos signature  
 /dev/sdb: unrecognized partition table type  
Old situation:  
No partitions found  
New situation:  
Units = sectors of 512 bytes, counting from 0  
  
   Device Boot    Start       End   #sectors  Id  System  
/dev/sdb1   *        63    401624     401562  fd  Linux raid autodetect  
/dev/sdb2        401625  10474379   10072755  fd  Linux raid autodetect  
/dev/sdb3             0         -          0   0  Empty  
/dev/sdb4             0         -          0   0  Empty  
Successfully wrote the new partition table  
  
Re-reading the partition table ...  
  
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)  
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1  
(See fdisk(8).)  
[root@server1 ~]#

既存のRAID情報をクリアして再追加する

古いスーパーブロック情報を消去します:

mdadm --zero-superblock /dev/sdb1  
mdadm --zero-superblock /dev/sdb2

そして新ディスクをRAIDに追加します:

mdadm -a /dev/md0 /dev/sdb1  
mdadm -a /dev/md1 /dev/sdb2

進行状況を確認:

cat /proc/mdstat

同期中の例:

[root@server1 ~]# cat /proc/mdstat  
Personalities : [raid1] [raid6] [raid5] [raid4]  
md0 : active raid1 sdb1[1] sda1[0]  
      200704 blocks [2/2] [UU]  
  
md1 : active raid1 sdb2[2] sda2[0]  
      5036288 blocks [2/1] [U_]  
      [=====>...............]  recovery = 29.8% (1502656/5036288) finish=18.8min speed=3116K/sec  
  
unused devices:   
[root@server1 ~]#

同期が完了するまで待ちます。

[root@server1 ~]# cat /proc/mdstat  
Personalities : [raid1] [raid6] [raid5] [raid4]  
md0 : active raid1 sdb1[1] sda1[0]  
      200704 blocks [2/2] [UU]  
  
md1 : active raid1 sdb2[1] sda2[0]  
      5036288 blocks [2/2] [UU]  
  
unused devices:   
[root@server1 ~]#

ブートローダを両方のHDDにインストールする

同期完了後、GRUBを両方のディスクにインストールしてブート可能にします。grubコマンドを起動して次を順に実行します:

grub

grubプロンプト内で:

root (hd0,0)  
setup (hd0)  
root (hd1,0)  
setup (hd1)  
quit

これでRAID1の故障ディスク交換と再同期は完了です。

重要な注意点

  • デバイス名(/dev/sda, /dev/sdb)は環境により変わるため、必ずlsblkやblkidで確認してください。誤ったディスクに操作するとデータ消失の危険があります。
  • 新ディスクの容量が元のディスクより小さいとパーティションを正常に作成できません。容量を確認してください。
  • 本番環境では可能な限りホットスワップや冗長なバックアップを準備してください。

トラブルケースと対処(いつうまくいかないか)

  • sfdiskでエラーが出てパーティションを書き込めない: –force を試す。さらに失敗する場合は parted や sgdisk を使って手動でパーティションを作成する。
  • mdadmが新ディスクを受け付けない: mdadm --examine /dev/sdb1 でスーパーブロックを確認し、必要なら mdadm --zero-superblock を使って消去する。
  • 同期が遅すぎる/止まる: I/O負荷やケーブル不良、ディスクの不調が原因のことがある。dmesgやsmartctlでハードウェアログを確認する。

代替アプローチ

  • パーティションを手動で作成してからsfdiskではなく dd でMBRをコピーする(注意: GPTや大容量ディスクでは注意が必要)。
  • 完全なバックアップからリストアして再構築する(RAID以外の方法で復旧する場合)。
  • LVM上に構築されたRAIDなど、構成に応じた特別手順を用いる。

ミニ手順(短いチェックリスト)

  1. lsblk, blkidでディスク構成を確認する。
  2. mdadmで障害をシミュレーションまたは物理的にディスクを取り外す。
  3. 新ディスクを接続し、sfdiskでパーティションをコピー。
  4. mdadm –zero-superblock で古い情報を消去。
  5. mdadm -a でRAIDに追加し、/proc/mdstatで同期を監視。
  6. 同期完了後、GRUBを両ディスクにインストール。
  7. 再起動して正常にブートすることを確認。

役割別チェックリスト

  • システム管理者: 事前バックアップ、メンテナンスウィンドウ設定、全コマンドの実行とログ取得。
  • オペレーター: ケーブル交換やディスクの差し替え、コンソール出力の監視、進捗報告。

コマンドチートシート

  • RAID確認: cat /proc/mdstat
  • パーティションコピー: sfdisk -d /dev/sda | sfdisk /dev/sdb
  • スーパーブロック消去: mdadm –zero-superblock /dev/sdb1
  • RAID追加: mdadm -a /dev/md0 /dev/sdb1
  • GRUBインストール: grub → root / setup / quit

1行用語集

  • mdadm: ソフトウェアRAIDを管理するツール。
  • /proc/mdstat: カーネルが管理するRAIDの状態情報。
  • sfdisk: パーティションテーブルのバックアップ/復元ツール。
  • GRUB: ブートローダ。

終わりに(要点まとめ)

RAID1のディスク交換は手順に従えば比較的直線的に行えますが、常にデバイス名と容量を確認し、バックアップとログ取得を怠らないでください。今回示したコマンドとチェックリストを用いれば、安全に故障ディスクの交換とRAID再同期が行えます。

リンク

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

iPhoneでNFCを使う方法と設定ガイド
モバイル

iPhoneでNFCを使う方法と設定ガイド

iPhoneを高速化する方法と実践チェックリスト
スマートフォン

iPhoneを高速化する方法と実践チェックリスト

iPhoneでアプリをブロックする方法と実務チェックリスト
モバイル

iPhoneでアプリをブロックする方法と実務チェックリスト

Instagramでいいねした投稿を見る方法(Android/iOS/PC)
Instagram

Instagramでいいねした投稿を見る方法(Android/iOS/PC)

ミニPCの選び方ガイド:用途別の最適な選択
ハードウェア

ミニPCの選び方ガイド:用途別の最適な選択

Instagramで「いいね」した投稿を見る方法
How-to

Instagramで「いいね」した投稿を見る方法