2011年07月03日 15:00 [Edit]

FreeBSD - でV型八磁筒RAID-Z2(笑)

freebsd-logo

というわけでまた作ってしまった。

404 Blog Not Found:備忘録 - HP ProLiant MicroServer + FreeBSD + ZFS
結論から言うと、HP ProLiant MicroServer でディスク4本の場合はRAID10かRAID-Zがおすすめ。というよりRAID-Z2はちょっと荷が重い感じ。やはり2GHz以上のCPUと6本以上のHDDが欲しい。

こんなの。

z2v8

というわけで、以下レシピ。

材料

4コア入りパソコン
とりあえず私が入手したのはこちら。 OS抜き、店頭在庫ありで、ロープロファイルでなくてもPCI(-express)カードが刺さる中で一番小さなものというのが条件。もったいないので元々の2G RAM x 2は4G RAM x 2にしてもらった以外、そのまま。HDDを割愛してもらうの忘れた><
PC3-10600 DIMM 4GB x 2枚セット
これでメモリーは16GBに。
SATA-3対応のSSD、容量120GB程度
起動+L2ARC+Zil用 後述するが、今回の構成ではL2ARCの効用はあまり出ない。あくまでお試しということで。
Sii3132の入ったeSATAカード
二枚買ったのだが、一枚で十分だった。これまた後述。
3.5" SATA HDDが4本入る外付け箱 x 2
RAID機能はもちろん不要。
3.5'' 2TB HDD x (4+1)
どうやら現在 WD20EARS が WD20EARX (SATA-3対応)に切り替わる時期のようなのだが、どちらでもかまわない。どちらもSATA-3どころかSATA-1でも余裕の速度しか出ないのだし。シークエンシャルで80MBps行けば御の字で、私のiMacに入っているSeagate 1TBに余裕で負ける。が、八磁筒ならそれでもかまわない。これまた後述。

調理法

ハードウェア

箇条書きにするまでもない。不要なパーツをパソコンから取り除き、SSDをSATA-3ポートにとりつけ、裸族の集合住宅をeSATAケーブルでつなぎ、まっぱのHDDを集合住宅につっこむだけ。

ソフトウェア

こちらも奇をてらったところはほとんどない。

  • FreeBSD 8-StableをIntel SSDにインストール。インストーラーは使わず、起動可能なUSBメモリーからまず起動し、zpoolをSSD側に作ってからUSBメモリーの内容をぶちまけ、/boot/loader.conf/etc/rc.confの中身を編集するというやりかたをとった。ZFSインストールをまだFreeBSDがサポートしていない現状では、これが一番楽である。
    • gpart show
      =>       34  234441581  ada8  GPT  (111G)
               34        128     1  freebsd-boot  (64k)
              162  100663296     2  freebsd-zfs  (48G)
        100663458   67108864     3  freebsd-zfs  (32G)
        167772322   16777216     4  freebsd-zfs  (8.0G)
        184549538   49892077        - free -  (23G)
      

      未使用領域を残しているのは、ウェアレベリング対策。

      ここでada8と出てきているが、これこそがルートもZFS化しておくべき一番の理由である。port multiplierを使っている場合、外付けディスクがある場合とない場合でこの番号が変わってしまうのだ。ZFSであればどちらの場合でも「ada0が見つからない」と怒られる心配はない。

      パーティションする際、きちんとラベル名を決めておくとなおよい。

      gpart show -l
      =>       34  234441581  ada8  GPT  (111G)
               34        128     1  (null)  (64k)
              162  100663296     2  zoot  (48G)
        100663458   67108864     3  l2arc  (32G)
        167772322   16777216     4  zil  (8.0G)
        184549538   49892077        - free -  (23G)
      
      こうしておくと、これらのパーティションはadaNpMとかではなく、/dev/gpt/labelとラベル名でアクセスできるようになる
  • AFT対策 の通り。
  • zpool作成
    # zpool create tank ada*.nop
    # zpool add cache gpt/l2arc
    # zpool add log gpt/zil
    
    もちろんraidz2で
      pool: tank
     state: ONLINE
     scan: none requested
    config:
    
    	NAME          STATE     READ WRITE CKSUM
    	tank          ONLINE       0     0     0
    	  raidz2-0    ONLINE       0     0     0
    	    ada0.nop  ONLINE       0     0     0
    	    ada1.nop  ONLINE       0     0     0
    	    ada2.nop  ONLINE       0     0     0
    	    ada3.nop  ONLINE       0     0     0
    	    ada4.nop  ONLINE       0     0     0
    	    ada5.nop  ONLINE       0     0     0
    	    ada6.nop  ONLINE       0     0     0
    	    ada7.nop  ONLINE       0     0     0
    	logs
    	  gpt/zil     ONLINE       0     0     0
    	cache
    	  gpt/l2arc   ONLINE       0     0     0
    

    8本ストライプのraidz2でも、Core i5なら余裕。書き込みMAXでもload averageが2程度、読み込みなら1を下回る。ちなみにCPUのクロックはpowerdを使えば最低200MHzまで落ちる。Athlon II Neoの100MHzにはかなわないが、Xeonの800MHzとかよりずっといい。

