2007年7月12日木曜日

ZFSでRAIDZを作成する

RAID Zで作成する方法。
RAIDZはRAID5に近い方法で、パリティをつくりデバイスの冗長性を担保する。
ソフトウェアRAID5は書き込みが遅く悪名をとどろかしたが、RAIDZの性能は比較的良いようである。


後で拡張できるかを確かめたいので、とりあえず1つディスクを余らせて作ってみる。コマンド1つでできて簡単だ。

 # zpool create zfsz raidz c0t0d0s0 c0t0d0s1 c0t0d0s3 c0t0d0s4 c0t0d0s5

 ----確認
 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 24.9G 87K 24.9G 0% ONLINE -

  →5GB×5で25GBになっている。パリティ的なものはないのかな?

 # zpool status
  pool: zfsz
  state: ONLINE
  scrub: none requested
 config:
 
  NAME STATE READ WRITE CKSUM
  zfsz ONLINE 0 0 0
  raidz1 ONLINE 0 0 0
  c0t0d0s0 ONLINE 0 0 0
  c0t0d0s1 ONLINE 0 0 0
  c0t0d0s3 ONLINE 0 0 0
  c0t0d0s4 ONLINE 0 0 0
  c0t0d0s5 ONLINE 0 0 0
 
 errors: No known data errors

→5GBが5本組み込まれている。


 ----とりあえずファイル作成
 # timex mkfile 1g hogehoge
 
 real 2:06.93
 user 0.34
 sys 16.57
 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 24.9G 1.25G 23.6G 5% ONLINE -


→1GBを作ったのに、1.25GB消費したことになっている。パリティ分余慶に消費したということみたい。

 # df -h /zfsz
 Filesystem size used avail capacity Mounted on
 zfsz 20G 1023M 19G 6% /zfsz


→良くみるとサイズは20GBになっている。zpoolとdfではサイズの考え方が違っているようだ。どっちでもいいがわかりにくい。


 ---- ディスクをとりあえず追加してみる
 # zpool add -f zfsz c0t0d0s6
 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 29.8G 1.25G 28.6G 4% ONLINE -
 > sudo zpool status
  pool: zfsz
  state: ONLINE
  scrub: none requested
 config:
 
  NAME STATE READ WRITE CKSUM
  zfsz ONLINE 0 0 0
  raidz1 ONLINE 0 0 0
  c0t0d0s0 ONLINE 0 0 0
  c0t0d0s1 ONLINE 0 0 0
  c0t0d0s3 ONLINE 0 0 0
  c0t0d0s4 ONLINE 0 0 0
  c0t0d0s5 ONLINE 0 0 0
  c0t0d0s6 ONLINE 0 0 0
 
 errors: No known data errors
 # df -h /zfsz
 Filesystem size used avail capacity Mounted on
 zfsz 24G 1023M 23G 5% /zfsz


→zpool statusを見る限り、変な形で追加されているようにもみえる。
zpool listでは使用量が変化していない。RAIDZにもし組み込まれているのであれば、パリティ率も変化するのでサイズも変化しているが、ここに変化は見られない。やっぱりRAIDZ+コンカチ見たいになっているようだ。。。。失敗!!
とりあえず、取り除いて、作り直す。


 # zpool remove zfsz c0t0d0s6
 cannot remove c0t0d0s6: only hot spares can be removed

  →removeできないとおっしゃるようで。

 # zpool offline zfsz c0t0d0s6
 cannot offline c0t0d0s6: no valid replicas


→offlineもききません。removeもofflineも聞かないとなると、戻すコマンドはない。
この辺はまづいつくりですね。もう一度作り直し。。。


 # zpool destroy zfsz

 ---- 再作成、今度はaddの後にraidzを指定する
 # zpool create zfsz raidz c0t0d0s0 c0t0d0s1 c0t0d0s3 c0t0d0s4 c0t0d0s5
 # zpool add zfsz raidz c0t0d0s6
 invalid vdev specification: raidz requires at least 2 devices

→addするには2つ以上のデバイスが必要らしい。もう一度やり直し。

 # zpool destroy zfsz

 ---- 今度は追加デバイスを2個用意する
 # zpool create zfsz raidz c0t0d0s0 c0t0d0s1 c0t0d0s3 c0t0d0s4
 # zpool add -f zfsz raidz c0t0d0s5 c0t0d0s6
 ---- 確認
 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 29.8G 287K 29.8G 0% ONLINE -

 # zpool status
  pool: zfsz
  state: ONLINE
  scrub: none requested
 config:
 
  NAME STATE READ WRITE CKSUM
  zfsz ONLINE 0 0 0
  raidz1 ONLINE 0 0 0
  c0t0d0s0 ONLINE 0 0 0
  c0t0d0s1 ONLINE 0 0 0
  c0t0d0s3 ONLINE 0 0 0
  c0t0d0s4 ONLINE 0 0 0
  raidz1 ONLINE 0 0 0
  c0t0d0s5 ONLINE 0 0 0
  c0t0d0s6 ONLINE 0 0 0
 
 errors: No known data errors

→よくわからないことになっている。とりあえず書き込みテストしてみる。

 # timex mkfile 1g hogehoge
 
 real 2:31.86
 user 0.34
 sys 16.29

→なんか少し遅い。。

 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 29.8G 1.50G 28.3G 5% ONLINE -

→1.5GB使用ということは1.5倍なので、3本RAID5みたいなことになっている。。

 # df -h /zfsz
 Filesystem size used avail capacity Mounted on
 zfsz 20G 1.0G 19G 6% /zfsz

→使用できる容量が20GBということは4本分。最初の4本RAIDZで3本分、次の2本RAIDZで1本分の計4本ということのようだ。つまり、RAIDZのストライピングみたいになっているようだ。


 ==== きれいな形にするので、もう一回作り直し
 # zpool destroy zfsz
 # zpool create zfsz raidz c0t0d0s0 c0t0d0s1 c0t0d0s3 c0t0d0s4 c0t0d0s5 c0t0d0s6
 ---- 確認
 # zpool list
 NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 zfsz 29.8G 85K 29.7G 0% ONLINE -
 # zpool status
  pool: zfsz
  state: ONLINE
  scrub: none requested
 config:
 
  NAME STATE READ WRITE CKSUM
  zfsz ONLINE 0 0 0
  raidz1 ONLINE 0 0 0
  c0t0d0s0 ONLINE 0 0 0
  c0t0d0s1 ONLINE 0 0 0
  c0t0d0s3 ONLINE 0 0 0
  c0t0d0s4 ONLINE 0 0 0
  c0t0d0s5 ONLINE 0 0 0
  c0t0d0s6 ONLINE 0 0 0
 
 errors: No known data errors

→できた。でもオンラインでの追加は難しいようだ

0 件のコメント: