mdadm で作成した RAID が壊れたときの修復方法
/dev/sdb が壊れたのなら、ハードディスクを交換すれば問題なく起動してRAIDの再構築ができそうだが、今回は壊れたのが、sda なので、下手するとブートローダーが見つからず起動できなくなる可能性があった。
RAIDにしたときに、sdb に grub のインストールをしていたはずだが、念のため再起動する前に sdb に grub をインストールしなおしておく
# grub grub> root (hd1,0) grub> setup (hd1) grub> quit
hd1 が sdb。
root (hd0,0)
とあることを確認しておく。
電源を切って、sata2 に接続されている HDD を sata1 に接続しなおす。 sata1 に接続されていた HDD は sda で壊れた HDD。
交換用の HDD を sata2 に接続して、電源を入れる。
sdb になっていた HDD を sda にしても、mdadm の RAID はとくに問題はない。
ブートマネージャの設定などが問題なければ、起動するはず。 起動しなければ、BIOSの設定で起動するHDDを変更して、grub コマンドに入ってコマンドラインオプションを変更してなんとかする。
起動したら、追加したドライブが sdb になっているはずなので、fdisk で、sda のブロックサイズを確認して、それにあわせて sdb のパーティションを切る。
[root@edu ~]# fdisk /dev/sda The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): u <セクタ表示にしたほうがわかりやすいかも セクタ数 の表示/項目ユニットを変更します コマンド (m でヘルプ): p <sda のパーティションサイズの確認 ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O size (minimum/optimal): 4096 bytes / 4096 bytes ディスク識別子: 0x000a69c6 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 2048 3891202047 1945600000 fd Linux raid 自動検出 /dev/sda2 3891202048 3907028991 7913472 fd Linux raid 自動検出 コマンド (m でヘルプ): q [root@edu ~]# fdisk /dev/sdb The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): u セクタ数 の表示/項目ユニットを変更します コマンド (m でヘルプ): p ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O size (minimum/optimal): 4096 bytes / 4096 bytes ディスク識別子: 0x370a3521 デバイス ブート 始点 終点 ブロック Id システム コマンド (m でヘルプ): n <新規パーティションの作成 コマンドアクション e 拡張 p 基本パーティション (1-4) p <基本パーティションで作成 パーティション番号 (1-4): 1 最初 セクタ (63-3907029167, 初期値 64): 2048 Last セクタ, +セクタ数 or +size{K,M,G} (2048-3907029167, 初期値 3907029167): 3891202047 <最初セクタ、Last セクタは sda の情報を元に設定する。 コマンド (m でヘルプ): t <パーティションを作成した時点では領域が Linux 通常用の領域になっているので、fd (Linux raid 自動検出) に設定する 選択した領域 1 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): n <同じように sdb2 のパーティションを作成する コマンドアクション e 拡張 p 基本パーティション (1-4) p パーティション番号 (1-4): 2 最初 セクタ (63-3907029167, 初期値 64): 3891202048 Last セクタ, +セクタ数 or +size{K,M,G} (3891202048-3907029167, 初期値 3907029167): 3907028991 コマンド (m でヘルプ): t パーティション番号 (1-4): 2 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 2 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): p ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O size (minimum/optimal): 4096 bytes / 4096 bytes ディスク識別子: 0x370a3521 デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 2048 3891202047 1945600000 fd Linux raid 自動検出 /dev/sdb2 3891202048 3907028991 7913472 fd Linux raid 自動検出 コマンド (m でヘルプ): w < w で編集したパーティション情報を実際に書き込む、書き込む前であれば、q で終了することで変更を反映させず終了することもできる。 パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 ディスクを同期しています。 [root@edu ~]# fdisk /dev/sda <一応確認 The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): p ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト ヘッド 255, セクタ 63, シリンダ 243201 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O size (minimum/optimal): 4096 bytes / 4096 bytes ディスク識別子: 0x000a69c6 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 1 242217 1945600000 fd Linux raid 自動検出 /dev/sda2 242217 243202 7913472 fd Linux raid 自動検出 コマンド (m でヘルプ): q [root@edu ~]# fdisk /dev/sdb The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. 警告: DOS互換モードは廃止予定です。このモード (コマンド 'c') を止めることを 強く推奨します。 and change display units to sectors (command 'u'). コマンド (m でヘルプ): p ディスク /dev/sdb: 2000.4 GB, 2000398934016 バイト ヘッド 255, セクタ 63, シリンダ 243201 Units = シリンダ数 of 16065 * 512 = 8225280 バイト セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト I/O size (minimum/optimal): 4096 bytes / 4096 bytes ディスク識別子: 0x370a3521 デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 1 242217 1945600000 fd Linux raid 自動検出 /dev/sdb2 242217 243202 7913472 fd Linux raid 自動検出 コマンド (m でヘルプ): q
パーティションを作成したら、作成したパーティションを mdadm で RAID に追加する。
[root@edu ~]# cat /proc/mdstat <現在の mdadm の状態を確認 Personalities : [raid1] md0 : active raid1 sda1[1] 1945599808 blocks super 1.0 [2/1] [_U] bitmap: 11/15 pages [44KB], 65536KB chunk md1 : active raid1 sda2[1] 7909312 blocks super 1.1 [2/1] [_U] unused devices:[root@edu ~]# mdadm --add /dev/md1 /dev/sdb2 <新しく作成したパーティションを追加 mdadm: added /dev/sdb2 [root@edu ~]# cat /proc/mdstat <同期の進捗状況を確認 Personalities : [raid1] md0 : active raid1 sda1[1] 1945599808 blocks super 1.0 [2/1] [_U] bitmap: 11/15 pages [44KB], 65536KB chunk md1 : active raid1 sdb2[2] sda2[1] 7909312 blocks super 1.1 [2/1] [_U] [==>..................] recovery = 12.0% (951680/7909312) finish=2.0min speed=55981K/sec unused devices: [root@edu ~]# mdadm --add /dev/md0 /dev/sdb1 mdadm: added /dev/sdb1 [root@edu ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[2] sda1[1] 1945599808 blocks super 1.0 [2/1] [_U] [>....................] recovery = 0.0% (310528/1945599808) finish=208.8min speed=155264K/sec bitmap: 11/15 pages [44KB], 65536KB chunk md1 : active raid1 sdb2[2] sda2[1] 7909312 blocks super 1.1 [2/2] [UU] unused devices:
同期がおわったら、sdb に grub のインストールをする。
# grub grub> root (hd1,0) grub> setup (hd1) grub> root (hd0,0) grub> setup (hd0) grub> quit
以上