SSブログ
エステ
LinuxでSoftware RAID ブログトップ

md126とかmd127対策 [LinuxでSoftware RAID]

/dev/md0や/dev/md1がいつのまにか、/dev/md126とか/dev/md127になっていることがある。

そんなときには、

# update-initramfs -u

するといい。 

/etc/mdadm/mdadm.conf に

# definitions of existing MD arrays

ARRAY /dev/md/0 metadata=1.2 UUID=cbbf090d:dc777920:cb8d028e:35b1f037 name=fs2:0

とか書いておいてあげないとだめ。

UUIDやらは、

mdadm --detail /dev/md127とかで調べてあげる。 


Linux Software RAID10のレイアウトについて [LinuxでSoftware RAID]

 Linux Software RAID10のレイアウト, far, near, offsetについては、wikipediaがわかりやすい。 
 

RAIDを一旦壊して作り直すとき [LinuxでSoftware RAID]


Software RAIDを止める 
# mdadm --misc --stop /dev/md0
 
スーパーブロックを削除 
# mdadm --misc --zero-superblock /dev/sd[abcd]1
 
新たに構成しなおす 
# mdadm --create /dev/md0 --raid-devices=4 --level=raid10 -v /dev/sd[abcd]1
 
ここで、
# mdadm --detail /dev/md0
すると、
 
