——————– 2018/05/26 追記 ——————–
ここでは BIOS により起動するシステムの手順を記載している。UEFI により起動するシステムの手順は 「[UEFI]mdadmによるRAID1 – 復旧方法 –」に記載している。
——————– ここまで ——————–
software RAID である mdadm を使用してインストール時に RAID1 構築し,故障を発生させてディスクを取り替えるテストを行った。
その際の手順を説明する。
このテストは仮想環境(VirtualBox)上で,CentOS7を使用して行った。
-
- 仮想マシンの設定
テスト用に新しい仮想マシンを作成する際に,仮想ハードドライブは8GB(固定サイズ)で作成した。さらに,RAIDを構築するために同じ 8GB(固定サイズ)で仮想ハードドライブを2つ作成した。(一方はインストール時に構築するため,他方は故障させたドライブと交換するため)
このようにドライブを接続しておく。CentOS7でRAID構成のインストールは調べれば出てくると思うので,インストール手順の詳細は省く。 - パーティション構成
パーティションはインストール時に/boot: 524 MB / : 6291 MB swap : 1767 MB
という構成で作成した。以下に示したのはコマンド
fdisk -l
の結果である。# fdisk -l Disk /dev/sdb: 8589 MB, 8589934592 bytes, 16777216 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x0009a438 デバイス ブート 始点 終点 ブロック Id システム /dev/sdb1 2048 12298239 6148096 fd Linux raid autodetect /dev/sdb2 * 12298240 13322239 512000 fd Linux raid autodetect /dev/sdb3 13322240 16777215 1727488 fd Linux raid autodetect Disk /dev/sda: 8589 MB, 8589934592 bytes, 16777216 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk label type: dos ディスク識別子: 0x00017b65 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 2048 12298239 6148096 fd Linux raid autodetect /dev/sda2 * 12298240 13322239 512000 fd Linux raid autodetect /dev/sda3 13322240 16777215 1727488 fd Linux raid autodetect Disk /dev/md127: 6291 MB, 6291390464 bytes, 12287872 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk /dev/md126: 524 MB, 524222464 bytes, 1023872 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト Disk /dev/md125: 1767 MB, 1767833600 bytes, 3452800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
この結果の最後に出てくる/dev/md125, /dev/md126, /dev/md127というのはmdadmによって作成されたRAIDデバイスことである。
- RAIDの状態確認
RAIDデバイスの状態はcat /proc/mdstat
というコマンドで確認できる。# cat /proc/mdstat Personalities : [raid1] md125 : active raid1 sdb3[1] sda3[0] 1726400 blocks super 1.2 [2/2] [UU] md126 : active raid1 sda2[0] sdb2[1] 511936 blocks super 1.0 [2/2] [UU] md127 : active raid1 sdb1[1] sda1[0] 6143936 blocks super 1.2 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk unused devices: <none>
この出力の簡単な読み方は,RAIDデバイス/dev/md125を例とすると次のようになる。
一番左に書かれている”md125”はRAIDデバイス名で,”sdb3[1] sda3[0]”はmd125というRAIDデバイスを構成している物理デバイス名を表している。そして二行目の”[]”の中に書かれているのは物理デバイスの稼働状況を示している。このあとに物理デバイスを故障したと見せかけるのでその時にどうなるかわかるだろう。 - 物理デバイスを故障させる
mdadmには物理デバイスを故障したと見せかけるコマンドがある。# mdadm --fail [RAIDデバイス名] [故障させる物理デバイス名] # mdadm -f [RAIDデバイス名] [故障させる物理デバイス名]
これを用いて/dev/sdaの物理デバイスを故障させてみる。各RAIDデバイスから
/dev/sda
を故障させてcat /proc/mdstat
を実行した結果を以下に示す。# mdadm -f /dev/md125 /dev/sda mdadm: set device faulty failed for /dev/sda: No such device # mdadm -f /dev/md125 /dev/sda3 mdadm: set /dev/sda3 faulty in /dev/md125 # mdadm -f /dev/md126 /dev/sda2 mdadm: set /dev/sda2 faulty in /dev/md126 # mdadm -f /dev/md127 /dev/sda1 mdadm: set /dev/sda1 faulty in /dev/md127 # cat /proc/mdstat Personalities : [raid1] md125 : active raid1 sdb3[1] sda3[0](F) 1726400 blocks super 1.2 [2/1] [_U] md126 : active raid1 sda2[0](F) sdb2[1] 511936 blocks super 1.0 [2/1] [_U] md127 : active raid1 sdb1[1] sda1[0](F) 6143936 blocks super 1.2 [2/1] [_U] bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: <none>
- RAIDデバイスから物理デバイスを取り除く(故障後のみ実行可能)
# mdadm --remove [RAIDデバイス名] [故障させる物理デバイス名] # mdadm -r [RAIDデバイス名] [故障させる物理デバイス名]
このコマンドによってRAIDデバイスから物理デバイスを取り除くことができる。
以下に実行結果を示す。# mdadm -r /dev/md125 /dev/sda3 mdadm: hot removed /dev/sda3 from /dev/md125 # mdadm -r /dev/md126 /dev/sda2 mdadm: hot removed /dev/sda2 from /dev/md126 # mdadm -r /dev/md127 /dev/sda1 mdadm: hot removed /dev/sda1 from /dev/md127 # cat /proc/mdstat Personalities : [raid1] md125 : active raid1 sdb3[1] 1726400 blocks super 1.2 [2/1] [_U] md126 : active raid1 sdb2[1] 511936 blocks super 1.0 [2/1] [_U] md127 : active raid1 sdb1[1] 6143936 blocks super 1.2 [2/1] [_U] bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: <none>
cat /proc/mdstat
の結果からきちんとRAIDデバイスから物理デバイスが取り外されていることがわかる。ここまで長かったが,ようやくハードディスクの取り換えをおこなう。そのためにシャットダウンする。 - ハードディスクの交換
(システム領域を含んでいるハードディスクの場合)交換する際にハードディスクの順番を気を付けなければならない。基本的にBIOSは一番若い番号(0番とする)に接続されているハードディスクにboot情報を読み取りに行く。そのため今回のように0番目のハードディスクが故障した場合(Linuxでは基本的に若い番号順にsda, sdb…と割り振られる)1番に接続していたハードディスクを0番に移動し,新しいハードディスクを1番に接続しなければならない。よって次の写真のように接続する。
今回は仮想環境上で行なっているのでポート番号は簡単にわかるが,実際にハードで行う際にはポートの並び順を確認しておくべきだろう。 - RAIDデバイスへ新しい物理デバイスの追加
RAIDデバイスに物理デバイスを追加する前に,正常に稼働している物理デバイスと同じ容量(または大きい容量)になるように新しく交換した物理デバイスのパーティションを切る。長くなってしまうのでパーティションを切る方法はここでは割愛する。
同じようにパーティションを切ることができたら# mdadm --add [追加先のRAIDデバイス] [追加する物理デバイス]
コマンドを用いてRAIDデバイスに追加する。追加した結果を以下に示す。# mdadm --add /dev/md125 /dev/sdb2 mdadm: added /dev/sdb2 # mdadm --add /dev/md126 /dev/sdb3 mdadm: added /dev/sdb3 # mdadm --add /dev/md127 /dev/sdb1 mdadm: added /dev/sdb1 # cat /proc/mdstat Personalities : [raid1] md125 : active raid1 sdb2[2] sda2[1] 511936 blocks super 1.0 [2/2] [UU] md126 : active raid1 sdb3[2] sda3[1] 1726400 blocks super 1.2 [2/1] [_U] [=======>.............] recovery = 38.3% (661824/1726400) finish=0.3min speed=47273K/sec md127 : active raid1 sdb1[2] sda1[1] 6143936 blocks super 1.2 [2/1] [_U] resync=DELAYED bitmap: 1/1 pages [4KB], 65536KB chunk unused devices: <none>
- 新しい物理デバイスにgrub2をインストール
新しい物理デバイスにはMBRが書き込まれていない,そのため物理デバイスを使用してシステムを起動することができない。MBRを書き込むためのコマンドは# grub2-install /dev/sdb
を実行する。
「Installation finished. No error reported.
」と表示されれば正常終了。
- 仮想マシンの設定
このようにしてHDDを交換することができる。