結局この件は「SMARTエラーに始まり、正常なハードディスクに交換する」という対処に落ち着きましたのでご報告します。
次回同じ操作をする可能性もあるので、内容につきましてはほぼ自分用です。
準備作業
交換用HDDは予備を2台ほど用意してあったので、そのHDDを投入します。
いざ現地作業ですね。
中身は何か書き込まれているようであればあらかじめ初期化しておいたほうが安心です。中身に記憶さえているせいで何か別のエラーが起きてもいやなものです。パーティション切ってあるせいでfdiskコマンドがうまく実行できない、とか。
HDD取り外し前に、
mdadm /dev/md0 --fail /dev/sdb1
mdadm /dev/md0 --remove /dev/sdb1
という具合にすべての/dev/sdbデバイスをRAID1アレイから外しておきます。
smartdが配送してくれたメールにHDDのシリアル番号が記載されているので、これを確認しておいてどちらのHDDかを取り違えないようにしておくとよいです。
問題発生HDDを外して交換用HDDをマウントします。このとき、埃が気になったのでついでに掃除もしておきました。
と言ったところで準備完了です。
そうしたら、mdadmからアラートメールをもらいました。
mdデバイスのDegradedArrayを検出してメールアラートを発行する機能もちゃんと動作しているようです。図らずとも動作テストすることに。
交換後操作
まずは交換後、「dmesg | grep sd」や「fdisk -l」でディスクが認識しているか確認します。
ディスクが認識していれば「cat /proc/mdstat」でRAID1がシングルディスクで動作していることを確認します。
----------------------------------------------
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active (auto-read-only) raid1 sda5[0]
4156416 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[0]
239906816 blocks super 1.2 [2/1] [U_]
bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>
----------------------------------------------
ここに追加していきます。
----------------------------------------------
$ sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-488397167, default 2048): +480075776
Value out of range.
First sector (2048-488397167, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-488397167, default 488397167): +480075776
Created a new partition 1 of type 'Linux' and of size 228.9 GiB.
(途中省略、終わったら最後に下記のwコマンドで保存して終了)
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
----------------------------------------------
「fdisk -l」でパーティション確認すると、sdbが完成している様子が確認できます。/dev/sdaと/dev/sdbが同一のパーティション構成かつ容量になっていればOKです。
パーティションは完成しましたがブートディスクとして使うために(昔の言い方で)アクティブパーティションに指定しておく必要があるのを思い出しました。
wコマンドで書き込みしてしまったものですから、ここは再度「fdisk /dev/sdb」コマンドを実行してアクティブパーティションフラグを立てておきます。
----------------------------------------------
$ sudo fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 232.9 GiB, 250059350016 bytes, 488397168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54f0402e
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 480077823 480075776 228.9G 83 Linux
/dev/sdb2 480077824 488397167 8319344 4G 5 Extended
/dev/sdb5 480079872 488396799 8316928 4G 83 Linux
Command (m for help): a
Partition number (1,2,5, default 5): 1
The bootable flag on partition 1 is enabled now.
Command (m for help): p
Disk /dev/sdb: 232.9 GiB, 250059350016 bytes, 488397168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x54f0402e
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 480077823 480075776 228.9G 83 Linux
/dev/sdb2 480077824 488397167 8319344 4G 5 Extended
/dev/sdb5 480079872 488396799 8316928 4G 83 Linux
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
----------------------------------------------
fdisk内のコマンドで「p」コマンドを実行した際に表示される「Boot」項目に「*」マークが付与されていればOSを起動可能なアクティブパーティションになっているという状態です。
ここまで来たら再度RAID1アレイに交換したHDDの/dev/sdbを参加させましょう。
RAIDアレイ再構成
いよいよ交換HDDをマスターのディスクと同期させます。いつもここはドキドキしますね。
----------------------------------------------
$ sudo mdadm /dev/md0 --add /dev/sdb1
mdadm: added /dev/sdb1
$ sudo mdadm /dev/md1 --add /dev/sdb5
mdadm: added /dev/sdb5
----------------------------------------------
参加させるとmdstatの表記がRAIDの同期開始を表す表示に変わります。
----------------------------------------------
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[2] sda5[0]
4156416 blocks super 1.2 [2/1] [U_]
resync=DELAYED
md0 : active raid1 sdb1[2] sda1[0]
239906816 blocks super 1.2 [2/1] [U_]
[>....................] recovery = 1.3% (3310208/239906816) finish=75.0min speed=52522K/sec
bitmap: 2/2 pages [8KB], 65536KB chunk
unused devices: <none>
----------------------------------------------
あとは進捗によって
[>....................] recovery = 1.3%
の表記が
[====>................] recovery = 24.6%
[============>........] recovery = 60.7%
[================>....] recovery = 80.5%
という具合に増えてきます。
こうして…
----------------------------------------------
$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[2] sda5[0]
4156416 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[2] sda1[0]
239906816 blocks super 1.2 [2/2] [UU]
bitmap: 0/2 pages [0KB], 65536KB chunk
unused devices: <none>
----------------------------------------------
同期完了、無事復旧となりました。
GRUBインストール
忘れずに復旧したスレーブディスクに、GRUBをインストールしておきます。
----------------------------------------------
$ sudo grub-install /dev/sdb
Installing for i386-pc platform.
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.
----------------------------------------------
「Installation finished. No error reported.」と表示されたので無事/dev/sdbにGRUBがインストールできたようです。これでミラー側(スレーブ側)からもOSが起動できます。
状態確認
最後にRAIDの状態確認をして終了です。
----------------------------------------------
$ sudo mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri May 1 10:14:41 2015
Raid Level : raid1
Array Size : 239906816 (228.79 GiB 245.66 GB)
Used Dev Size : 239906816 (228.79 GiB 245.66 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Apr 16 16:30:28 2016
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Name : svr1 1:0
UUID : 60b4eb94:5d947503:610f8ef2:0592523e
Events : 47762
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
2 8 17 1 active sync /dev/sdb1
----------------------------------------------
無事に「State : clean」となっているので、RAID復旧も完了と考えてよさそうです。他のRAIDアレイボリュームについても同様に「mdadm --detail /dev/md?」で確認して「State : clean」となっていることを確認しておきましょう。
無事復旧できました。よかったよかった。