SSブログ
エステ

RAIDを再構築できない病につける薬 [LinuxでSoftware RAID]

以前も書きましたが、RAIDを再構築する際には、おおざっぱに

アンマウント
RAID停止
スーパーブロックの消去
再度RAID作成

というステップを踏みますが、おそらく、スーパーブロックの消去で失敗
したのか、再度RAIDを作成しようとした際に

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=1024 --layout=f2 -v /dev/sd[abcd]1
mdadm: Cannot open /dev/sda1: Device or resource busy
mdadm: create aborted

と、こんな具合に失敗します。

で、なにをしてもだいたいこんな具合に失敗します。。

原因は不明ですが、

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md_d0 : inactive sda1[0](S)
      1953514432 blocks
       
unused devices: <none>

おそらく、このあたり。


# mdadm -E /dev/sda1
/dev/sda1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 22a9ece6:ae35f69a:86b54b3f:1d0c4af0 (local to host fs)
  Creation Time : Sat Apr 17 20:26:56 2010
     Raid Level : raid10
  Used Dev Size : 1953514432 (1863.02 GiB 2000.40 GB)
     Array Size : 3907028864 (3726.03 GiB 4000.80 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0

    Update Time : Sun Apr 18 06:22:24 2010
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 128dccc8 - correct
         Events : 14

         Layout : near=2, far=1
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        1        0      active sync   /dev/sda1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       8       17        1      active sync   /dev/sdb1
   2     2       8       33        2      active sync   /dev/sdc1
   3     3       8       49        3      active sync   /dev/sdd1

スーパーブロックの残骸や/proc/mdstatの残骸などの影響で、
createに失敗するようです。

正す方法はただ一つ。

mdadm の削除と再インストール 

これが確実です。

# apt-get --reinstall install mdadm

では/proc/mdstat が残っているため、ダメです。

ですので、

# apt-get --purge remove mdadm

ここで、再起動してから、確認してみます。

# cat /proc/mdstat 
Personalities : 
unused devices: <none>

mdadmをインストールします。

# apt-get install mdadm

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mdadm
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/239kB of archives.
After this operation, 676kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously deselected package mdadm.
(Reading database ... 68219 files and directories currently installed.)
Unpacking mdadm (from .../mdadm_2.6.7.1-1ubuntu13_amd64.deb) ...
Processing triggers for man-db ...
Setting up mdadm (2.6.7.1-1ubuntu13) ...
Generating array device nodes... /var/lib/dpkg/info/mdadm.postinst: 170: /dev/MAKEDEV: not found
failed.
Generating mdadm.conf... done.
 Removing any system startup links for /etc/init.d/mdadm-raid ...
update-initramfs: deferring update (trigger activated)
update-rc.d: warning: mdadm start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (S)
update-rc.d: warning: mdadm stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (0 6)
 * Starting MD monitoring service mdadm --monitor
   ...done.

Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-2.6.31-20-server


これでOKです[るんるん]

いちおうスーパーブロックを消去します。

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=1024 --layout=f2 -v /dev/sd[abcd]1
mdadm: /dev/sda1 appears to contain an ext2fs file system
    size=58593280K  mtime=Sun Apr 18 05:55:53 2010
mdadm: /dev/sda1 appears to be part of a raid array:
    level=raid10 devices=4 ctime=Sat Apr 17 20:26:56 2010
mdadm: size set to 1953513472K
Continue creating array? yes
mdadm: array /dev/md0 started.

createが待ちきれないので、すぐに止めます。
# mdadm --misc --stop /dev/md0
mdadm: stopped /dev/md0

残骸がないことを確認します。
# cat /proc/mdstat
Personalities : [raid10] 
unused devices: <none>

スーパーブロックをきれいにします。
# mdadm --misc --zero-superblock /dev/sd[abcd]1

完了です〜

このあと、createしてあげてください〜


RAID10 のchunk sizeを変えてみる [LinuxでSoftware RAID]

前回は layoutオプションを変えましたが、今回はchunk sizeを変えてベンチマークしてみます。

chunk size = 64,128,256,512,1024 の5パターンです。
また、mke2fs の -E オプションを指定しない場合と、数値を指定した場合も比較してみます。


コマンド的には

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=64 --layout=f2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=128 --layout=f2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=256 --layout=f2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=512 --layout=f2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=1024 --layout=f2 -v /dev/sd[abcd]1

に対して、標準のフォーマットとしては、

# mke2fs -t ext4 -m 0 /dev/md0

各、チャンクサイズに対しては、

# mke2fs -t ext4 -m 0 -b 4096 -E stride=16,stripe-width=32 /dev/md0
# mke2fs -t ext4 -m 0 -b 4096 -E stride=32,stripe-width=64 /dev/md0
# mke2fs -t ext4 -m 0 -b 4096 -E stride=64,stripe-width=128 /dev/md0
# mke2fs -t ext4 -m 0 -b 4096 -E stride=128,stripe-width=256 /dev/md0
# mke2fs -t ext4 -m 0 -b 4096 -E stride=256,stripe-width=512 /dev/md0

ここで、
stride = chunk / block
stripe-width = stride x (n/2) (RAID10でn台のHDDをRAID10に利用する場合)
となります。

以前のブログでは man mke2fs を読み間違えていて、この設定を間違えてベンチマークしていました。特に赤線あたりを間違えてとっていたので、表から一部抜け落ちてしまいました。。

てきとーにやってちゃダメですね[たらーっ(汗)]


結果は、

chunk-write.png

chunk-read.png

と、Writeはほとんど変わることなく、Readの性能がchunk size に比例しそうな感じです。



ベンチマーク時のマシンスペック
CPU:Intel E3200
HDD:HGST HDS722020ALA330

Linux software RAIDを使って、RAIDを構築。

RAID10 のlayoutオプションを変えてみる [LinuxでSoftware RAID]

RAID10の構築オプション layout を変えてみて、どの程度パフォーマンスが変化するか見てみます。

ただし、4TBで構築すると、createだけでも1回5時間以上掛かるので、30GBほどパーティションを切り出して、試しました。
(その影響がfarとかであるかも。)

near=2

far=2

offset=2

この3パターンで試します。

コマンド的には、この3パターンです。

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=64 --layout=n2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=64 --layout=f2 -v /dev/sd[abcd]1

# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 --chunk=64 --layout=o2 -v /dev/sd[abcd]1

で、bonnie++の結果。

                        mke2fs option
layout-write.png

layout-read.png

一般的に書き込みは (速)near > offset > far(遅)と言われているようなのですが、
ちょっと微妙な結果です[たらーっ(汗)] 

次回、far=2として、chunk size などを変えて、ベンチマークしてみます。


ベンチマーク時のマシンスペック
CPU:Intel E3200
HDD:HGST HDS722020ALA330

Linux software RAIDを使って、RAIDを構築。


(追記)strideとstripe-width の計算を間違えています。。[あせあせ(飛び散る汗)]

タグ:RAID構築

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。