mdadmでraid5アレイの復旧(縮退、HDD交換、追加)をする
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を使ってみた。
$sudofdisk-l(省略)Disk/dev/sde:223.6GiB,240057409536bytes,468862128sectorsUnits:sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/4096bytesI/Osize(minimum/optimal):4096bytes/4096bytesDisklabeltype:gptDiskidentifier:E697569C-C191-466A-8302-CC1A1F185A04デバイスStart最後からセクタSizeタイプ/dev/sde1204810506231048576512MEFISystem/dev/sde21050624402042879400992256191.2GLinuxfilesystem/dev/sde34020428804688609276681804831.9GLinuxスワップDisk/dev/sdf:2.7TiB,3000592982016bytes,5860533168sectorsUnits:sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/4096bytesI/Osize(minimum/optimal):4096bytes/4096bytes
/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
ディスクフラグ:
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
10.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で結構簡単に交換ができる。全ての手続きが終わったら、今度はその方法を紹介する。