日記ブログ、または雑多なメモ
2010年3月16日

ファイルサーバにOpenSolarisをぷっとおん





../../diary/pic/hp100313.jpg

 またやってもた。

 経緯が長いので、はしょって説明すると、
・ZILを別ドライブで動かしてみたかったので、データをバックアップしてraidzをデータプールとして組み直そう
・そのために外部USB-HDDにFreeBSDシステムをコピーしてブートドライブ化
・どうせバックアップしたんだからOpensolaris入れてみよう
・外付けHDDにosol-dev-134インストール
・早速バックアップデータをOpensolarisのraidzに戻す
・esataの外付け箱を買ってきた!バックアップに使ってたドライブを載せる
・ファイルサーバに装着してesataドライブの先頭部分をslog(ZIL)デバイスとしてadd
・なかなかいい具合ぢゃん?
・仕上げとしてesataドライブ後半にシステムをいれてしまおう
・なかなか入らない
・あれやこれやしてるうち、起動ドライブを間違えて消したりslogパーティションを消し飛ばしたりする
・その後raidzをimportしようとしたらmissing deviceでimportできず
・raidz壊れ状態

 に至る。
「slogが壊れても/なくなってもプール上の領域を勝手に使うようになっている優れ機能」
というのを読み違えバックアップせずにいじっていたのだがそれはプールがオンラインのときだけの話で、それ以外の時に外すともれなくmissing devicesでimportできなくなった。 そのプールを過去にマウントした記憶が残っているzpool.cacheがあればすぐに復活できるのだが、今回はうまい具合にシステムもぶっ飛ばしてしまったのでそれもできない。
 パリティドライブが2台生きていようがいなかろうがデータドライブが健康だろうが、slogデバイスが1個なくなっただけでimportできなくなるという、ものすごいトラップ。 2008年頃から一応問題にはされていたようだが、他の問題と絡んでなかなか解決できないらしい。 ちなみに現行開発版ではslogデバイスのremoveができるようになっているらしいので、slogデバイスをいじるときはremoveしてからにしましょうね。 まったく。

 とりあえず、kernelのzfs部分のimport時のguid checksum機構をすっ飛ばせばマウントできるかもしれないので、現在試しにopensolarisのkernelをいじり中。 オリジナルそのものを入れてたデータはさほど大事ものでもなく、重要なデータはその他各マシンに入っているので、消えてもいいっちゃいいのだが.……、一応トライ。



 で、なんでハンダごてを持ってるかといえば、
マザー裏の抵抗チップがもげたから。 またか。 これまでかれこれ5、6回、マザーをつけたり取ったりしていると思うのだが、その間のいつかにおそらく筐体のネジ台座でひっかいたらしい。

../../diary/pic/pic10030901.jpg

 ↑これ。
 なに、どれかわからない?

../../diary/pic/pic10030902.jpg

 これ。 R210がもげた。 右にあるマザー固定用ねじ穴が直径約4mmくらいなので、長さ1ミリちょいくらいか。
じっくりよく見ないと何かわからない。

../../diary/pic/pic10030903.jpg

 位置決めしようと触るとすぐひっくり返るくせに、ひっくり返そうと思うとなかなか戻らないという。 なんという罰ゲーム。 でもって新品がなかったので屑半田でやったらもっこりもこもこに。 おまけに半田がまだ甘いので(当人も写真で気づいた)この後も30分ほど格闘。 とりあえずチップちっこすぎのランドちっこすぎ、よく行方不明にならなかったもんである。

 しかし、ネジ台座までたぶん数ミリの近さでかつ配置が前後方向ゆえ、バックパネルにつきでたポート類を抜き差しするときに不用意に前後に動かすともれなくぽろっといくよな。 これ。 と、言い訳しておく。


Opensolarisに引越し。 インストール済みFreeBSDを外部USBブート ドライブ化
 本題のOS入れ替え。 まず、いつでも戻れるよう念のためにFreeBSDのシステムを外部USB-HDDにコピーしてブートドライブ化しておく。 ここではまったのが、このマザーでは(なのか、一般的になのかは不明だが)GPTパーティションのUSB-HDDを挿したまま起動すると、BIOSのPOST時点でフリーズする。 なのでMBRパーティションで構成するべし。 gpartは使わずにsadeとかを使った方がよさげ。

 なお、MBRでZFSブートドライブ化のコツは コチラを参考。 要点は以下の通り。
