zfs raidz on FreeBSD8.2 with Rocket Raid 2720
先週(?)IYHしたRocketRaid2720を使ってFreeBSD8.2上でzfs raidzの構築とベンチなメモ
最初にひっかかった問題とバグ
rr2720_bios_v10 > sata600対応ドライブ(WD20EARX)でもsata300表示される(実際は600で動いてる > jbodをディスクごとに作ってもCHECKSUM ERRORが起きる > raid arrayを組んでもFreeBSD8.2の/devに<del>生えてこない</del> >>追記: gの人「生えてきます。hptraidconfでステータスが見れないのでデグレに気づかないと終わり」 gの人「そもそもhptraidconfのバージョンが古い」 > non-rayd biosを使ってもFreeBSD8.2の/devに生えてこない > S.M.A.R.Tとれなくね? > Initializedかnewにしかならない >> newの状態でRAIDBIOS(Ctrl+H)からInitializeすればInitializedのstatusになる
rr2720_bios_v12 > jbodがディスク1本で作れない > raid0,raid1もディスク2本ずつで作れたのが認識してるドライブ全体を 使わないと作れない > Initializedかnewにしかならない (ry
対策方法
MBRもしくはGPTで初期化を必ず行う zfsをディスク先頭から使うのを諦める(MBR|GPT->zfsでディスク先頭から始まる)
以降手順をつらつらと書きマッスル
手順その1下準備編
まず最初にディスク(WD20EARX)をFreeBSD8.2で認識させないことには何も始まらないので
legacyとしてrr2720に認識させる必要がある。
ケーブルはずすのまんどくせな人用
説明しよう(CV:誰か)
MBR/GPTで初期化したディスクはRAID BIOSでもlegacyとして認識できるが
RR2720に繋いだ状態でMBR/GPT初期化したくても、new/initializedで認識されていれば
arrayを組まないと生えてこない。
なので別の環境/カードで初期化する必要があるため。
# gpart create -s gpt /dev/XXX # XXX created # gpart add -b 40 -t freebsd-zfs /dev/XXX gな人「(-b 40はAFTなディスクに対するおまじない。512B/sectorの場合は-b 34にする)」 ※ XXXはデバイス名
WD15EARSでのベンチ結果
# dd if=/dev/zero of=dev/ad5p1 bs=1m count=1024 1048+0 records in 1048+0 records out 1098907648 bytes transferred in 11.128260 secs (96487846 bytes/sec) # dd if=/dev/urandom of=dev/ad5p1 bs=1m count=1024 1048+0 records in 1048+0 records out 1098907648 bytes transferred in 22.273503 secs (48207137 bytes/sec)
手順その2(ドライバの導入)
某所ログからの甜菜
glxxxxxx > $ cd /tmp && fetch http://www.highpoint-tech.cn/BIOS_Driver/rr272x_1x/FreeBSD/rr272x_1x-bsd-8.0-v1.0.10.0108.tgz glxxxxxx > $ mkdir /tmp/rr2720 glxxxxxx > $ cd /tmp && mv rr272x* rr2720/ && cd rr2720 glxxxxxx > $ tar zxf rr272x_1x-bsd-8.0-v1.0.10.0108.tgz glxxxxxx > アーキテクチャにあわせてドライバーをコピーする glxxxxxx > $ cp rr272x_1x-8.0-amd64.ko /boot/kernel/rr272x_1x.ko glxxxxxx > 起動時にドライバーがロードされるようにloader.confを弄る glxxxxxx > $ echo rr272x_1x_load=\"yes\" >> loader.conf glxxxxxx > ドライバーを入れたら一度シャットダウンして、RR2720とさっきフォーマットしたHDDを繋いで起動する glxxxxxx > 起動時のRAID BIOSの画面で、各HDDがlegacyとして認識されていればOK glxxxxxx > 起動後、/devの下に da[0-9]* と da[0-9]p1 が生えているか確認する glxxxxxx > 生えていれば正常に認識されている glxxxxxx > da[0-9]*とda[0-9]p1が認識されていればzfsのプールを作成する glxxxxxx > da[0-3]p1を使いtankという名前でRAID-Zを組む場合 glxxxxxx > $ zpool create tank raidz da0p1 da1p1 da2p1 da3p1 glxxxxxx > mount もしくは df で /tank が認識されていれば成功
番外S.M.R.Tの情報が知りたいですしおすし
某所ログからの甜(
glxxxxxx > SMARTを読む glxxxxxx > smartmontoolsを入れる glxxxxxx > $ pkg_add -r smartmontools glxxxxxx > パスが通っているとこのコマンド名のキャッシュをリフレッシュ glxxxxxx > $ rehash glxxxxxx > SMARTを読む glxxxxxx > RR2720のデバイス名が /dev/rr272x_1x で ポート1のSMARTを読む場合 glxxxxxx > # smartctl -a -d hpt,1/1 /dev/rr272x_1x glxxxxxx > (1/1の部分はL/Mとして、LはコントローラーID、Mはチャンネル番号) glxxxxxx > ディスクが複数の場合はMの部分を変えていけば順次取れる glxxxxxx > SMART値のみ取りたい場合は -a の代わりに -A を使う
わっち的補足っぽいもの
- よいこのみんなはsmartctlをsuで行うこと
- L/Mな順番はRocketRAID BIOS Setting画面のChannelに対応?(2枚持ってないので要確認
番外編の番外編(計測ツールのいんすこ)
パフォーマンス計測のためいくつかツールを導入しまっする。
ネットワークのリアルタイムトラフィックを取得する(sambaによるwrite速度計測など)
glxxxxxx > vnstatを入れる glxxxxxx > $ pkg_add -r vnstat glxxxxxx > $ rehash glxxxxxx > $ vnstat -l -i [if_name] glxxxxxx > -l はリアルタイム表示 glxxxxxx > -i はインターフェース指定 glxxxxxx > if_nameにifconfigで取れるインターフェース名を入れる interfacenaemeはifconfigあたりでとってくだしあ
zpoolのio状況確認
glxxxxxx > $ zpool iostat glxxxxxx > iostat の後ろに数字をつけるとその秒間で自動更新がかかる glxxxxxx > 1秒毎なら glxxxxxx > $ zpool iostat 1 glxxxxxx > システムにぶら下がってるディスクのio状況を見る glxxxxxx > $ systat -iostat glxxxxxx > -iostat の後ろに数字をつけるとその秒間で自動更新がかかる glxxxxxx > 1秒毎なら glxxxxxx > $ systat -iostat 1 glxxxxxx > ステータス表示中に :number と入力するとグリッドっぽい感じになる glxxxxxx > 詳しくはman systatのiostat参照 glxxxxxx > システムのアレやナニを見る glxxxxxx > $ systat -vmstat glxxxxxx > -vmstat の後ろに(ry glxxxxxx > (ry
$ zpool iostat
capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ----- tank 1.34G 7.25T 0 0 8 39
$ systat -vmstat
2 users Load 0.00 0.00 0.00 Jul 10 03:56 Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER Tot Share Tot Share Free in out in out Act 18640 6064 236696 7016 7930100 count All 120440 6536 1074060k 10188 pages Proc: Interrupts r p d s w Csw Trp Sys Int Sof Flt cow 4000 total 19 354 5 46 2 137 4 4 zfod uhci3+ 16 ozfod 1 uhci0 ehci 0.0%Sys 0.0%Intr 0.0%User 0.0%Nice 100%Idle %ozfod 1999 cpu0: time | | | | | | | | | | | daefr 1 ale0 256 prcfr 1999 cpu1: time 4 dtbuf totfr Namei Name-cache Dir-cache 206501 desvn react Calls hits % hits % 583 numvn pdwak 10 10 100 35 frevn pdpgs intrn Disks da0 da1 da2 da3 ad4 pass0 pass1 152668 wire KB/t 0.00 0.00 0.00 0.00 16.00 0.00 0.00 10448 act tps 0 0 0 0 0 0 0 9396 inact MB/s 0.00 0.00 0.00 0.00 0.01 0.00 0.00 36 cache %busy 0 0 0 0 0 0 0 7930064 free 14288 buf
$ zpool iostat -v
capacity operations bandwidth pool used avail read write read write ---------- ----- ----- ----- ----- ----- ----- tank 1.34G 7.25T 0 0 5 28 raidz1 1.34G 7.25T 0 0 5 28 da0p1 - - 0 0 221 22 da1p1 - - 0 0 281 19 da2p1 - - 0 0 281 23 da3p1 - - 0 0 280 21 ---------- ----- ----- ----- ----- ----- -----
続くんじゃよ