Amazonで24,800円だったので半周遅れぐらいで買ってみた。
いいね!
コバQことCobalt Qube復活した感じ。
とはいえ、ある程度工夫しないとFreeBSD + ZFSでは使いづらい。半周遅れだけあって、すでに先人の苦労の後を追検証していくだけでよかったのだけど。
追加部品

- PC3-10600 DIMM 4GB x 2枚セット
- 8GBで6000円ちょっと?そんな価格で大丈夫か?
- USBメモリ(高速タイプ)
- これが起動「ディスク」。右のようにして使う。8GBがちょうどいいのだけどたまたま在庫がなかったので16GBのやつを。
- 3.5'' 2TB HDD x (4+1)
- 何かとうわさの WD20EARS を。Amazonでも6000円ちょっと。最安値なら6000円を切る。同じ2TBでも1年半前の1/3ですか。一本は予備。
5インチベイに3.5インチHDDのリムーバルケースをつけるというのはまだやってない。
によると、本来CD-ROMでIDE互換モードのここをふつうのSATA2として使うためには、BIOSハックが必要なようだ。そこまでがんばるかなあというのが一つと、同一アレイのディスクを一台だけ別の場所に置くのもどうかな、と思ったので。きちんとやるならやはりSATAカード買って付けると思う。BIOSハックしてもPort Multiplier非対応のようだし。
BIOSの設定
デフォルトから一カ所変更するのは、[Advanced] → [IDE Configuration] Write CacheをOnにすること。これをしとかないといくらNCQを有効にしても速くならない。
FreeBSD-8.2-RELEASE-amd64のインストール
FreeBSD-8.2-RELEASE-amd64-memstick.imgを使って普通にインストールすればOK。あらかじめ他のマシンでやっておけば楽かも。私はVMWareでやった(笑)。二点だけ注意
- 起動パーティションは8GB以下にすること - そうでないと8GBの壁にぶつかる。i386では平気だったのに。久しぶりにこれで起動できない例にぶちあたった。
/boot/loader.conf
でkern.cam.boot_delay=10000
を指定 - 正面の外部USBポートだとこれも不要だったのだけど、写真のように中に指す場合はこれが必須。
ahciを有効に
カーネルを再構築している人も多く見受けられたのだけど、8.2-RELEASE現在では、GENERICのままでも/boot/loader.conf
でahci_load="YES"
を指定するだけでOK。
指定前
ad4: 1907729MBat ata2-master UDMA100 SATA 3Gb/s ad6: 1907729MB at ata3-master UDMA100 SATA 3Gb/s ad8: 1907729MB at ata4-master UDMA100 SATA 3Gb/s ad10: 1907729MB at ata5-master UDMA100 SATA 3Gb/s
指定後
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0 ada0:ATA-8 SATA 2.x device ada0: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes) ada0: Command Queueing enabled ada0: 1907729MB (3907029168 512 byte sectors: 16H 63S/T 16383C) ada1 at ahcich1 bus 0 scbus1 target 0 lun 0 ada1: ATA-8 SATA 2.x device ada1: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes) ada1: Command Queueing enabled ada1: 1907729MB (3907029168 512 byte sectors: 16H 63S/T 16383C) ada2 at ahcich2 bus 0 scbus2 target 0 lun 0 ada2: ATA-8 SATA 2.x device ada2: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes) ada2: Command Queueing enabled ada2: 1907729MB (3907029168 512 byte sectors: 16H 63S/T 16383C) ada3 at ahcich3 bus 0 scbus3 target 0 lun 0 ada3: ATA-8 SATA 2.x device ada3: 300.000MB/s transfers (SATA 2.x, UDMA6, PIO 8192bytes) ada3: Command Queueing enabled ada3: 1907729MB (3907029168 512 byte sectors: 16H 63S/T 16383C)
これでNCQも有効になり、ホットスワップも出来るようになる(HP公式ではノンホットプラグだけど)。
/boot/loader.conf
まとめ
この部分さえ適切に指定しておけば、あとは動かしながらでも調整できるのでまとめ。
kern.cam.boot_delay=10000 ahci_load="YES" zfs_load="YES" vfs.zfs.txg.timeout="5"
ここまでが事実上必須の設定で、残りはこんな感じ。NASとしてのみ使うのであればデフォルトのままでもいいけど、ちったあZFS以外にもメモリーを残しておくということで。
# Reserve Some memory for non-zfs tasks # http://d.akinori.org/2010/04/15/ # + Some Tweak kern.maxusers=512 vm.kmem_size="4G" vm.kmem_size_max="6G" vfs.zfs.arc_min="512M" vfs.zfs.arc_max="4G"
AFT対策
Write Cache有効の効果ほどではなかったけど、一応は。
/etc/rc.d/gnop_aft
を以下のとおり作成。#!/bin/sh # # Original: http://d.akinori.org/2010/04/15/ # renamed zfs_prepare to gnop_aft # PROVIDE: gnop_aft # BEFORE: zfs zvol . /etc/rc.subr name="gnop_aft" rcvar="gnop_aft_enable" start_cmd="gnop_aft_start" stop_cmd="gnop_aft_stop" #required_modules="geom_nop" aft_sector_size=4096 gnop_aft_start() { [ `$SYSCTL_N security.jail.jailed` -ne 1 ] || return 0 local dev for dev in $gnop_aft_devs; do gnop create -S $aft_sector_size $dev done } gnop_aft_stop() { [ `$SYSCTL_N security.jail.jailed` -ne 1 ] || return 0 local dev for dev in $gnop_aft_devs; do gnop destroy $dev.nop done } load_rc_config $name run_rc_command "$1"
mushaさんのオリジナルでは(portupgradeお世話になってます)、zfs_prepareという名前でしたがgnop自体はzfsとは無関係なのでrefactor。chmod +x /etc/rc.d/gnop_aft
を忘れずに/etc/rc.conf
に以下を追加# ATF workaround via GEOM NOP -- see /etc/rc.d/gnop_aft gnop_aft_enable="YES" gnop_aft_devs="ada0 ada1 ada2 ada3"
- 念のために再起動して
/dev/adaN.nop
が生えていることを確認 zpool create
でada*.nopを指定
で、ada*
ですが、パーティションは一切切らずに使っている。そこからブートするのであればとにかく、起動はUSBメモリーでやってるし、これならば交換ディスクは新品であれば刺すだけで使える。
ちなみに今まで別のどこかで使ったりしてパーティション済みのディスクは、
gpart destroy -F adan
すればOK。
zpoolを作成する
あとはzpoolを作成していろいろやってみればいいのだけど、実際どれにするか迷うところ。
結論から言うと、HP ProLiant MicroServer でディスク4本の場合はRAID10かRAID-Zがおすすめ。というよりRAID-Z2はちょっと荷が重い感じ。やはり2GHz以上のCPUと6本以上のHDDが欲しい。
とはいえ、私はこの非力な Athlon II Neo N36L というCPUが気に入った。AMDだけあって64bitにきちんと対応しているし(atomって対応しているのとそうでないのがあってわけがわからないよ)、未使用時にはただでさえ省電力なところにもってきて、powerd
使うと
# sysctl dev.cpu.0.freq dev.cpu.0.freq: 100
と100MHzまでクロックが落ちる。家庭で使うNASというのは普段実は何もしてないのだから、これは実に好都合。そうそう。FreeBSDでまだpowerd使ってない人は、
powerd_enable="YES" powerd_flags="-a adp -n adp"
とした上でsh /etc/rc.d/powerd start
しておくこと。今やノートパソコンだけではなくサーバーでもきちんと動きます。ポスト震災の新常識。

