USBメモリでRAID 5を構築・チャンクサイズを変更してみる
RAIDアレイに Raspbian システムも置くようにしたので、チャンクサイズを見直してみました
実際に作業したのは1ヵ月ほど前なので、ちょっと古い話になってしまいましたが、忘れないように作業メモを残しておこうと思います。
最初にUSBメモリで RAID 5を構築したときの目的は、
- 技術的な興味
- 低消費電力、静音ファイルサーバとして使用する
- 保存するファイルは主に音楽、写真、動画ファイルなど
と考えていたのですが、高信頼サーバを目指して Raspbian システムもRAIDアレイに移動させてしまいました。そうなると、これまで数MB以上のファイルを対象にして決めた現在のチャンクサイズ(256KB)が、必ずしも最適な値ではなくなってきます。
Linux等、OSには設定ファイル、スクリプト等が多数あり、これらは大きくても数KB程度ですね。チャンクサイズよりも小さいファイルが多数あると、
- 分割されないので、複数のデバイスに分散配置されず性能が出ない
- RAIDの使用効率が低下する
と言った事になると考えられます。
そこで、チャンクサイズを半分の128KBに変更してみることにしました。これはRAIDアレイの再形成(reshape)になるので、USBメモリの寿命にも影響しそうですが、壊れたらまたRMAで交換してもらえば良いし(^^;)。
1. 作業開始前の状態
以下が変更作業前の状態です。チャンクサイズが 256Kと表示されています。
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jul 30 11:24:03 2016
Raid Level : raid5
Array Size : 185054208 (176.48 GiB 189.50 GB)
Used Dev Size : 61684736 (58.83 GiB 63.17 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Sep 19 15:34:28 2016
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 256K
Name : Acrux:0 (local to host Acrux)
UUID : c26559b7:abb329b4:1960d0d5:7b9c8287
Events : 1148
Number Major Minor RaidDevice State
5 8 49 0 active sync /dev/sdd1
6 8 33 1 active sync /dev/sdc1
3 8 17 2 active sync /dev/sdb1
4 8 1 3 active sync /dev/sda1
|
2. チャンクサイズを変更する
別に RAIDアレイを拡張するわけではありませんが、チャンクサイズを変更するにも"--grow" オプションを使うそうです。バックアップファイルは、RAIDアレイの再形成(reshape)で異常が起きても回復できるよう、指定しておいた方が良いとのこと。
と言うわけで、以下のように入力してみましたが、
# mdadm --grow /dev/md0 --chunk=128 --backup-file=/root/md0Backup.reshape
mdadm: backup file must NOT be on the array being reshaped.
unfreeze
|
怒られました。バックアップファイルは処理対象の RAIDアレイ以外の場所に作らなければいけないみたい。(まぁ、当たり前か ^^;)とは言え他に適当な場所もないので、止むを得ず /boot配下に作ることにしてみました。
# mdadm --grow /dev/md0 --chunk=128 --backup-file=/boot/md0Backup.reshape
|
今度は怒られなかったので、これで良いのかな。進行状況を見てみます。
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[5] sda1[4] sdb1[3] sdc1[6]
185054208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 0.0% (27776/61684736) finish=776.4min speed=1322K/sec
unused devices: <none>
|
776分(約13時間)かかると言ってます。例によって制限速度を上げてみました。
# echo 500000 >/proc/sys/dev/raid/speed_limit_min
# echo 500000 >/proc/sys/dev/raid/speed_limit_max
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd1[5] sda1[4] sdb1[3] sdc1[6]
185054208 blocks super 1.2 level 5, 128k chunk, algorithm 2 [4/4] [UUUU]
[>....................] reshape = 0.3% (207608/61684736) finish=444.7min speed=2303K/sec
unused devices: <none>
|
444分(7.4時間)に短縮されました。このまま完了するまで待ちます。ところが、バックアップファイルで/bootがパンクしてしまいました。しかし再形成(reshape)は続いている様子です。
# df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mmcblk0p1 61384 61384 0 100% /boot
# ls -l /boot/md0Backup.reshape
-rwxr-xr-x 1 root root 34250752 9月 19 15:55 /boot/md0Backup.reshape
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sat Jul 30 11:24:03 2016
Raid Level : raid5
Array Size : 185054208 (176.48 GiB 189.50 GB)
Used Dev Size : 61684736 (58.83 GiB 63.17 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Sep 19 15:59:35 2016
State : clean, reshaping
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 256K
Reshape Status : 3% complete
New Chunksize : 128K
Name : RaspberryPi3:0 (local to host RaspberryPi3)
UUID : c26559b7:abb329b4:1960d0d5:7b9c8287
Events : 2932
Number Major Minor RaidDevice State
5 8 49 0 active sync /dev/sdd1
6 8 33 1 active sync /dev/sdc1
3 8 17 2 active sync /dev/sdb1
4 8 1 3 active sync /dev/sda1
|
このまま放置したらどうなるのかしらん?まぁ何か手があるわけでもないので、放っておくしかないのですが・・・
これで再形成(reshape)中にクラッシュなどしたら、データロストになるんだろうなぁ。しかし、バックアップファイルに必要な容量くらい教えてくれたり、保存先に空きが足りない場合は警告してくれても良さそうなものです。
3. ストライドとストライプ幅の最適化
一晩放ったらかしておいたら朝には完了しており、バックアップファイルも消えていました。どうやら無事に再形成できたようです。
チャンクサイズが変更されたので、ファイルシステムのストライドとストライプ幅も変更します。チャンクサイズ128KBで、データディスク数 3台なので、
- ストライド=128/4=32
- ストライプ幅=3×32=96
になります。
# tune2fs -E stride=32,stripe-width=96 /dev/md0
tune2fs 1.42.12 (29-Aug-2014)
Setting stride size to 32
Setting stripe width to 96
|
念のため再起動して問題なく起動できることを確認して作業完了です。
[今回の教訓]
RAIDアレイの再形成(reshape)を行う際には、バックアップファイルの作成用に、処理対象のRAIDアレイ以外に、充分な空き(おそらく使用量以上)があるディスクを用意しておくこと。
今回は異常が発生することなく無事に再形成(reshape)できましたが、これは単にラッキーだったと考えましょう。
|