treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

(3/3)smartdからの手紙「ハードディスク交換」

結局この件は「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からアラートメールをもらいました。

f:id:treedown:20160416175156p:plain
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」となっていることを確認しておきましょう。

無事復旧できました。よかったよかった。