[an error occurred while processing this directive]
[an error occurred while processing this directive]
http://h50146.www5.hp.com/products/servers/proliant/micro/
http://h50146.www5.hp.com/products/old/servers/proliant/micro/athlon250gb/
正月休みにWebをウロウロしていたら、 アマゾンでHP Microserverが2万2800円というのを見つけてしまった。 最後の1台らしい。 最新モデルは3万4650円だから、 かなりのお買い得だ。
バックアップサーバーがPentium D 920という、 一番電気を消費する頃のシロモノなので、 そろそろ代替機を考えていたところだった。 でもって下手な組み立てキットよりも安いので、つい注文してしまった。 4GB×2のDDR3 1333MHzなメモリもまとめて注文。
あっという間に到着。 相変わらず、アマゾンは仕事が速い。 とはいえ、メインサーバーのOSをアップデートしているので、 こちらをいじっている暇がない。
ようやくセットアップ開始。 まずはBIOSのチェック。 ハードディスクのライトキャッシュを有効にしておく。 BIOSのバージョンを見ると、ちょっと古い。 メーカーのWebから最新のBIOSをダウンロードしてインストール。 ただ、そのままではうまくいかなかった。 アップデート用USBメモリを作成するプログラムで、 DOSの起動するUSBメモリができあがる。 で、ブートは可能なのだが肝心の書き込みプログラムがない。 なので展開先のFlat Filesディレクトリから
をコピーして、ブート後にflash.batを実行する。 あっという間に書き換わり、2011.04.02版から2011.07.29版になった。
で、CPUを見るとTurion II NEO N40L 1.5GHzらしい。 旧型はAthlon II NEO N36L 1.3GHz。 てっきりこちらの売れ残り在庫処分だと思っていたのだが、 ひょっとして当たりを引いたのかもしれない。
動作テストがてら、FreeBSDをインストールしてみる。 今時はUSBフラッシュメモリ用のインストールイメージがあるので、 2GBのフラッシュメモリをインストールメディアにした。 すでに動いているFreeBSDマシンがあるので、 本家のWebにあるとおりにddコマンドで書き込んだ。
# dd if=FreeBSD-8.2-RELEASE-amd64-memstick.img of=/dev/da0 bs=10240 conv=sync
できあがったインストールメディアをフロントパネルのUSBコネクタに差して起動。 あとは最初から内蔵されている250GBのハードディスクにインストール。
さすがにサーバーなので、 起動時にキーボードがなくてもいちいちエラーを報告したりはしない。 さらに、FreeBSD起動後にUSBキーボードを挿すとちゃんと使える。
特に問題なさそうなので、 メモリを4GB×2に増やし、 PCIeに1000BASE-Tのインターフェイスを付けた。 その後、 備忘録 - HP ProLiant MicroServer + FreeBSD + ZFSにならってUSBフラッシュメモリにFreeBSD 8.2をインストールしてみる。 使ったのはバッファローのRUF3-K16Gという、 USB 3.0にも対応した高速な16GBメモリ。 特に読み出し速度は70MB/sをうたっている。 でもこれ、バッファローのWebに載っていないんだよなあ。
このメモリ、BIOSの書き換えにも使ったのでDOSがブートするようになっている。 で、内蔵USBのほうがブート時に優先されるので、 そのままだとDOSが立ち上がってFreeBSDのインストーラーが起動しない。 しかたないので、 ddコマンドで先頭10セクタくらいにゼロを書きこんでおく。 あとはインストール先をad4ではなくda0にするくらいでインストールできた。 ただ、さすがにハードディスクに比べると遅い。 まあSSDならともかく、USBを経由しているのだからしかたないが。
インストールが終わって内蔵USBフラッシュメモリからブートすると、 やはりファイルシステムをマウントするタイミングでコケる。 なので小飼 弾さんのページを参照して、/boot/loader.confに
kern.cam.boot_delay=10000
vfs.zfs.txg.timeout="5"
zfs_load="YES"
# Reserve Some memory for non-zfs tasks
# http://d.akinori.org/2010/04/15/
# + Some Tweak
kern.maxusers=512
vfs.zfs.arc_min="512M"
vfs.zfs.arc_max="4G"
vm.kmem_size="4G"
vm.kmem_size_max="6G"
としてみた。 今度はブートする。 なお、
ahci_load="YES"
でahciが有効になるはずだが、 なぜかハードディスクが見えなくなってしまう。 チップセットは変わっていないはずなんだけど。 そこで手持ちの
を入れて試してみたら、これらはAHCIでも認識される。 どうも最初から入っているVB0250EAVER HPG0だけがダメらしい。
そこで、 メインサーバーのバックアップ用に使っていたHDP725025GLA380の中身をまるごと、 ddコマンドでVB0250EAVERにコピーする。 コピーした方を保存用として、 コピー元をMicroserverで使うことにする。
ついでに/etc/rc.confに
powerd_enable="YES"
powerd_flags="-a adp -n adp"
を追加する。 ちなみに、これもすでに動いているFreeBSDマシンに挿し直して修正した。
# mount /dev/da0s1a /mnt
でマウントして、
# vi /mnt/boot/loader.conf
# vi /mnt/etc/rc.conf
である。
簡単なファイルサーバーとして使うために、ZFSを使ってみる。 前述の160GB、250GB、 640GBのハードディスクを使ってraidzを作ってみると、
# zpool create pool raidz ada0 ada1 ada2
invalid vdev specification
use '-f' to override the following errors:
raidz contains devices of different sizes
デバイスのサイズが違うと怒られた。 まあ当然といえば当然である。 そこで言われたとおり、-fを指定して無理やり作ってみる。
# zpool create -f pool raidz ada0 ada1 ada2
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
pool 456G 144K 456G 0% ONLINE -
160GB×3なら480GBだが、456GBである。 管理領域分目減りしているのか、例の1000≒1024問題か。
# zpool get all pool
NAME PROPERTY VALUE SOURCE
pool size 456G -
pool used 144K -
pool available 456G -
pool capacity 0% -
pool altroot - default
pool health ONLINE -
pool guid 14571947573095805517 default
pool version 15 default
pool bootfs - default
pool delegation on default
pool autoreplace off default
pool cachefile - default
pool failmode wait default
pool listsnapshots off default
だったので、
# zpool set autoreplace=on pool
を実行しておく。
ファイルシステムとしては、バックアップ用と共有用を作成する。 gzipで圧縮するようにしてみたが、 このマシンには荷が重いだろうか。
# zfs create pool/backup
# zfs set compression=gzip pool/backup
# zfs create pool/public
# zfs set compression=gzip pool/public
CIFSなサーバーにするためには、
# zfs set sharesmb=on pool/public
Unsupported share protocol: 1.
ではダメ。 やはりsambaの出番である。
まずはシステムのアップデート。 最近はコマンド一発である。
# freebsd-update fetch
# freebsd-update install
あとはportversionで確認して延々とportupgrade。 フラッシュメモリの書き換え回数は大丈夫かなあ。
フラッシュメモリ上でportsをコンパイルするとかなり遅い。 書き換え回数も気になるので、
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 1.75G 297G 34.6K /pool
pool/backup 1020M 297G 1020M /pool/backup
pool/db 90.3M 297G 90.3M /pool/db
pool/ports 680M 297G 680M /usr/ports
pool/public 28.0K 297G 28.0K /pool/public
pool/tmp 37.3K 297G 37.3K /tmp
に加えて/etc/portsnap.conf にWORKDIR=/pool/db/portsnap を追記し、 誰でも読み書きできる/pool/db/portsnap を作っておいた。 これで大体の読み書きはzfs上で行うはず。
かつては一から自分でrc.firewallを書いたものだが、 どうも穴がありそうで怖い。 最近ではシステムにいくつかサンプルが用意されているので、 それをベースにしてみた。 まずは/etc/rc.confに
firewall_enable="YES" # Set to YES to enable firewall functionality
firewall_logging="YES" # Set to YES to enable events logging
firewall_type="simple"
firewall_simple_iif="bge0" # Inside IPv4 network interface.
firewall_simple_inet="192.168.x.0/24" #Inside IPv4 network address.
firewall_simple_oif="re0" #Outside IPv4 network interface.
firewall_simple_onet="221.116.88.184/29" #Outside IPv4 network address.
firewall_simple_iif_ipv6="bge0" #Inside IPv6 network interface.
firewall_simple_inet_ipv6="2002:dd74:xxxx:1::/64" #Inside IPv6 network prefix.
firewall_simple_oif_ipv6="stf0": Outside IPv6 network interface.
firewall_simple_onet_ipv6="2002:dd74:58bb::/16" #Outside IPv6 network prefix.
とした。
これだとコメントにあるようにDNSとNTPしか通らないので、 /etc/rc.firewallに
# Allow TCP through iif
${fwcmd} add pass all from any to me via ${iif}
${fwcmd} add pass all from me to any via ${iif}
# Allow access to our ssh
${fwcmd} add pass all from any to me 22 setup
# Allow ssh to the world
${fwcmd} add pass all from me to any 22 keep-state
を追加してみた。
部品寄せ集め6号と入れ替え。 DNSに関しては、 ProLiant ML115 と同じようにunboundとnsdを使った。
OSを8.3-RELEASEにして、ZFSをアップデート。 dedupを使ってみる。 ついでに/boot/loader.confに書いたZFS関係のパラメーターはコメントアウト。
今日現在で
tom-a@mercury$ zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
pool 696G 6.45G 690G 0% 1.00x ONLINE -
tom-a@mercury$ zfs get all pool/backup
NAME PROPERTY VALUE SOURCE
pool/backup compressratio 2.09x -
pool/backup compression gzip local
と、dedupはともかくbackupには結構圧縮が効いている。
気がつくと1TBのハードディスクが三つ余っていたので、 ZFSなハードディスクと入れ替えた。 いろいろとディレクトリを作って、最終的には
tom-a@mercury$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
move 1.94G 585G 1.94G /move
pool 38.5G 1.75T 42.6K /pool
pool/backup 1.69G 1.75T 1.69G /backup
pool/db 92.1M 1.75T 92.1M /pool/db
pool/home 559M 1.75T 559M /home
pool/ports 448M 1.75T 448M /usr/ports
pool/public 35.0G 1.75T 35.0G /pool/public
pool/tmp 45.3K 1.75T 45.3K /tmp
pool/var 569M 1.75T 569M /var
tom-a@mercury$
といった感じである。
なぜか10:30ごろにリブートがかかり、 起動途中でフリーズ。 帰宅後に一旦電源を落とし、 ついでに掃除機で埃を吸ってから再起動。 今度は問題なく起動。 ログには何も記録されておらず、 リブートの原因は不明。
なんだかんだと1.5TBに2TBのハードディスクが余ったので、 3台で構成していたraidzを4台構成に変更。 ここで一端destroyして、 createしなおさないといけないのが、zfsの泣き所。
tom-a@mercury$ zpool status
pool: pool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ada0 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada2 ONLINE 0 0 0
ada3 ONLINE 0 0 0
errors: No known data errors
tom-a@mercury$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 157G 2.52T 93.4M /pool
pool/backup 15.2G 2.52T 15.2G /backup
pool/home 1.40G 2.52T 1.40G /home
pool/ports 663M 2.52T 663M /usr/ports
pool/public 43.4K 2.52T 43.4K /pool/public
pool/timemachine 139G 2.52T 139G /pool/timemachine
pool/tmp 118K 2.52T 118K /tmp
pool/var 625M 2.52T 625M /var
で、こんな感じに。
MacOSがLionになったあたりから、 CIFSなファイルサーバーではTime Machineが使えなくなった。 で、調べてみると最新のnetatalkでafpをしゃべらせるとOKらしい。 ということで、netatalkの2.2.4をportsからインストール。 ほぼデフォルトのまま、/usr/local/etc/AppleVolumes.default に
/pool/timemachine "Time Machine" options:tm
を追加した。 もちろん、/pool/timemachine はzpoolから切り出してある。
drobo FSだと実用的な時間では終わらないが、 Microserverならまあなんとかなりそうである。
CrystalDiskMark 3.0.2で簡単なベンチマークをとってみた。
| 条件 | compression on | compression off | ||
|---|---|---|---|---|
| dedup on | dedup off | dedup on | dedup off | |
| 連続読み出し | 51.58MB/s | MB/s | 52.29MB/s | 51.49MB/s |
| 連続書き込み | 35.11MB/s | MB/s | 49.71MB/s | 89.71MB/s |
| ランダム読み出し (512KB) |
50.74MB/s | MB/s | 50.89MB/s | 50.92MB/s |
| ランダム書き込み (512KB) |
44.74MB/s | MB/s | 52.85MB/s | 12.23MB/s |
| ランダム読み出し (4KB) |
6.827MB/s | MB/s | 6.864MB/s | 6.812MB/s |
| ランダム書き込み (4KB) |
0.453MB/s | MB/s | 0.514MB/s | 0.624MB/s |
| ランダム読み出し (4KB QD32) |
11.06MB/s | MB/s | 0.514MB/s | 1.423MB/s |
| ランダム書き込み (4KB QD32) |
0.179MB/s | MB/s | 0.365MB/s | 0.904MB/s |
なんとcompression on, dedup offでは、 load averagesが20を超えてネットワーク書き込みエラーを起こしてしまう。 それを除いても、 CPUが非力なせいかcompression off, dedup offが一番良さそうである。
玉突き衝突的にST31000333ASをST2000DM001に入れ替えて、
$ zpool replace pool ada1
を実行。 当初はresilverに27時間、そのうち68時間必要などと表示されたが、 最終的には5時間ほどで終了。
もう一つのST31000333ASをWD15EARSに入れ替えて、
$ zpool replace pool ada1
を実行。 今回は14時間ほどでresilver終了。 Windowsマシンでは読み出しエラーが出たハードディスクだが、 resilver中もエラーは無し。
仕事が一段落したので、FreeBSD 9.1をクリーンインストールしてみた。 ブートはUSBフラッシュメモリから。 いやー、便利な世の中になったなあ。
# /usr/sbin/pkg
で、パッケージマネージャーをpkgngに切り替える。
CPUTYPE=athlon64
WITHOUT_X11=yes
WITH_PKGNG=yes
として/etc/make.conf を作成。
ports collectionをfetchして、まずはnsdとunboundをインストール。 これは対外的なサービスなので、復旧させないとまずい。 ついでruby 2.0をインストールしてから、portupgradeをインストール。 と思ったらportupgradeはruby 1.8.7依存だった。
# pkg remove ruby
で削除してから、あらためてruby 1.8.7をインストール。 portinstallでbash をインストールした後pkg autoremove を実行したら、 なんとperlまで削除されてしまった。 いいのかねえ。 あ、munin-node をインストールしたら、 やっぱりperl も再インストールだ。
さて、問題のemacs である。 ここ最近、make.conf でnox11を指定しても、 インストール対象としてemacs-nox11 を指定しても、 どうもX Window System関係のファイルがばかすかインストールされている。 FreeBSD 9.1ではどうだろうか。
# portinstall emacs-nox11
としてみた。 なんか、実にあっさりとインストールできた。 X Window Systemをいれた形跡はない。 うーん、これはML115も9.1にアップデートすべきだなあ。
zfsは、
zpool create pool mirror ada0 ada2
zpool add pool mirror ada1 ada3
zfs create pool/backup
zfs create pool/public
zfs create pool/timemachine
zfs set quota=500GB pool/timemachine
と、1.5TB×2なミラーと、2TB×2なミラーをまとめる形にしてみた。 RAIDで言えば、1+0といったところだろうか。
# zpool status
pool: pool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0 ONLINE 0 0 0
ada2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ada1 ONLINE 0 0 0
ada3 ONLINE 0 0 0
errors: No known data errors
こんな感じである。 ベンチマークは
| 種別 | raidz | mirror | 性能比 |
| 連続読み出し | 51.49MB/s | 59.45MB/s | +15% |
| 連続書き込み | 89.71MB/s | 102.5MB/s | +14% |
| ランダム読み出し{{br}}(512KB) | 50.92MB/s | 60.02MB/s | +18% |
| ランダム書き込み{{br}}(512KB) | 12.23MB/s | 99.32MB/s | +712% |
| ランダム読み出し{{br}}(4KB) | 6.812MB/s | 9.32MB/s | +37% |
| ランダム書き込み{{br}}(4KB) | 0.624MB/s | 8.627MB/s | +1283% |
| ランダム読み出し{{br}}(4KB QD32) | 1.423MB/s | 13.91MB/s | +878% |
| ランダム書き込み{{br}}(4KB QD32) | 0.904MB/s | 3.940MB/s | +336% |
と、特にランダム書き込みに関して顕著な性能アップである。 OSのバージョン違いも多少は影響しているかもしれないが、 やはりRAID5のデータを計算するのは結構重い処理のようだ。
samba 3.6でCIFSなサーバーにして、 400個26GBくらいのデータをコピーしたら、 なんかつっかえつっかえという感じで20MB/sくらい。 でも、topコマンドで見ているとraidzでは頻発していたzioといったstatusが出てこない。 で、statusがtx->txの時にはデータを転送していない。 同時並行処理は難しいのか、同期書き込みでもやっているのか。 2.5GBくらいのデータならメモリにキャッシュできるのか、 100MB/sくらいで書き込めるんだけど。
netatalkは2.2.4をインストール。 とりあえずMacBook Proから読み書きできるのは確認した。 しかし、netatalkをインストールしたら cairo-1.10.2_5,2 Vector graphics library with cross-device output support なん代物までインストールされたような気がする。 いったい何に使うんだか。 速度的にはraidzからmirrorに変更したのが効いているようで、 TimeMachineのバックアップ時にピークでもせいぜい数MB/sだった書き込み速度が40MB/sくらいになっている。 とはいえ、FreeBSD側でtopコマンドを使ってみるとzioの嵐である。 zfsにzilを追加するべきなのかも。
こんなこともあろうかと、 インストール時に5GBほどfreebsd-zfsな領域をシステムディスクに確保しておいた。 SSDほどの効果は見込めないが、 同じディスクに書くよりはマシだろう。
# zpool add pool log ada4p2
で追加した。 ピークで60MB/sと、気持ち書き込みは早くなったような気がする。
3月26日にnetatalk 3.0.3が出たらしいので2.2.4から切り替えようと思ったら、 portsに入っていたのは3.0.2だった。 まあそれでもいいかと、アップグレード。 pkg removeで古いnetatalkを削除して、 他にも削除できそうなパッケージを削除。 その後は普通にportsでインストール。
さっそくTime Machineのバックアップ先にしてみる。 netatalk 2.2.4の時は8時間かかると表示されたが、今回は4時間。 うそかほんとか知らないが、だいぶ早くなったようだ。
muninでモニタしたグラフを見ても、 だいぶ早くなっている。 topコマンドで見ていると、 afpdはだいぶ忙しそうで時々zioが出るが、 cnid_dbdはほとんど負荷がかかっていないようす。 この辺が高速化の秘密かもしれない。