自宅サーバーのRAID1HDDの片方が壊れたので復旧。

備忘録としてコマンドログを。環境によってデバイス名や数値が違ってくるのでこのままやるのはとても危険なので注意。
640GBだったけど、今の時代はそんなHDDが簡単に手に入らない上にコスパが悪いので1TBで代用。

[root@localhost ~]# fdisk -l 

Disk /dev/sda: 640.1 GB, 640135028736 bytes
255 heads, 63 sectors/track, 77825 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   fd  Linux raid 自動検出
/dev/sda2              14       77695   623980665   fd  Linux raid 自動検出
/dev/sda3           77696       77825     1044225   fd  Linux raid 自動検出

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

ディスク /dev/sdb は正常な領域テーブルを含んでいません

Disk /dev/md2: 638.9 GB, 638956077056 bytes
2 heads, 4 sectors/track, 155995136 cylinders
Units = シリンダ数 of 8 * 512 = 4096 bytes

ディスク /dev/md2 は正常な領域テーブルを含んでいません

Disk /dev/md1: 1069 MB, 1069219840 bytes
2 heads, 4 sectors/track, 261040 cylinders
Units = シリンダ数 of 8 * 512 = 4096 bytes

ディスク /dev/md1 は正常な領域テーブルを含んでいません

Disk /dev/md0: 106 MB, 106823680 bytes
2 heads, 4 sectors/track, 26080 cylinders
Units = シリンダ数 of 8 * 512 = 4096 bytes

ディスク /dev/md0 は正常な領域テーブルを含んでいません
[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sda1[0]
      104320 blocks [2/1] [U_]
      
md1 : active raid1 sda3[0]
      1044160 blocks [2/1] [U_]
      
md2 : active raid1 sda2[0]
      623980544 blocks [2/1] [U_]
      
unused devices: 
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

ディスク /dev/sdb は正常な領域テーブルを含んでいません
[root@localhost ~]# fdisk /dev/sdb
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 121601 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-121601, default 1): 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-121601, default 121601): 13

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (14-121601, default 14): 14
終点 シリンダ または +サイズ または +サイズM または +サイズK (14-121601, default 121601): 77695

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 3
最初 シリンダ (77696-121601, default 77696): 77696
終点 シリンダ または +サイズ または +サイズM または +サイズK (77696-121601, default 121601): 77825

コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): 2
2: 不明なコマンド
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   領域を削除する
   l   既知の領域タイプをリスト表示する
   m   このメニューを表示する
   n   新たに領域を作成する
   o   新たに空の DOS 領域テーブルを作成する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   領域のシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

コマンド (m でヘルプ): t
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 2 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): t
領域番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 3 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@localhost ~]# fdisk -l /dev/sdb

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          13      104391   fd  Linux raid 自動検出
/dev/sdb2              14       77695   623980665   fd  Linux raid 自動検出
/dev/sdb3           77696       77825     1044225   fd  Linux raid 自動検出

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sda1[0]
      104320 blocks [2/1] [U_]
      
md1 : active raid1 sda3[0]
      1044160 blocks [2/1] [U_]
      
md2 : active raid1 sda2[0]
      623980544 blocks [2/1] [U_]
      
unused devices: 
[root@localhost ~]# mdadm /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
[root@localhost ~]# mdadm /dev/md1 --add /dev/sdb3
mdadm: added /dev/sdb3
[root@localhost ~]# mdadm /dev/md2 --add /dev/sdb2
mdadm: added /dev/sdb2

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb1[1] sda1[0]
      104320 blocks [2/2] [UU]
      
md1 : active raid1 sdb3[1] sda3[0]
      1044160 blocks [2/2] [UU]
      
md2 : active raid1 sdb2[2] sda2[0]
      623980544 blocks [2/1] [U_]
      [>....................]  recovery =  0.2% (1844032/623980544) finish=538.8min speed=19243K/sec
      
unused devices: 

同期が完了すれば作業完了。

[追記]
同期完了後、sdbにはgrubが入っていないのでsdaがイカれるとにっちもさっちもいかなくなるので、インストールしておく。
参考記事:https://www.miraclelinux.com/technet/faq/data/00080.html