環境
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 にすることで解決を図る (別記事にしました)。