LoginSignup
1
1

More than 1 year has passed since last update.

mdadmで運用しているraid5のディスク交換

Last updated at Posted at 2021-10-03

環境

CentOS Linux release 7.7.1908 (Core)
mdadm - v4.1 - 2018-10-01
3TB HDD x 4台 で raid5 を構築済み

目標

この内の1台を 6TB の HDD に置き換える。
※ゆくゆくは残りも全て 6TB HDD に置き換えて容量増加を図る。

事前確認

/dev/md0 のファイルシステムを確認

# df -T -> ext3 であることを確認。

現在のraid状態

# mdadm --detail /dev/md0 -> sdb1,sdc1,sdd1,sde1 の4台で構成されていることを確認。今回は正常だがもし故障などしていればここでFailed Devicesとして表示されるはず。

マウントされているデバイスのパーティション情報を表示

# fdisk -l -> 全部出る。
# fdisk -l /dev/sdb1 -> GPTフォーマットであることを確認。

SMART情報確認

# smartctl -a /dev/sdb1 -> hddのモデル名やシリアル番号などを確認。

交換

mdadm で、取り外したいディスクに故障マークを付けてから切り離し

# mdadm --fail /dev/md0 /dev/sdb1 -> md0 の sdb1 を故障とする
# mdadm --remove /dev/md0 /dev/sdb1 -> md0 の sdb1 を切り離す

縮退していることを確認

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sde1[4] sdd1[2] sdc1[1]
      8790398976 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
      bitmap: 1/22 pages [4KB], 65536KB chunk

unused devices: <none>

マシンをシャットダウンして sdb1 のディスクを 新規ディスクと入れ替える

モデル名、シリアル番号を確認して間違えないように。

マシンを起動して新規ディスクのデバイス名を確認

# fdisk -l -> 1つだけ6TBの表示。どうやら/dev/sdb のままらしい。
# smartctl -a /dev/sdb -> モデル名、シリアルが交換したものと一致。

新規ディスクをフォーマット

# parted /dev/sdb
GNU Parted 3.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) mklabel gpt
(parted) unit GB
(parted) mkpart primary ext3 0% 100%
(parted) set 1 raid on
(parted) p
モデル: ATA WDC WD60EZAZ-00S (scsi)
ディスク /dev/sdb: 6001GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ:

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

(parted) q

mklabel gpt … ラベルを gpt に。
unit GB … デフォルトの単位を GB に。
mkpart primary ext3 0% 100% … 全領域をext3でプライマリとするパーティションを作成。
set 1 raid on … 指定したパーティションに raid フラグを設定。
p … print
q … quit

新規ディスクを raid に編入

# mdadm --add /dev/md0 /dev/sdb1
mdadm: added /dev/sdb1

応答が返ってくるのがちょっとだけ時間がかかる。信じて待つ。

再構築が完了するのを待つ

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[5] sde1[4] sdd1[2] sdc1[1]
      8790398976 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [_UUU]
      [>....................]  recovery =  0.0% (1152640/2930132992) finish=4674.6min speed=10442K/sec
      bitmap: 0/22 pages [0KB], 65536KB chunk

unused devices: <none>

4674分… 78時間…!?
信じて待つ。

(2022.04.02追記)構築速度を上げる方法

どうやら speed_limit_min という設定に引っ張られるらしい。
動的に変更してやると構築速度が向上する。

# cat /proc/sys/dev/raid/speed_limit_min
1000
# echo 100000 > /proc/sys/dev/raid/speed_limit_min
# cat /proc/sys/dev/raid/speed_limit_min
100000

システムを再起動すると元に戻る。恒久設定は /etc/sysctl.conf に書き込む

# vi /etc/sysctl.conf 
(以下の行を追加)
dev.raid.speed_limit_min=100000

今後

同様にして sdc sdd sde も 6TB HDD に入れ替え。
全ディスクが 6TB HDD になったら 容量を拡張する。

# mdadm --grow /dev/md0 --size=max
# resize2fs -p /dev/md0

でいけるらしい(未確認)。

(2022.04.09追記)全ディスクを交換し終えたので拡張を実施
# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 5860388864K
#

プロンプトはすぐ戻ってくるが、裏で再構築が走る。
50%から開始されたのは 3TB->6TB での追加領域のみの構築だからか?

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] 
md0 : active raid5 sdb1[5] sde1[4] sdd1[7] sdc1[6]
      17581166592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
      [==========>..........]  resync = 50.5% (2964709248/5860388864) finish=680.4min speed=70929K/sec
      bitmap: 11/22 pages [44KB], 131072KB chunk

unused devices: <none>

再構築が完了してもまだ容量は増えない。

# df -h | grep md0
/dev/md0                  8.2T  7.7T   40G  100% /data

ext3なので /dev/md0 に対して resize2fs を実施することで拡張を試みる … が怒られる。
New size too large to be expressed in 32 bits

ファイルシステムを ext3->ext4 にすることで解決を図る (別記事にしました)。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1