課題

というわけで、BUFFALO テラステーション プロ 8ドライブモデル 16TB NAS TS-8VH16TL/R6の半額で16TB RAID6 (実効容量12TB)ができあがっちゃったわけだが、課題もなきにしもあらず。

USB 3.0が使えない

8.2-RELEASEでxhciドライバーが使えることにはなっているのだが…

xhci0:  mem 0xfe500000-0xfe507fff irq 18 at device 0.0 on pci2
xhci0: [ITHREAD]
xhci0: Driver does not support 64-byte contexts.xhci0: XHCI halt/start/probe failed err=18
device_attach: xhci0 attach returned 6
xhci1:  mem 0xfe400000-0xfe407fff irq 19 at device 0.0 on pci3
xhci1: [ITHREAD]
xhci1: Driver does not support 64-byte contexts.xhci1: XHCI halt/start/probe failed err=18
device_attach: xhci1 attach returned 6

Renesasのチップはサポートしたみたいなのだが、TIのがまだだったみたい。

8-Stableでこうはなるのだけど…

xhci0:  mem 0xfe500000-0xfe507fff irq 18 at device 0.0 on pci2
xhci0: [ITHREAD]
xhci0: 64 byte context size.
usbus2 on xhci0
usbus2: 5.0Gbps Super Speed USB v3.0
xhci1:  mem 0xfe400000-0xfe407fff irq 19 at device 0.0 on pci3
xhci1: [ITHREAD]

外付けディスクをdaにattachしてくれない。

まあもとから期待していなかったのでeSATAカードを用意しといたのだけど。

真のホットスワップではない

裸族の集合住宅の一番惜しいところがそこ。

工夫と趣向と分別と。 – FreeBSDでeSATAのホットスワップは…
さっそくport multiplier箱でホットスワップを試してみたら、抜くときは問題なく一台だけdetachされるのだが、挿したときは同じportにつながっているディスクがすべてdetachされてしまい、改めて全ディスクがattachされた。

とはいえ、以下のようにすれば、コールドスワップまではしなくていい。

  • zpool export yourpool
  • ディスクを交換
  • zpool import yourpool
  • あとはホットスワップの場合と同じ

集合住宅のeSATAが遅い

大事な事を書き忘れていたのでここに。FreeBSDでSii3132のPort Multiplierを利用するには、/boot/loader.conf

siis_load="YES"

を加える。後からkldloadするのでは間に合わない。

eSATAカードを二枚刺ししたことは前述したが、バスがサチることを懸念してのことである。ところが裸族の集合住宅、どうも箱全体でSATA-1程度の速度しか出ない。OSが関係ないことはFreeBSD以外でもMacでもWindowsでも確認した。まあ、3GbpsといってもSATAは half duplex だし。