/dev/md0:
        Version : 1.2
  Creation Time : Tue May 14 17:57:59 2013
     Raid Level : raid10
     Array Size : 5860267008 (5588.79 GiB 6000.91 GB)
  Used Dev Size : 2930133504 (2794.39 GiB 3000.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Tue May 14 17:57:59 2013
          State : clean, resyncing (PENDING) 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : fs2:0  (local to host fs2)
           UUID : 09543b1b:31b8e9f6:67428c18:5f143b7a
         Events : 0

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1 
 
と、PENDINGといわれることがあるので、そんなときにはこれ。
mdadm --readwrite /dev/md0 
 
フォーマット 
# mke2fs -t ext4 -m 0 /dev/md0 
 
 

RAID check on Ubuntu [LinuxでSoftware RAID]

先日気がついたのですが、日曜深夜にファイルサーバーが高負荷でなにやら動いています。

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                  
  296 root      20   0     0    0    0 R   58  0.0  24:37.84 md0_raid10                                
  627 root      20   0     0    0    0 R    6  0.0   2:47.48 md0_resync

調べてみると、どうやら、日曜0:57にRAID Checkが行われているようです。

Check中は、

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md0 : active raid10 sdc[2] sdb[1] sdd[3] sda[0]
      3907026944 blocks 64K chunks 2 near-copies [4/4] [UUUU]
      [==>..................]  check = 14.2% (556294912/3907026944) finish=271.1min speed=205984K/sec

こんな具合です。


定期的にcheckはした方が良いようなのですが、どうしても止めたい場合は、

# echo idle > /sys/block/md0/md/sync_action 

逆にすぐに実行したい場合は、

# echo check > /sys/block/md0/md/sync_action 


週イチを月イチに変更するためには、/etc/cron.d/mdadm の、

57 0 * * 0 root [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ] && /usr/share/mdadm/checkarray --cron --all --quiet

の行を#でコメントアウト。(Ubuntu10.04)

# vi /etc/cron.monthly/mdadm

--
#!/bin/sh

test -x /usr/share/mdadm/checkarray || exit 0
/usr/share/mdadm/checkarray --cron --all --quiet
--

# service cron restart

その他設定は、こちらに、/etc/default/mdadm

RAIDアレイを他のマシンで引き継ぐとき [LinuxでSoftware RAID]

RAID10で組んだRAIDアレイを他のマシンで認識させるときには

mdadm --assemble

を使うんだと思うのですが、正直成功していないので、よくわからないです。。

# mdadm --assemble /dev/md0

すると、なぜか

mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

とおこられます。

一方、

# mdadm --assemble /dev/md0 /dev/sd[abcd]1
mdadm: /dev/md0 assembled from 3 drives - need all 4 to start it (use --run to insist).

# cat /proc/mdstat 
Personalities : 
md0 : inactive sda1[0](S) sdd1[3](S) sdc1[2](S)
      5860540416 blocks
       
unused devices: <none>

/dev/sdb1が認識されておらず、、再起動。

# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Thu May 20 22:01:02 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri May 21 04:20:59 2010
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

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

           UUID : 80c59bb7:18dbcaed:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.18

    Number   Major   Minor   RaidDevice State
       0       8        0        0      active sync   /dev/sda
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd

正しく/dev/md0が構成されました。
ちなみに、/dev/mdadm/mdadm.conf も自動的に構成されていました。

ただ、/dev/disk/by-uuid にはmd0のシンボリックリンクは作られていませんでした。
ということで、つくろうとしたのですが、

# tune2fs -U --random /dev/md0
tune2fs 1.41.11 (14-Mar-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/md0
Couldn't find valid filesystem superblock.

エラーでつくられません。
このRAIDアレイはもともとext4でフォーマットされていたのですが、

# tune2fs -l /dev/md0
tune2fs 1.41.11 (14-Mar-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/md0
Couldn't find valid filesystem superblock.

ん〜、なんかダメですね。

しかたないので、データは待避ずみなので、フォーマットします。

# mke2fs -t ext4 -m 0 /dev/md0
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=32 blocks
244195328 inodes, 976756736 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
29809 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


# tune2fs -l /dev/md0
tune2fs 1.41.11 (14-Mar-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          297ea1d6-fb47-4f6e-bbdd-21f363f7236a
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              244195328
Block count:              976756736
Reserved block count:     0
Free blocks:              961379586
Free inodes:              244195317
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      791
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              16
RAID stripe width:        32
Flex block group size:    16
Filesystem created:       Fri May 21 07:33:16 2010
Last mount time:          n/a
Last write time:          Fri May 21 07:39:01 2010
Mount count:              0
Maximum mount count:      24
Last checked:             Fri May 21 07:33:16 2010
Check interval:           15552000 (6 months)
Next check after:         Wed Nov 17 07:33:16 2010
Lifetime writes:          58 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b99a46c2-ad67-4948-9d4a-81934ed64337
Journal backup:           inode blocks


これで、

# ls -la /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 100 2010-05-21 07:39 .
drwxr-xr-x 5 root root 100 2010-05-21 06:45 ..
lrwxrwxrwx 1 root root   9 2010-05-21 07:39 297ea1d6-fb47-4f6e-bbdd-21f363f7236a -> ../../md0
lrwxrwxrwx 1 root root  10 2010-05-21 06:45 a1b63b85-b2c1-4073-b812-cb0933a5ab59 -> ../../sde2
lrwxrwxrwx 1 root root  10 2010-05-21 06:45 b4c81fb7-2c89-472b-a9b1-13a10b4ada0f -> ../../sde1

OKです。デバイスファイルもできました。

フォーマットしないといけないんじゃ、意味がないんですよねー。
まだまだ勉強が必要です[あせあせ(飛び散る汗)]

なにかいい方法があるはずです。


ubuntu 10.04 (lucid)でRAIDアレイのフォーマット時にstride,stripe widthが自動的に設定される [LinuxでSoftware RAID]

ubuntu 10.04 をインストールして、RAID10を構築して、
アレイをフォーマットするときに気づいたのですが、

# mke2fs -t ext4 -m 0 -b 4096 /dev/md0
mke2fs 1.41.11 (14-Mar-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=16 blocks, Stripe width=32 blocks
244195328 inodes, 976756736 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
29809 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

と明示的に、strideとstripe widthが表示されている。

念のため、

# tune2fs -l /dev/md0
tune2fs 1.41.11 (14-Mar-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          b6635da4-1919-488c-9764-2f7df12956ee
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              244195328
Block count:              976756736
Reserved block count:     0
Free blocks:              961379586
Free inodes:              244195317
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      791
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
RAID stride:              16
RAID stripe width:        32
Flex block group size:    16
Filesystem created:       Sun May 16 01:30:25 2010
Last mount time:          n/a
Last write time:          Sun May 16 01:36:16 2010
Mount count:              0
Maximum mount count:      29
Last checked:             Sun May 16 01:30:25 2010
Check interval:           15552000 (6 months)
Next check after:         Fri Nov 12 01:30:25 2010
Lifetime writes:          58 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      f0d91a46-c6bc-48b8-837b-c9c7a086e9a6
Journal backup:           inode blocks

やはり、しかるべき値にちゃんと設定されているようです。

lucidでmke2fsが0.2バージョンアップしたからか、
他に原因があるかは調べていませんが。。

思い当たるところでは、パーティションをfdiskで切り直したくらいかな。


partedすると、

(parted) mkpart  
Partition name? []?  
File system type? [ext2]?  
Start? 0  
End? 2000GB  
Warning: The resulting partition is not properly aligned for best performance.

とか言われるので、じゃ、ってことで、mklabel で msdos(=mbr)にしておいてから、
fdiskでパーティションを切り直しました。

これをやっておかないと、

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! 
The util fdisk doesn't support GPT. Use GNU Parted.

とか言われますんで。


で、ふつうにfdiskすると、また、

# fdisk /dev/sdaWARNING: DOS-compatible mode is deprecated. 
It's strongly recommended to switch off the mode (command 'c') and 
change display units to sectors (command 'u').

とか言われるので、

# fdisk -uc /dev/sda

Command (m for help): pDisk /dev/sda: 2000.4 GB, 
2000398934016 bytes255 heads, 63 sectors/track, 243201 cylinders, 
total 3907029168 sectorsUnits = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004d1e9

Device Boot Start End Blocks Id System

と、-ucオプションをつけて。




RAID構築したと思いきや、degradしていたとき。。 [LinuxでSoftware RAID]


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


として、RAID10を構築をはじめて、、およそ5時間後、構築できたことを確認してみると。。


# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat May 15 05:54:27 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 15 10:53:31 2010
          State : active, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 0

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

           UUID : f2c36e62:2b9db247:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.21

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       0        0        1      removed
       2       8       33        2      active sync   /dev/sdc1
       3       0        0        3      removed

       4       8       49        -      faulty spare   /dev/sdd1
       5       8       17        -      faulty spare   /dev/sdb1


え〜。degradeしてるじゃないですか、って。。

いちおsyslogみると、

May 15 09:56:40 fs kernel: [16066.137942] end_request: I/O error, dev sdd, sector 2262970368
May 15 09:56:40 fs kernel: [16066.138010] raid10: Disk failure on sdd1, disabling device.
May 15 09:56:40 fs kernel: [16066.138013] raid10: Operation continuing on 3 devices.
May 15 09:56:40 fs kernel: [16066.138225] sd 5:0:0:0: [sdd] Unhandled error code
May 15 09:56:40 fs kernel: [16066.138228] sd 5:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT
May 15 09:56:40 fs kernel: [16066.138234] sd 5:0:0:0: [sdd] CDB: Write(10): 2a 00 86 e2 34 00
May 15 09:56:40 fs kernel: [16066.138244] md: md0: resync done.

あ〜、なんかイヤなかんじです。

# badblocks -vs -o sdb1.bad /dev/sdb1

# badblocks -vs -o sdd1.bad /dev/sdd1

で、不良セクタのチェックを行ってもいいのですが、時間が掛かりそうなので、
試しに、スーパーブロックを初期化して、リビルドします。


# mdadm --manage /dev/md0 --remove /dev/sd[bd]1
# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat May 15 05:54:27 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 15 14:17:41 2010
          State : active, degraded
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

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

           UUID : f2c36e62:2b9db247:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.23

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       0        0        1      removed
       2       8       33        2      active sync   /dev/sdc1
       3       0        0        3      removed


# mdadm --misc --zero-superblock /dev/sd[bd]1

# mdadm --manage /dev/md0 --add /dev/sd[bd]1

# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat May 15 05:54:27 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 15 14:18:28 2010
          State : active, degraded, recovering
 Active Devices : 2
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 2

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

 Rebuild Status : 0% complete

           UUID : f2c36e62:2b9db247:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.25

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       5       8       17        1      spare rebuilding   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       0        0        3      removed

       4       8       49        -      spare   /dev/sdd1


って、リビルドって、一個ずつなのね(^^;)

5時間後。。

# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat May 15 05:54:27 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sat May 15 19:47:59 2010
          State : active, degraded, recovering
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 1

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

 Rebuild Status : 0% complete

           UUID : f2c36e62:2b9db247:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.42

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       4       8       49        3      spare rebuilding   /dev/sdd1


さらに5時間後。

# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Sat May 15 05:54:27 2010
     Raid Level : raid10
     Array Size : 3907026944 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953513472 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun May 16 01:21:37 2010
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

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

           UUID : f2c36e62:2b9db247:86b54b3f:1d0c4af0 (local to host fs)
         Events : 0.59

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1


時間掛かったなぁ〜[たらーっ(汗)]

ファイルのデータサイズを仕分けてみる [LinuxでSoftware RAID]

RAIDを構成する際の参考として、chunk sizeをいろいろと変えて
ベンチマークを取ってみましたが、まぁ、あまり変わらなかった訳です[たらーっ(汗)]

そもそもchunk sizeとはLinuxのSoftware RAIDで一度に取り扱う
データブロックのサイズのことを表します。

ファイルシステムとしてのブロックサイズとはまた別です。

最近はext4とかでフォーマットするとデフォルトでは4096Byteが
ブロックサイズとして使われるようです。
# tune2fs -l /dev/md0 などで調べられます。


ですので、chunk sizeは4KB以上で設定し、読み書きスピードや
無駄があまり出ないサイズに設定するのがよさそうです。

とすると、一体、普段ファイルサーバに保存しているデータのサイズは
いかほどに?という疑問がわいてきますので、調べてみました。


今、ファイルサーバは再構築中なので全てのデータはiMac上に
待避中です。
なので、OSXのターミナルからファイルサーバで保存している
ファイルの一覧を取得し、エクセルでちゃちゃっとヒストグラムを
作ってみます。


$ find ./Desktop/St1 -type f -exec ls -la {} \; >> volume.txt

対象とするフォルダ ./Desktop/St1
にあるファイルだけを抽出して、
volume.txtに書き出します。


ls- la コマンドで出力される情報がそのまま出てきますので、
ファイルサイズ以外の情報を削除して、エクセルのfrequency()関数で、
頻度を抽出します。

あまり細かく分けても仕方ないので、わりとおおざっぱです。

ls- la の結果はbyte単位で出力されているので、

4000
8000
16000
32000
64000
128000
256000
512000
1024000
1024000000
1.024E+12
1.024E+15

この12段階に分けます。

結果、こんな感じ。

data-histgram.png
横軸:ファイルサイズグループ(x)
縦軸:個数


ほとんどのデータが16KB~64KBに集まっていることがわかります。
ですので、ハードディスクの無駄使いを抑えるためには、
chunk size を16KBに設定するのがよさそうですが、一方で、
16KBだと1chunk? に入りきらないので、2~4chunk使うことに
なり、読み書きの効率が悪そうです。

1chunkに納めるためにはchunk sizeを64KBに設定すると、
85%以上のデータが1Chunkに収まることになり、効率は
良さそうです。

ところで、chunk size = 64KB はデフォルト値です。

やっぱり、「デフォルト最適説」がまた検証されました[晴れ]



chunk size と layout を変えてRAID10 を構成してみましたが。。。 [LinuxでSoftware RAID]

前回の反省から、chunk size と layout を変えてRAID10 を構成して
ベンチマークをとればよさそうだということがわかったので、
やってみましたが、結果はどれもそうかわらないという結論です。

ディスクはHGST HDS722020ALA330 なので一本2TBもあるので
先頭50GBを切り出して、50GBx4/2=100GBのRAID10を構成して
ベンチマークしたのですが、100GBくらいだとlayoutの差がそんなに
でないということでしょうか。
HGST HDS722020ALA330は1プラッタ400GBなので、同一
プラッタの前半1/4でしか動かない訳ですし。。

まぁ、いちおう、結果をまとめて見ました。
今回は、最初から計画的に、スクリプトを書いて実行したので
取り間違いもなく、スムースでした[たらーっ(汗)]

順に、Write Speed, Read Speed, その合計(比較のため)


chunk-layout_write.png

chunk-layout_read.png

chunk-layout_sum.png


どれもそんなに差がないですが、比較的よいのは

chunk size =64
Layout = near2

って、デフォルトじゃないですか〜

やはり、デフォルト最適説 [るんるん]




ベンチマーク時のマシンスペック
ファイルサーバ側
CPU:Intel E3200
HDD:HGST HDS722020ALA330

ホスト側
iMac MB952J/A

AFP(by netatalk 2.1beta2)で、AJA system testを使って計測。
Linux software RAIDを使って、RAIDを構築。

chunk size=1024, layout=f2 でRAID10を構成してみる [LinuxでSoftware RAID]

数パターンに分けたRAID10の構成方法によるベンチマークの結果

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

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


とした場合ローカルディスクアクセスのパフォーマンスが比較的よかったので、
これで構成しました。

これで、ローカルディスクアクセスのパフォーマンスを測定してみると。。

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fs               4G 72909  96 202308  37 101063  25 68007  97 402652  48 162.9   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16   407   3 +++++ +++   544   3   353   2 +++++ +++   540   3



次に、ファイルサーバとしてネットワークアクセスでのパフォーマンス測定を行ってみると。。。

--chunk=1024 --layout=f2-E stride=256,stripe-width=512(2010-04-19 0.17.20).png
Write : 77.9MB/sec
Read : 61.1MB/sec

と以前の全てデフォルト構成から比べて、パフォーマンスが大幅に低下。
特にReadは100MB/secからですから、40%も低下したことになります。

ローカルディスクアクセスとネットワークディスクアクセスは比例しませんね。。



ベンチマーク時のマシンスペック
ファイルサーバ側
CPU:Intel E3200
HDD:HGST HDS722020ALA330

ホスト側
iMac MB952J/A

AFP(by netatalk 2.1beta2)で、AJA system testを使って計測。
Linux software RAIDを使って、RAIDを構築。

あとで stride stripe-width を変更する [LinuxでSoftware RAID]

mke2fs のフォーマットオプション -E で指定する

stride
stripe-width

ですが、実は、フォーマット後にも変更可能です。

tune2fs -E stride=n,stripe-width=m /dev/mdx


ということは、chunk sizeとlayoutを数パターンに分けて、
ベンチマークを取ればよかったわけです。

タグ:stripe size

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構築

RAID10 を再構築してみる [LinuxでSoftware RAID]

勘違いから始まったわけですが。。。ファイルサーバのRAID10を再構築してみます。


勘違いといいますのも、、

dmesg を眺めていると

[    7.130124] raid10: raid set md0 active with 4 out of 4 devices
[    7.130151] md0: detected capacity change from 0 to 4000797556736
[    7.131405]  md0:
[    7.133764] md: raid6 personality registered for level 6
[    7.133767] md: raid5 personality registered for level 5
[    7.133769] md: raid4 personality registered for level 4
[    7.134502]  unknown partition table


unknown とか言われているのをみつけて、さっそく


# fdisk /dev/sda

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.


The number of cylinders for this disk is set to 243201.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1      243202  1953514583+  ee  GPT


# parted /dev/sda
GNU Parted 1.8.8.1.159-1e0e
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  2000GB  2000GB



実はこのままでもよかったのですが、、ファイルサーバのバックアップを
とっておいて、System typeを変更します。

# fdisk /dev/sda

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.


The number of cylinders for this disk is set to 243201.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): print

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1      243202  1953514583+  ee  GPT

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): L 

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): print

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes
255 heads, 63 sectors/track, 243201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1      243202  1953514583+  fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.


な、なにかワーニングが。。


/dev/sdb,sdc,sdd も同様に。

そして、再起動すると、確かにdmesgの

[    7.134502]  unknown partition table

は消えましたが。。partedすると。。。

# parted /dev/sda
GNU Parted 1.8.8.1.159-1e0e
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Warning: /dev/sda contains GPT signatures, indicating that it has a GPT table.  However, it does not have a valid
fake msdos partition table, as it should.  Perhaps it was corrupted -- possibly by a program that doesn't understand
GPT partition tables.  Or perhaps you deleted the GPT table, and are now using an msdos partition table.  Is this a
GPT partition table?
Yes/No? 

こっちでもワーニングがでることに。


結果、MBRにしか対応していない、fdiskでsystem typeを変更したので、GPT table がおかしくなってしまったようです。

そして、GPTはmdから正しく認識されない。
まぁ、いっか。ちゃんと動いていたし、もう一度partedでGPT tableを作り直します。


上のつづき

(parted) mklabel
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No? yes                                                               
New disk label type?  [gpt]? gpt                                          
(parted) print                                                            
Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags

(parted) mkpart                                                           
Partition name?  []? [Enter]
File system type?  [ext2]? [Enter]
Start? 0
End? 2000GB
(parted) print
Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  2000GB  2000GB

(parted) set 1 raid on
(parted) print
Model: ATA Hitachi HDS72202 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  2000GB  2000GB                     raid

(parted) quit
Information: You may need to update /etc/fstab.  


これをsdb,sdc,sdd でも繰り返します。

これで再起動するとはやり現れます。

[    7.145004]  md0: unknown partition table

そして、マウントします。


# bonnie++ -u root -b -d /st1/nao/tmp

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fs               4G 70546  93 206169  34 71823  19 56805  89 225009  27 182.7   0




ここまで乗りかかったので、ついでに、RAIDの構築オプションを変えて
構築し直してみます。


構築し直すためには、

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

のステップを踏みます。


# umount /st1

# mdadm --misc --stop /dev/md0

# mdadm --misc --zero-superblock /dev/sd[abcd]1

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

デフォルトでは、chunk size = 64kbですが、128kb にしてみました。

resync完了後、フォーマットします。

chunk size = 128kb にしたので、stride = 128, stripe-width = 512 に指定します。

# mke2fs -t ext4 -m 0 -E stride=128,stripe-width=512 /dev/md0

mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
244195328 inodes, 976757184 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
29809 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


自動的にblock size = 4096 でフォーマットされました。

これでマウントして、

# bonnie++ -u root -b -d /st1/nao

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fs               4G 68201  97 206894  36 71065  18 57637  85 147445  19 169.3   0



と、Readが明らかに低下しました。

そこで、stride = 128, stripe-width = 512 を指定しないでフォーマットし直してみます。


# mke2fs -t ext4 -m 0 /dev/md0
mke2fs 1.41.9 (22-Aug-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
244195328 inodes, 976757184 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
29809 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848, 512000000, 550731776, 644972544

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


そして、再度。。
# bonnie++ -u root -b -d /st1/nao

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fs               4G 73175  97 204599  37 71022  19 60744  88 163908  22 168.0   0


・・と若干Read向上。

やっぱりデフォルト値が最適ですか。。
最近よくハマるパターンです。


あれこれやるより「デフォルト値最適説」


ということで、chunk size = 64 で再度、RAID構築しなおします。

ほんとうは、

layout option も試したかったんだけどな。。



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

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

ES34069-BK-180 でソフトウェアRAIDを構築しました [LinuxでSoftware RAID]

そういえば、購入前に気にしていた、電源容量の問題は、
大丈夫でした。
ぎりぎりといいますか、ちょっと不足していましたが、
なんとか起動し、RAIDも構築できました[るんるん]

RAID10の構築は普通に mdadm を使います。

/dev/sda,adb,adc,addを使って構築します。

まず、各ディスク目一杯に1つパーティションを切ります。

。。。というところで、このブログを書いていた、iMacが落ちたので、
メモっていた詳細は割愛。

IMG_1119.JPG

あー、しょっく[たらーっ(汗)]
たぶん原因は、

I-O DATA Mac用 USB接続 地上デジタル対応TVキャプチャBOX「m2TV」 GV-MACTV

I-O DATA Mac用 USB接続 地上デジタル対応TVキャプチャBOX「m2TV」 GV-MACTV

  • 出版社/メーカー: アイ・オー・データ
  • メディア: エレクトロニクス
これのせい。
よく落ちるので道連れにされたのでしょう。。
全くひどい代物です。

IO DATAの製品でまともなのに当たらないのは偶然?


2TBをぎりぎり超えてるかどうか不明なので、パーティションはpartedで切りました。
2TB以下ならfdiskで切れます。

RAIDを構築してからフォーマットするので、個別のパーティションをフォーマット
する必要はありません。

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

この呪文で、4つのパーティションでRAID10が構築され、syncが始まります。
寝ている間に終わったのでわかりませんが、5時間くらい掛かった模様です。

man mdadm.conf を見てもよくわからなかったのですが、

# mdadm --examine --scan

ARRAY /dev/md0 level=raid10 num-devices=4 UUID=fa0cdaa4:35dc9145:883fc9c1:0b6673d2

の結果をmdadm.confに書いておけ、とあちこちで言われているので、とりあえず
書いておきます。
あとで詳しく調べます。

構築が終わったら、

# mkfs.ext4 -m 1 /dev/md0

して、フォーマットします。

すべて完了したところで、

# mdadm --detail /dev/md0

/dev/md0:
        Version : 00.90
  Creation Time : Wed Mar 31 06:07:14 2010
     Raid Level : raid10
     Array Size : 3907028864 (3726.03 GiB 4000.80 GB)
  Used Dev Size : 1953514432 (1863.02 GiB 2000.40 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Apr  1 00:15:00 2010
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

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

           UUID : fa0cdaa4:35dc9145:883fc9c1:0b6673d2 (local to host ss)
         Events : 0.18

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
       2       8       33        2      active sync   /dev/sdc1
       3       8       49        3      active sync   /dev/sdd1


OKそうです(^^)

軽くベンチマークをとりましたが、CG-HDC4EU3500でRAID10を
構築したときとほとんど同じパフォーマンスでした。

ちなみに、4基のディスクは
product6213780907.jpg
左上 Disk1  右上 Disk3
左下 Disk2  右下 Disk4
となっています(ディスクの上にある小さい●の数で表しているようです)

これに対して、

左上 sdd 右上 sdc
左下 sdb 右下 sda

と割り当てられています。

ま、これはSATAコネクタの接続を変えればなんとでもなりますが。
デフォルトではこんなところです。


とりあえず、なんとか動くところまできたので、バックアップしておいた
ファイルたちを戻すことにします[揺れるハート]

USBメモリでRAIDに挑戦2 ☆ もちろんLinuxで。 [LinuxでSoftware RAID]

前回は、インストール済みUbuntuをRAID1構成に変更しようとしたのですが、
あえなく、失敗してしまいました(>_<)

理由はよくわかりませんが、起動の初期段階でソフトウェアRAIDが起動し、
/dev/md1が構成されてなければならないはずなのですが、どうやら、うまく
いっていないのが原因のようです。

そこで、発想を切り替えて、といえば聞こえはいいですが、
早い話(^^;)あきらめて、インストール段階でRAIDの設定ができる
ディストリビューションでインストールし直すことにしました ♪

たしか、Fedora11は起動時にRAID構成を選べたはずです。

はい、こんな感じで設定できます↓

IMG_0396.jpg

このあと、詳細オプションから、ブートローダのインストール先を
指定します。

そして、インストール、再起動。。。。。
。。。
 。。。
  。。。
あららら、Ubuntuのときと同じように、起動できません。とほほ。

Fedora11もしばらく、レスキューモードから起動して、あれや
これやと試行錯誤しますが、やはりダメです〜 

えーっと、他に、インストール時にRAIDを構成できそうな、
ディストリビューションは。。と

おやおや、OpenFilerもRAID構成がインストール時に選べそうです。
OpenfilerはNASに特化したディストリビューション?です。

Openfiler

FreeNASでもよかったのですが、eSATAボードがRC版でしか
対応していないのと、Openfilerの方がファイル転送のスピードが
速いようですので、Openfilerを選びました☆

さて、さて、さっそく。。。

ISOダウンロード
CDつくって
インストールして
再起動して

はい、はい、いつも通り、きどうできません(^^;)

Ubuntu9.04,Fedora11はブートローディングで失敗するのですが、
Openfilerはもう少し先まで起動して、はやり/dev/md1がないよん♪
といって、そこで停止です。

またまた粘ってみましたが、やはーり、無理!

さて、さて、あとは一応CentOSとUbuntuのServer版のISOを
ダウンロードしてあります。(^_^)
準備だけは万全!

では、Ubuntu Server版からいってみましょー
Server版って完全にCUIなんですよね。なつかしいインストーラーです。
Desktop環境が一切ないので、インストール容量が少なくてすみます。
実質、700MBほどでしょうか。
ですので、1GBのUSBメモリでもOKですね。

さてさて、インストールは順調に完了し、もう完全に緊張感のかけらも
なくなってきた、再起動です(^^;)



さてさて。。。。
。。。
 。。。
  。。。


わっ!
うごいてる!

そっこーで起動です!!

かなりあっさーり、インストール&起動でした。

起動時には↓こんな感じで、2つのUSBメモリが同時に明滅します♪
白い方のUSBメモリの明滅がコントラストの関係でよく見えませんが。。


というわけで、USBでRAIDを構成するベストチョイスは

Ubuntu 9.04 Server版

です!!!

もちろん、Desktop環境は一切インストールされていませんので、
完全にサーバー用ですが。。。

ちゃんと、sambaもうごいています(^^)v

あーこれで、かなりすっきりです☆

しかし、まだまだ、やることが、、、
・肝心のファイル転送ベンチマーク
とか
・USBメモリ故障時の対応
とか
もりもりです(^^;)



USBメモリでRAIDに挑戦 ☆ もちろんLinuxで。 [LinuxでSoftware RAID]

さてさて。ふつーにUbuntuをUSBメモリにインストールできた
わけなのですが、

IMG_0314.jpg
こんなかんじですから、フロントのUSBポートが一つあいています ♪

で、あればもう一つUSBメモリをさしたくたくなっちゃいます。
それで、電源をONすると、こんな感じです↓

IMG_0383.jpg

すてきじゃないですか〜☆

同じ容量の4GBのUSBメモリです。当然??RAIDをくみたくなります♪

Ubuntuには標準でソフトウェアRAIDのコントロールツールmdadmが
入っていないので、apt-getします。


まずは
mountコマンドと、/devに追加されたファイルから、状況把握。

/dev/sdb → 新たに追加したUSBメモリ
/dev/sdc → UbuntuをインストールしたUSBメモリ

こんな感じで、構成します。

1.
RAID1を構成するために、まずはsdc→sdbへパーティション構成も
全く同じにして、全ファイルをコピーします。

2.
/dev/sdbだけで、/dev/mdを構成します。

3.
/dev/md1から起動します。

4.
/dev/md1に/dev/sdcを追加します。

以下、ほぼ記憶に頼って書いているので、おおいにはしょっています。
ご了承を(^^;)

まずは、/dev/sdcの構成の確認と、システムタイプの変更です。

root@fs:/home/nao# fdisk /dev/sdc

コマンド (m でヘルプ): p

ディスク /dev/sdc: 4016 MB, 4016046080 バイト
ヘッド 255, セクタ 63, シリンダ 488
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0x90909090

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdc1   *           1         451     3622626   83  Linux
/dev/sdc2             452         488      297202+  82  Linux スワップ / Solaris


コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!


次に、/dev/sdbも同じ構成にします。


root@fs:/home/nao# fdisk /dev/sdb

このディスクのシリンダ数は 3486 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
   (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): p

ディスク /dev/sdb: 4016 MB, 4016046080 バイト
ヘッド 90, セクタ 25, シリンダ 3486
Units = シリンダ数 of 2250 * 512 = 1152000 バイト
Disk identifier: 0x00000000

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdb1               4        3487     3917824    b  W95 FAT32


ヘッド、セクタ、シリンダ、Disk identifierが異なりますので、
上級者コマンドで変更します。


コマンド (m でヘルプ): x

上級者コマンド (m でヘルプ): m
コマンドの動作
   b   領域内のデータの先頭に移動する
   c   シリンダ数を変更する
   d   領域テーブル内の生データを表示する
   e   拡張領域をリスト表示する
   f   領域の順序を適正化する
   g   IRIX (SGI) 領域テーブルを作成する
   h   ヘッド数を変更する
   i   change the disk identifier
   m   このメニューを表示する
   p   領域テーブルを表示する
   q   変更を保存せずに終了する
   r   メインメニューに戻る
   s   セクタ数/トラックを変更する
   v   領域テーブルを照合する
   w   テーブルをディスクに書き込み、終了する

上級者コマンド (m でヘルプ): h
ヘッド数 (1-256, 初期値 90): 255

上級者コマンド (m でヘルプ): s
セクタ数 (1-63, 初期値 25): 63
警告: DOS 互換のためのセクタオフセットを設定します

上級者コマンド (m でヘルプ): c
シリンダ数 (1-1048576, 初期値 3486): 488

上級者コマンド (m でヘルプ): i
New disk identifier (current 0x00000000): 0x90909090
Disk identifier: 0x90909090

上級者コマンド (m でヘルプ): r

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 1
領域 1 は定義済です。まずは削除を行なってください。

コマンド (m でヘルプ): d
選択した領域 1

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)

領域番号 (1-4): 1
最初 シリンダ (1-488, 初期値 1): 1
Last シリンダ, +シリンダ数 or +size{K,M,G} (1-488, 初期値 488): 451

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (452-488, 初期値 452): 
初期値 452 を使います
Last シリンダ, +シリンダ数 or +size{K,M,G} (452-488, 初期値 488): 
初期値 488 を使います

コマンド (m でヘルプ): p

ディスク /dev/sdb: 4016 MB, 4016046080 バイト
ヘッド 255, セクタ 63, シリンダ 488
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0x90909090

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdb1               1         451     3622626   83  Linux
/dev/sdb2             452         488      297202+  83  Linux

コマンド (m でヘルプ): t
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): 82
領域のシステムタイプを 2 から 82 (Linux スワップ / Solaris) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sdb: 4016 MB, 4016046080 バイト
ヘッド 255, セクタ 63, シリンダ 488
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0x90909090

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdb1               1         451     3622626   83  Linux
/dev/sdb2             452         488      297202+  82  Linux スワップ / Solaris

コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): fd
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): p

ディスク /dev/sdb: 4016 MB, 4016046080 バイト
ヘッド 255, セクタ 63, シリンダ 488
Units = シリンダ数 of 16065 * 512 = 8225280 バイト
Disk identifier: 0x90909090

デバイス ブート     始点        終点    ブロック   Id システム
/dev/sdb1               1         451     3622626   fd  Linux raid 自動検出
/dev/sdb2             452         488      297202+  82  Linux スワップ / Solaris

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

root@fs:/home/nao# mdadm --create --auto=md --level=1 --raid-devices=2 /dev/md1 /dev/sdb1 missing
root@fs:/home/nao# mkfs -t ext3 /dev/md1
root@fs:/home/nao# mkdir /mnt/root
root@fs:/home/nao# mount /dev/md1 /mnt/root
root@fs:/home/nao# rsync -aH --one-file-system / /mnt/root
root@fs:/home/nao# vi /boot/grub/menu.lst

"root=/dev/sdc1" → "root=/dev/md0"に変更。
UUIDを/dev/sdb1のUUIDに修正。
UUIDの調べ方は、

root@fs:/home/nao#/ lib/udev/vol_id -u /dev/sdb1

root@fs:/home/nao# update-grub
root@fs:/home/nao# viu /etc/fstab

"/dev/sdc1" → "/dev/md0"に変更。

最後に、ブートローダーをインストールします。

root@fs:/home/nao# grub

grub> device (hd0) /dev/sdb
grub> setup --stage2=/boot/grub/stage2 (hd0) (hd0,0)
grub> quit

そして、再起動です。。。
起動しません(;;)
/dev/md1がないと、おこられてしまします。

UbuntuのCDのレスキューモードでの起動にはmdadmが入っていないので、
Fedora11のDVDのレスキューモードで起動して、

/boot/grub/menu.lst 
/etc/mdadm/mdadm.conf

など、あらゆるパラメータをいじりましたが、起動しないので。
方向性を変えます。

最初から、RAID1でインストールすることにします。

つづく。







LinuxでSoftware RAID ブログトップ

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