トップ > 興味のあること > コンピュータ > ハードウェア > パーソナルコンピュータ
モッピー!お金がたまるポイントサイト
日々の生活にhappyをプラスする|ハピタス

ProLiant Microserver

http://h50146.www5.hp.com/products/servers/proliant/micro/
http://h50146.www5.hp.com/products/old/servers/proliant/micro/athlon250gb/

2012年1月2日

正月休みにWebをウロウロしていたら、 アマゾンでHP Microserverが2万2800円というのを見つけてしまった。 最後の1台らしい。 最新モデルは3万4650円だから、 かなりのお買い得だ。

バックアップサーバーがPentium D 920という、 一番電気を消費する頃のシロモノなので、 そろそろ代替機を考えていたところだった。 でもって下手な組み立てキットよりも安いので、つい注文してしまった。 4GB×2のDDR3 1333MHzなメモリもまとめて注文。

2012年1月3日

あっという間に到着。 相変わらず、アマゾンは仕事が速い。 とはいえ、メインサーバーのOSをアップデートしているので、 こちらをいじっている暇がない。

2012年1月8日

BIOS

ようやくセットアップ開始。 まずはBIOSのチェック。 ハードディスクのライトキャッシュを有効にしておく。 BIOSのバージョンを見ると、ちょっと古い。 メーカーのWebから最新のBIOSをダウンロードしてインストール。 ただ、そのままではうまくいかなかった。 アップデート用USBメモリを作成するプログラムで、 DOSの起動するUSBメモリができあがる。 で、ブートは可能なのだが肝心の書き込みプログラムがない。 なので展開先のFlat Filesディレクトリから

  • flash.bat
  • kdb.exe
  • O41072911.ROM

をコピーして、ブート後にflash.batを実行する。 あっという間に書き換わり、2011.04.02版から2011.07.29版になった。

で、CPUを見るとTurion II NEO N40L 1.5GHzらしい。 旧型はAthlon II NEO N36L 1.3GHz。 てっきりこちらの売れ残り在庫処分だと思っていたのだが、 ひょっとして当たりを引いたのかもしれない。

FreeBSD

インストール

動作テストがてら、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が有効になるはずだが、 なぜかハードディスクが見えなくなってしまう。 チップセットは変わっていないはずなんだけど。 そこで手持ちの

  • Maxtor 6Y160M0 YAR51HW0
  • Hitachi HDP725025GLA380 GM2OA52A
  • WDC WD6400AAKS-00A7B0 01.03B01

を入れて試してみたら、これらは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

簡単なファイルサーバーとして使うために、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。 フラッシュメモリの書き換え回数は大丈夫かなあ。

2012年1月9日

work area

フラッシュメモリ上で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上で行うはず。

firewall

かつては一から自分で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を使った。

2012年4月26日

OSを8.3-RELEASEにして、ZFSをアップデート。 dedupを使ってみる。 ついでに/boot/loader.confに書いたZFS関係のパラメーターはコメントアウト。

2012年5月9日

今日現在で

 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には結構圧縮が効いている。

2012年5月22日

気がつくと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$
          

といった感じである。

2012年6月22日

なぜか10:30ごろにリブートがかかり、 起動途中でフリーズ。 帰宅後に一旦電源を落とし、 ついでに掃除機で埃を吸ってから再起動。 今度は問題なく起動。 ログには何も記録されておらず、 リブートの原因は不明。

2012年10月28日

zfs組み直し

なんだかんだと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
          

で、こんな感じに。

Time Machine対応

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ならまあなんとかなりそうである。

2013年1月28日

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が一番良さそうである。

2013年2月3日

玉突き衝突的にST31000333ASをST2000DM001に入れ替えて、

$ zpool replace pool ada1
          

を実行。 当初はresilverに27時間、そのうち68時間必要などと表示されたが、 最終的には5時間ほどで終了。

2013年2月5日

もう一つのST31000333ASをWD15EARSに入れ替えて、

$ zpool replace pool ada1
          

を実行。 今回は14時間ほどでresilver終了。 Windowsマシンでは読み出しエラーが出たハードディスクだが、 resilver中もエラーは無し。

2013年4月6日

FreeBSD 9.1

仕事が一段落したので、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

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/s59.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と、気持ち書き込みは早くなったような気がする。

2013年4月7日

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はほとんど負荷がかかっていないようす。 この辺が高速化の秘密かもしれない。