・パーティションはブートローダ用(ufs)とZFS用の二つ
・一つ目のパーティションのスライスは「a」、つまり「/にマウント」でラベリングしないとダメ
・ブートコードは一つ目のパーティションに入れる
・一つ目のパーティションのaスライスの中に/boot/loaderを入れる
・二つ目のパーティションにzfsを作ってシステムをまるまるコピー(zfs send|zfs recvでやると楽ちん)
・あとはgptでやるときと一緒

 現時点FreeBSD-8.0-STABLEで外部USBドライブからzfsをroot mountさせる場合、USBドライブのイニシャライズが間に合わないのか自動マウントしてくれないことがある。 プロンプトで手動で「zfs:プール名」を入れると起動が続くが、毎度そんな面倒なことしてられない。 ここのパッチを当てると一応マウントするようになるけども、本家で対策されるのを待った方がいいかもではある。


FreeBSDのZFSはOpensolarisで読み込めるか?
 その後、安全のために(危険でもあるが)RAID上のデータを外部HDDにバックアップし、OpenSolarisのLiveDVDから起動。 最初OpenSolaris 2009.06を試してみたが、X-windowが起動した直後に固まってしまった。 仕方なくosol-dev-134から起動。 こちらは完璧でcompizまで動いている。 が、こちらはこちらで何かと問題が多いはずなので要注意である。
 試しにFreeBSD-8.0-STABLE上で作ったZFSがOpenSolarisから読めるのかどうかやってみると、

・単体HDDに作ったzfsプールは読めることがある
・ただしFreeBSDに戻してみると内部ラベルがぶっこわれていることがある
・構成によってはドライブがcorruptedになる
・RAIDZの方は最初全てのドライブがcorruptedになった
・パーティション構成などを変えたもので色々試したみたらOpensolarisのzpoolがabort

 などなど。 FreeBSDからOpensolarisへそのままZFS持ち込み、というのは詳しくないうちはあまりしない方が良さそうである。 FreeBSDが何でも適当におけーな感じとすると、OpenSolarisはかなり神経質風。


OpenSolarisを外部USB-HDDにインストール
 などなど実験を経て、osol-dev-134を外部USB-HDDへインストール。 3.6GBほど。 インストールはすんなり済んで、いざ起動しようとするとgrub起動直後に「verification failed」のエラーメッセージが出て止まる。 何をどうやっても「verification error」、もしくは「File not found」。 おかしいなぁ〜と思いながら、LiveDVD上でその外部HDDに「zpool scrub」をかけてみると「checsum error」が1、2個出る。 「zpool clear」して、再度scrubをかけるとまたchecsumエラー。 もしやと4GBのUSBメモリにインストールしてみたらすんなり起動した。 ということは、とドライブを別の種類のUSB外箱(金属製のUSB-2.0/FireWire対応のちょっと良いやつ)に入れ替えてインストールしたら、これもすんなり起動した。 つまり、

・マザーのUSBがへぼい
・安もののUSB外箱がへぼい
・Opensolarisの挙動が厳しすぎる or 逆に穴がある

 の全部が複合して起こる事象らしい。 そのUSB外箱はThinkPad X300で使っていてデータ化けしたことなどはないし、FreeBSD上でも問題なかったので、まあ、そういうことなんだと思われる。 よって、上に書いたFreeBSDのZFS持ち込み認識実験で、外部HDDを使ったものはこの症状が絡んでいる可能性もある。


インストール完了、ファイル共有開始
 インストール完了後、内蔵ドライブ5個のRAIDZ2を組みなおし、データを戻す。 ファイル共有方法はzfsの「shareiscsi」と「sharesmb」を使用。 iscsiの方は帯域一杯の速度が出て問題なし。 sambaの方は正味のsambaサーバを使うこともできるが、zfsの機能の方がスループットが出たのでzfsの方を採用。

Linux@ThinkPad X300 -> Fileserver(FreeBSD-8.0) 2〜4MB/s ※kde4のdolphin経由 smbclient直接だとなぜか11MB/s出る
Linux@ThinkPad X300 -> Fileserver(osol-dev-134) 6~11MB/s
Fileserver(FreeBSD-8.0) -> Linux@ThinkPad X300 4〜6MB/s
Fileserver(osol-dev-134) -> Linux@ThinkPad X300 5〜7MB/s


 100BASEのHUB経由でこんな感じ。 G4 Cubeの場合はLANアダプタが100BASEで素直に動くためか、帯域一杯の11MB/sほど出る。 1000BASEのHUBにすればThinkPad-ファイルサーバ間はもっと速度が出るはずだが、どちらもドライブの書込速度が遅いのであまり意味ないかもしれない。 が、複数のやりとりが発生する場合の事を考えるとやはり1000BASEが必要か。

 その他、OpenSolarisを入れてみて気がついたこと。 C2D E6300のp-stepって基本的に6倍と7倍の1600MHzと1800MHzの二つしかないらしい。 FreeBSDでは233MHzまで落ちてたので、しばらくの間「くそー、Opensolarisはspeedstepにまともに対応してないじゃないかー」などと思っていたのだが、それで正しい認識だったとは。 FreeBSDの方は、温度もアイドルで30℃以下まで下がってたのでクロックも実際に下がってた風なのだが、なんだったんだろう。 t-step(throttling step?)というのが関係ありそうだがよくわからず。 ちなみにOpenSolaris上でもACPI経由ではやっぱりCPU温度が拾えない。 仕方がないので手でヒートシンクを触ってみたが、たぶんアイドルで40℃くらいのようである。 それと、C1Eはちゃんと動いている。 これは意外と、ノートに入れても使えるかも?
                        OpenSolaris PowerTOP version 1.2

