mdadmでraid5アレイの復旧(縮退、HDD交換、追加)をする

2018年6月5日未分類Linux, Ubuntu, mdadm, raid

mdadmを使用してRaid5を組んでいたのだが、ある日SMARTからエラーが止まらなくなり、やむなくHDDを交換することとした。メモとして記載をしておく。

SMARTで発生していたエラー

こんなのが出ていた。

The following warning/error was logged by the smartd daemon:
Device: /dev/sdf [SAT], 5 Currently unreadable (pending) sectors

別にセクタの一部に不良が発生していたって良いじゃない、という感じもするのだが、WesternDigitalの保証(RMA)も試してみたかったので、ここは一度mdadmから/dev/sdfを取り出してあげることに。

mdadmを用いてraid5から外したいドライブを指定する

mdadmでは正常にRAIDが稼働していることとなっているので、まず/dev/sdfが既に故障していることを通知したあと、正式にremoveをする。なお、使用しているRAIDのデバイスファイル名は/dev/md0としている。

$sudo mdadm --fail /dev/md0 /dev/sdf1
mdadm: set /dev/sdf1 faulty in /dev/md0
$sudo mdadm --remove /dev/md0 /dev/sdf1
mdadm: hot removed /dev/sdf1 from /dev/md0

これで、RAID5で構成している/dev/md0から一台が抜けた構成となる。

mdadmで作ったRAID5の縮退確認

mdadmで作ったRAIDの状態は、「mdadm –detail [RAIDで構成したデバイスファイル名]」で確認出来る。

$ sudo mdadm --detail /dev/md0
(省略)
    Number   Major   Minor   RaidDevice State
       5       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1
       8       0        0        8      removed

一台が「removed」となり、縮退運転となっていることが分かる。なお、同様に状況はcat /proc/mdstatでも確認出来る。

$ sudo cat /proc/mdstat
md0 : active raid5 sdc1[2] sdd1[3] sdb1[1] sda1[5]
      11720536064 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/4] [UUUU_]
      bitmap: 7/22 pages [28KB], 65536KB chunk

こちらでも、[UUUU_]となっており、縮退運転となっていることが分かる。

fdiskを用いて新たに利用するHDDのディスク名を特定する

今回は一度shutdownをして新しいHDDを入れ直した。そのためフォーマットをしなくてはならないのだが、3TBのHDDであるため、fdiskの利用が出来ない。
そのため、partedを用いることに。

ただし、新しく挿入したHDDのディスク名(デバイス名:/dev/sd*みたいなやつ)を知るためだけにfdiskを使ってみた。

$sudo fdisk -l
(省略)
Disk /dev/sde: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: E697569C-C191-466A-8302-CC1A1F185A04

デバイス       Start 最後から セクタ   Size タイプ
/dev/sde1       2048   1050623   1048576   512M EFI System
/dev/sde2    1050624 402042879 400992256 191.2G Linux filesystem
/dev/sde3  402042880 468860927  66818048  31.9G Linux スワップ


Disk /dev/sdf: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

/dev/sdfにだけパーティションが定義されていないので、これが新規に入れたHDDだ。別にsmartctlを使ってシリアルナンバーの一致を確かめて…とかも出来るが、今回は新規にいれたのでこれがたぶん一番簡単。

新たに利用するHDDを「parted」を用いてフォーマットする

partedを用いて、RAID用にHDDをフォーマットする。

$ parted /dev/sdf
GNU Parted 3.2
/dev/sdf を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) mklabel gpt                                                      
(parted) unit GB                                                          
(parted) print                                                            
モデル: ATA WDC WD30EZRZ-00G (scsi)
ディスク /dev/sdf: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ: 

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

この時点では、もちろんパーティションは存在していない。今回はHDDの全てをRAID用のパーティションとして利用する。

(parted) mkpart primary ext4 0% 100%
(parted) set 1 raid on
(parted) print                                                            
モデル: ATA WDC WD30EZRZ-00G (scsi)
ディスク /dev/sdf: 3001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ: 

番号  開始    終了    サイズ  ファイルシステム  名前     フラグ
 1    0.00GB  3001GB  3001GB  ext4              primary  raid

最初に、「parted /dev/sdf」で、/dev/sdfを操作することを明示。その後「mklabel gpt」で、gptパーティションテーブルを利用することを明示する(基本的に、大容量のHDDではGPTを用いる)。
mkpart primary ext4 0% 100%」で、領域の0%から100%までをext4、プライマリパーティションとしてフォーマットし、「set 1 raid on」でraidで使用することを宣言している。

mdadmを用いて、故障しているRAID5にディスクを追加する

追加するのは、「mdadm –add [RAIDのデバイスファイル名] [追加するデバイスファイル名]」で終わり。

$ sudo mdadm --add /dev/md0 /dev/sdf1
mdadm: added /dev/sdf1

これで、/dev/md0に、/dev/sdf1が追加された。

追加したディスクが正しくRAIDアレイに追加されていることを確認する

先ほどと同じように、「mdadm –detail」を用いて確認。

$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Feb  5 22:17:40 2017
     Raid Level : raid5
     Array Size : 11720536064 (11177.57 GiB 12001.83 GB)
  Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
  (省略)
      Number   Major   Minor   RaidDevice State
       5       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1
       6       8       81        4      spare rebuilding   /dev/sdf1

新たに追加した/dev/sdf1が、rebuildingとなり、組み込まれたことが分かる。

同様に、/proc/mdstatを見てみる。こちらでは、RAID5の再構成具合が確認出来る。

$ sudo cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] 
md0 : active raid5 sdf1[6] sdc1[2] sdd1[3] sdb1[1] sda1[5]
      11720536064 blocks super 1.2 level 5, 512k chunk, algorithm 2 [5/4] [UUUU_]
      [>....................]  recovery =  2.4% (71836716/2930134016) finish=374.2min speed=127296K/sec
      bitmap: 6/22 pages [24KB], 65536KB chunk

再構成が始まった。

ということで、今回はmdadmで作っているRAID5のHDD交換を行ってみた。今回使っているWestern DigitalのHDDは、購入してからわずか1年で(軽微とはいえ)SMARTでエラーが出るようになってしまった。
といっても、Western DigitalのHDDはRMAで結構簡単に交換ができる。全ての手続きが終わったら、今度はその方法を紹介する。

執筆者紹介

Thir

最新のガジェットを購入してはレビューする、を繰り返しています。このブログでは、ガジェットの紹介のほか、各種サーバーやスマートホームの構築などを提供しています。最近はYouTubeでもレビュー動画やVlogをあげています。(プロフィール