CentOS7の mdadm で構築したRAID1 で起動できなくなったら

ALL
スポンサーリンク

2019.6.29
--
本記事はレスキューディスクを使ったRAID復旧ですが、コメント欄にてレスキューディスクが無くとも対処できる方法を教えていただきました。
次の記事の方を参照ください。
レスキューディスク不要:CentOS7の mdadm で構築したRAID1 で起動できなくなったら パソコン鳥のブログ
--

CentOS7の mdadm で構築したRAID1 で、シャットダウン時に片方のHDDを交換すると、ブート時に、下の画像のようになって、起動できなくなります。

画像

RAID1の2つのHDDのうち、どちらを交換しても同じで、実機でも仮想マシンでも発生します。
mdadm が検知できない状態で、HDD が変わってしまうと発生するようです。

これ、HDD故障でシャットダウンまでは何とか動作していて、その後動作不可になったら、OS起動できなくなってしまい、かなりマズイです。

そこで、この場合の対処方法です。

CentOS DVD で起動し、メニューで Troubleshooting を選択した後、Rescue a CentOS system を選択します。
数字で選択個所になったら、「1) Continue」を選びます。

コマンドプロンプトが表示されたら、
chroot /mnt/sysimage
を実行します。。

cat /proc/mdstat を実行します。

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear]
md126 : active raid1 sda1[0]
      524288 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sda2[0]
      7857152 blocks super 1.2 [2/1] [U_]
      bitmap:1/1 pages [4KB], 65536KB chunk
unused devices: <none>

のように表示されます。

ここで、以降、sdX が動作しているHDD、sdY が新規交換したHDDとします。
cat /proc/mdstat の結果が [U_] の場合は、sdX が sda 、sdY が sdb となります。
[_U] の場合は、sdX が sdb 、sdY が sda となります。

sfdisk -d /dev/sdX | sfdisk /dev/sdY
を実行します。
sdX と同じパーティション情報が、sdY(新HDD)にも設定されます。

次のコマンドを実行します。RAIDに新HDDが組み込まれます。

/sbin/mdadm --manage /dev/md126 --add /dev/sdY1
/sbin/mdadm --manage /dev/md127 --add /dev/sdY2

cat /proc/mdstat を実行します。
RAID構築が始まっています。

Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear]
md126 : active raid1 sda1[0]
      524288 blocks super 1.2 [2/1] [U_]
      bitmap: 0/1 pages [0KB], 65536KB chunk
md127 : active raid1 sda2[0]
      7857152 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  2.7% (217600/7857152) finish=216.5min speed=148624K/sec
      bitmap:1/1 pages [4KB], 65536KB chunk
unused devices: <none>

cat /proc/mdstat を何度か実行し、recovery = XXX % の表記がなくなれば、構築完了です。

ここで、SELinux が有効な場合は、次のファイルを編集することで無効化しておきます。

/etc/sysconfig/selinux

SELINUX=disabled

これをしないと、起動時に下の画面でエラーになります。

画像

exit を実行後、さらに reboot を実行します。

起動時にBIOS設定画面に入り(たいてい、起動時にDELキーやF2キーを押していれば入れます)、BIOSのブートデバイス指定で、正常HDDから起動するように指定します。
(交換した新HDDからは当然、ブートしないので)

これで CentOS が起動できるようになります。

起動後、root で grub2-install /dev/sdY を実行し、新規交換したHDDにも grub の設定を行います。
(先の説明の通り、sdY は新規交換したHDD のデバイス名(sda やsdb等)とします)

これで、交換した新HDDからも起動できるようになります。

コメント

  1. 通りすがり より:

    私も同じ内容で困りましたが、1枚目の画像「ブート時に、下の画像のように」のところのconsole「:/#」から、cat /proc/mdstatでinactiveになったmdxxxが見えていれば、mdadm –run と –readwrite で縮退状態で有効化できるので(有効化後はconsole「:/#」をexitするとOSブートが継続する)、レスキューディスクなしで対処できます。

  2. パソコン鳥 より:

    情報ありがとうございます!
    教えていただいた方法を試して、RAID復旧できました。
    後ほど記事の方を修正します。

  3. パソコン鳥 より:

    記事を修正しました。
    長くなりましたので、別記事を作成し、本記事冒頭で誘導しています。
    レスキューディスク不要:CentOS7の mdadm で構築したRAID1 で起動できなくなったら | パソコン鳥のブログ