絖綛 N@i.jp  昨日:00019940
 今日:00017870
 総計:00379194
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:02/13 14:45


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

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)できましたが、これは単にラッキーだったと考えましょう。


< 過去の記事 [ 10月の Raspberry Pi リスト ] 新しい記事 >

2016 calendar
10月
1
2345678
9101112131415
16171819202122
23242526272829
3031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.