- Simple Stripe (RAID0)
- 1073741824 bytes transferred in 3.175971 secs (338083003 bytes/sec)
- Stripe of Mirrors (RAID10)
- 1073741824 bytes transferred in 4.497144 secs (238760829 bytes/sec)
- raidz1 (better RAID5)
- 1073741824 bytes transferred in 5.718750 secs (187758133 bytes/sec)
- raidz2 (better RAID6)
- 1073741824 bytes transferred in 7.782485 secs (137969019 bytes/sec)
見ての通り、raidz2を含めいずれも1Gbps = 125MBpsを超えているのだけど、RAID-Z2だと書き込み中のload average が4ぐらいになり、resilverに要する時間はRAID-Zの倍ぐらいに。有効容量も、RAID-Zでは75%なのに対しRAID-Z2では50%。RAID-Z2であればもっとパワフルなCPUとディスク数が欲しいところ。
で、実際にraidzで組んだzpoolに4GBほどのディスクイメージをiMacからAFPで読み書きした際のグラフが、こちら。


GbEが真っ黒。特に読み出し。
なお、/etc/sysctl.conf
でvfs.zfs.txg.write_limit_override=1073741824
を指定しておくと、書き込みがなめらかに。指定しない場合はこんな感じ。

見てのとおり実際にかかった時間はほとんど変わらないのでこれはオプショナルですが。
ZFSかわいいよZFS
1年半前はしかたなくLinux(Ubuntu)のmdでRAIDを組んだけど、出来ればZFSにしたかった。raidzならRAID Holeの心配もないし、リビルド時も全ディスクではなく使われた分しかしないのでその分速いし。
以下は実際に1Tほど使用された状態でscrubしてみた結果。
pool: tank state: ONLINE scrub: scrub completed after 1h29m with 0 errors on Sun Jun 19 21:04:04 2011 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 raidz1 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
だいたい10GB/分というのが目安か。SATA-1なロートルサーバーでは8時間以上かかったのでずいぶん速くなったものです。
その間も恐ろしいくらい静かなうえ、scrub中も速度がほとんど落ちずに読み書きできるのにはびっくり。もちろんその分scrub完了時間は延びてしまいはするけど。
もう一台欲しくなってきました。そこに積めるべきデーターも大してないくせに…本を自炊してここに押し込みたくなる誘惑が…100MB/冊として6万冊…
Dan the Man with Too Much Storage to Fill
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。