というわけで、ディスク8本でもeSATAカードは1枚で足りてしまう。eSATAケーブルを分けて刺しても同じカードに刺しても速度が変わらなかったのでこれは確定。vdev全体の速度は、どちらも240MBps程度。ディスク一本あたりだと30MBps程度で、よほど遅いディスクでもこの速度になる上、ランダムアクセスもARCのおかげでディスクではシークエンシャルになってしまう。

これはまたIntel SSDの書き込み速度の限界とほぼ等しい値でもあるので、L2ARCを使ったからといって書き込みはさほど速くならない。ただし読み込みは優位に差が見られる。sysctlでチューニングを施さなくてもアクセスが滑らかになる効用も。

しかしよく考えてみると、これでもGbEの二倍強で、実際なにをどうしようがNASとして使う限り、GbEでは速度限界の遥か下、実際GbEを真っ黒にしても、zpoolが余裕なのはアクセスランプを見ていればわかる。

eSATAカードが1枚でも足りるということは、2枚あれば集合住宅をもう二つ用意してしまうだけで憧れの16発RAIDが出来てしまうことになる。しかもここで使ったマザーボードは、マイクロタワーどころかコンパクト用のものだ。

10GbE NASへの展望

ところで今回のV型八磁筒RAIDは、NASを狙って作ったものではなく、今まで「汎用FreeBSD Box」として使っていた1U Dual Xeon Serverの代替品である。重要なのは速度ではなく省電力と低騒音。ディスクアレイ部分は「道草」。外付けしているのも「外してもシステムとして完結している」から。

その程度でもここまでいけるとなると、欲も出てくる。10GbEに耐えうるNASを作るとなったら一体どうなるか。妄想だけでもしておこうか。

  • マザーボードはPCI Express x 16が二つ以上、つまりグラフィックカードが二つ刺さるものに
  • 片方にはixとしてFreeBSDにもドライバーが用意されているIntel Pro/10GbEなカードを刺し
  • もう片方には4ポートのSASカード(PCI Express x 8、たとえばHIGHPOINT RocketRAID 2740)を刺し

なんて感じになると思うが、HP Proliant Microserverさえ内部的に使っているSASと比較して、10GbEの敷居の高さが突出している。ポートに至ってはCX4でいいのかTを待つべきなのかもまだはっきりとはしていないし、スイッチだけで20万円コースでは…

それでも、「その辺に転がっている部品の寄せ集め」でこさえた「なんちゃってディスクアレイ」でも、もはやGbEはのろすぎるというのは確かで、このあたりのギャップをなんとかしたいところではある。

Dan the Man with Too Much Storage to Fill

おまけ - カニの食わず嫌いはもうよそう

オンボードのGbEが

re0:  port 0xb000-0xb0ff mem 0xd0004000-0xd0004fff,0xd0000000-0xd0003fff irq 17 at device 0.0 on pci7

と認識されたときには「うげ」っと一瞬なったのであるが、右のグラフを見て欲しい。むしろbgeよりも速いぐらい。昔は「カニだけはやめとけ」「100Base-TXはde(turip)かfxp(intel)以外認めない」「GbEはem(intel)で決まり」という感じだったのだが、それも今は昔のようだ。


この記事へのトラックバックURL

この記事へのコメント
>> ここでada8と出てきているが、これこそがルートもZFS化しておくべき一番の理由である。port multiplierを使っている場合、外付けディスクがある場合とない場合でこの番号が変わってしまうのだ。ZFSであればどちらの場合でも「ada0が見つからない」と怒られる心配はない。

新マシンを組むついでに試してみたのですが、GPTでフォーマットすればUFSでもGPT Labelをfstabに書けますよ。

=> 34 1465146988 ada1 GPT (698G)
34 6 - free - (3.0k)
40 409600 1 EFI System Partition (200M)
409640 128 2 (null) (64k)
409768 268435328 3 uroot (128G)
268845096 16777216 4 uswap (8.0G)
285622312 1179524710 - free - (562G)

 /dev/gpt/uroot / ufs rw 1 1
/dev/gpt/uswap none swap sw 0 0

こんなかんじで。
Posted by goldfish_and_laser at 2011年09月19日 06:55