C-states (idle power)   Avg     Residency    P-states (frequencies)
C0 (cpu running)                (0.7%)       1600 Mhz        100.0%
C1                      4.0ms   (99.3%)      1867 Mhz        0.0%

Wakeups-from-idle per second: 494.2     interval: 5.0s
no ACPI power usage estimate available

Top causes for wakeups:
26.5% (131.1)               <kernel> :  genunix`cv_wakeup
20.2% (100.0)               <kernel> :  genunix`clock
13.3% ( 65.7)                  sched :  <xcalls> unix`dtrace_xcall_func
10.1% ( 50.1)               <kernel> :  SDC`sysdc_update
 4.6% ( 22.8)               <kernel> :  uhci`uhci_handle_root_hub_status_change
 1.2% (  6.0)               <kernel> :  uhci`uhci_cmd_timeout_hdlr
 0.8% (  4.0)               <kernel> :  genunix`schedpaging
 0.8% (  4.0)            <interrupt> :  rge#0
 0.4% (  2.0)               <kernel> :  cpudrv`cpudrv_monitor_disp
 0.3% (  1.4)            <interrupt> :  ehci#0
 0.2% (  1.0)               <kernel> :  TS`ts_update
 0.2% (  1.0)            <interrupt> :  uhci#2
 0.2% (  1.0)            <interrupt> :  uhci#1
 0.2% (  1.0)            <interrupt> :  uhci#0
 0.2% (  1.0)            <interrupt> :  uhci#4
 0.2% (  1.0)               <kernel> :  genunix`clock_realtime_fire
 0.2% (  1.0)            <interrupt> :  ehci#1
 0.2% (  1.0)               <kernel> :  genunix`lwp_timer_timeout
 0.2% (  1.0)            <interrupt> :  uhci#3
 0.2% (  0.8)               <kernel> :  ip`squ


 エコワットの表示が「26kWh 540時間」に上がっているところを見ると、やっぱりFreeBSDのクロック制御は実際に下がってたのかねぇ?
48Wか……ちょっとだけ省電力。


 以上、OpenSolarisへ引越し終了。


終了
 FreeBSDなサーバは複数ドライブ間をまたがるディスクアクセス時になんとなくもっさり感があったのだが、OpenSolarisはきびきびしている印象。 悪くない。 ただし、FreeBSDがもっさりしてたのはクロック制御が効いていたせいかもしれない。 が、仕様的にありえなさそうだし、謎だナァ。

 それはともかく。

 このマザー、ダメだ。 USB超不安定。 コア電圧いじり、そしておそらく抵抗チップを飛ばす前、最初のFreeBSDインストール時からおかしかったので仕様、もしくは個体不良にちがいない。 もしくはUSB装置との相性に異常に弱いか。 症状としては、USB-HDDを3個挿したとたんにHDDが不安定になる。 ドライブ1個の場合でもPSUコネクタを別途挿さないとまともに動かない(スピンアップしない、稼働中に止まる等)。 そのくせ豪華6ポートもあるのが腹立たしくなる。 そして何より、趣味的にだが、BIOSがダメだ。 ファン設定ダメ、起動ドライブ設定もダメ。 USBドライブを抜いて挿す度に起動順番が内蔵HDDイチバーンに強制で戻りやがりなさる。 整備が終わってしまえば問題ないっちゃないのだが、使いにくくて仕方がない。


 というわけで、現在はesataドライブにシステムが入っている。 すっきり(データもスッキリ。 いや違う)。


コメント欄
(投稿なし)

コメントなどありましたらこちらからどうぞ
名前
内容
 ※名前、内容ともに入力必須です
- C'sGallery Blogっぽく見えるシステム3.2 -
小武 (管理人) eta2@tim.hi-ho.ne.jp