zfsとFreeBSDとギガバイトのMBとhdparm
むき身のHDDを箱に入れる作業は簡単なはずだったのに
ZM-HDR1というHDD用の箱にHDDを入れたんだけど、これちょっとマウンタをケースに押し込むときにコツが必要で、ちゃんと押し込めないと当然認識せず、あれーおかしいなぁとか言いながらHDDを挿す場所替えたりとかしたのが敗因。つい余計な作業をしてしまい
BIOSアップデート&今までSATAカードに刺さってたSATAHDDをオンボードの方に差し替えた
(ちなみにマザーボードはGIGABYTE GA-G31M-ES2L rev1.1で元のBIOSはF5。最新のF10にした)
HDD認識しないなーとか言いながらメーカーサイト見てたらBIOSの最新版が目に入って、そういえばこのマザーボードUSBメモリから起動するとHDD認識の順番が変わっておかしいんだよなーとか思いながらBIOSアップデートしてしまったんだよ
そして起こる悲劇
プールが見えなくなったのでとりあえずexportしてimportし直してみようと思ってexportしたけどimport出来ない
ここからおなかが痛くなりはじめる
うちの旦那のアニメコレクションとか怪しい伝説とかアメリカンチョッパーとかウィスカーズとか全滅all\(^o^)/とかどうしたらいいのー
必死でググる。
failed to unpack label zfsでググって一番始めに出てきた日本語の情報
d:id:navyfox:20091129
NavyFoxさんの日記が似た状況で必死で内容を読んだ
自分でもzdb -l /deb/ad4とかやって先頭のラベル(LABEL 0と1)が生きているのとラベルが正常なHDDと比較してシリンダ数が足りなくなってるっぽい事も判明
HDDが壊れたのではなくてBIOSが何かやらかしてHDDの容量が小さくなってるんじゃないか、それならデータは生きてるはず!とあきらめずすんだ
NavyFoxさんの日記と状況が同じだったので書いてあるとおり翌日HDDを買って来て作業することに。
お店が開くまでの時間もzfsとかfailed to unpack labelでググりまくったらマザーボードのbios替えてジオメトリがおかしくなってるならbios戻したら良いじゃん的な海外フォーラムの記事を見つけて作業をしたけど駄目だった
11時にお店が開くのを待ってお買い物に
とかつぶやきつつお出かけの支度。出かけてる最中にtwitterTL見てたら師匠から@メッセージ来てた!ギガバイトのマザーボードはBIOSでなにやら管理する用の領域を勝手にHDDの末尾に作るらしという情報を得た!
ここからググるキーワードにHPAが追加されて何が起こってるのかやっとわかってきた
raidzだとHDDの台数が多い
http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/ondiskformat0822.pdf
NavyFoxさんが調べて記録しておいてくれたのがとても助かったzfsのラベル
ディスク末尾のラベルの位置はディスクが1台なら8192 + (asize/512)だけど、うちみたいに3台でraidzとかやってるなら
8192+(asize/HDD台数/512)
で良いみたい。
買って来たHDDにad6のバックアップをとって実験したらそれで成功した
うちのばあい
8192 + (asize 4500891107328 / disk台数3 / 512) = 0xAEA87600
だったので
# dd if=ad6.img count=0x200 of=ad6label_head # dd if=ad6label_head count=0x200 skip 0xAEA87600 of=ad6.img
とかやってzdb -l ad6.imgってやったらちゃんとLABEL0〜3まで見えた!
knoppixとhdparmでHPAを無効にする
予算の都合でHDDを何台も買ってられないので、今あるHDDのHPAにとられた部分を取り返さないといけない。
取り戻せなければ今使ってる1.5TBよりも確実に大きいサイズのHDDが3台別に必要になるのでそれは痛い
HPAでいろいろググるとlinuxのhdparmで取り戻せるらしい事が判明。linuxの入ったHDD無いからknoppixをCDに焼いた
手近にCDのメディアしかなかったのでknoppixのCD版焼いたらなかにhdparm入ってなかった\(^o^)/
# apt-get update ;apt-get install hdparm
とかやってhdparmを使える様にして
# hdparm -i /dev/sdb
でデバイスと作業したいHDDが合ってるか確認して
# hdparm -N /dev/sdb ←これをやると /dev/sdb: max sectors = 認識してるサイズ/全体のサイズ, HPA is enabled
とか出るので
# hdparm -Np全体のサイズ /dev/sdb
ってやったらHPA is disabledになってHPAの呪いが解けた!
(HDIO_SET_PIO_MODE failedとか出るけどタイミングが良いとdisableになるなんなのこれ)
そして復旧
HPAの呪いのかかった2台のHDDの呪いを解いて、先ほど計算したLABELを末尾に書いたらおkだーと思ったらLABELを書くまでも無くzpool importで認識できました。HPA領域確保だけして中身はいじって無いっぽいです?
という情報も得たので、とりあえずad6のイメージを吸い出したHDDを生け贄にマザーボードのSATA0の場所にさして起きました。
案の定、起動後にはad6のイメージの入っていた筈のzfs領域が見えなくなってたよ\(^o^)/
(HPAが作られた状態でzfs領域作ってバックアップ用に使うから良いんだけどさー)
遠足のしおりの折り方
遠足のしおり等によく使われる、紙1枚に8ページをまとめて印刷して折るとのりやホチキスを使わなくても8ページの豆本になる印刷方法が好きで、これを使って旅行の日程表などを友達に配ったりする事があるのですが、印刷したまま渡すと折り方がわからず何で上下ページが逆になってるの?とか言われたりして残念な気分になることがよくあります。
↑の豆本を勝手に遠足のしおり折りと呼んでます
最近話題のHTML5のハンドブックを作った人がいて*1、cssを使ってきれいにページがまとめられているのを見ることができるほか、print用のcssもあってこれが豆本を作るようにページが上下向かい合わさって印刷される様になってるのです。
遠足のしおり折りではなくページを単体で切り取ってホチキス製本された方がいて*2遠足のしおり折り大好きとしてはとても残念な気分になったので作り方を載せておきます。
作り方
- 枠線で切る
- 印刷面が外に向くように長い辺方向の真ん中の線で折る
- 一旦広げて印刷面が外に向くように今度は短い辺方向の真ん中の線で折る
- 折ったまま短い辺の残りの線を印刷面が内側に向くように折る(2カ所)
- 一旦広げて長い辺の真ん中にはさみを入れる。4等分された真ん中の2区間分だけ切る
- 切ったらもう一度長い辺の線を折り目通り折ると真ん中に穴の空いた+型の様な形になる
- 表紙部分を探してぺたんこにするとできあがり
#追記
ネタにマジレス的な事をしてしまったのかもしれないorz
PS3とFreeBSDでDLNA
新型PS3を早速買ったけど、やるゲームがあまりないので、自宅サーバにDLNAサーバを入れて動画やら音楽やらを楽しもうと思ったメモ
- 自宅サーバ FreeBSD7.2-STABLE
mediatombをインストール
いろいろ調べてみるとこれがFreeBSDとかLinuxとかで動くDLNAサーバらしい
昔なら自分でソースをとってきて入れるところだけど、子供が騒がないうちに作業しないとならんので/usr/ports/net/mediatombをmake installすることにした。
/usr/ports/X11の下のライブラリをいろいろ入れる事になったので普段X環境無いと結構時間かかるのかも
特に問題も起こらずに*1インストールできた
今回インストールしたのはmediatomb-0.11.0らしい
MYSQLを使う
mediatombにはsqliteかmysqlかどっちかのデータベースが必要。
うちのサーバにはmysqlがすでに入っているのでそれを使うことにした。
で、mediatomb用にデータベースを作ってあげないといけない。
mediatombというユーザをmysqlに作ってmediatombという名前のデータベースを作るらしい
http://mediatomb.cc/pages/documentation#id2535847
で、/usr/local/share/mediatomb/mysql.sqlをmysqlコマンドから投入してあげると良い
mysql -u mediatomb -p -D mediatomb < mediatomb/mysql.sql
このファイルはすでにあるテーブルをdropしてから作成し直しとかしないので後からいろいろ実験でデータベースを作り直したい時は
drop table `mt_cds_object`; DROP TABLE `mt_cds_active_item`; DROP TABLE `mt_internal_setting`; DROP TABLE `mt_autoscan`;
とかいう内容のファイルを作っておくとあっという間に初期状態に戻せる
mediatomb設定
いろいろmediatombの事を調べるとmediatomb.confが必要的な事が書いてあったりするけど、古いバージョン用なのかconfig.xmlだけが設定ファイルになっているみたい。
portsからインストールしたら/usr/local/mediatomb/config.xmlにある。
確認したり変更したりする内容はmysqlを有効にする部分と
<mysql enabled="yes"> <host>localhost</host> <username>mediatomb</username> <database>mediatomb</database> <password>パスワード</password> </mysql>
あと<!-- For PS3 support change to "yes" -->というコメントが書かれてる部分とか
<!-- Uncomment the line below for PS3 divx support -->というコメントが書かれてる部分をその通りに編集する
あとは/etc/rc.confに設定を書く
mediatomb_enable="YES" mediatomb_mtuser="mediatomb" mediatomb_mtgroup="mediatomb" mediatomb_config="/usr/local/etc/mediatomb/config.xml" mediatomb_logfile="/var/log/mediatomb.log" mediatomb_pidfile="/tmp/mediatomb.pid" mediatomb_port="49152" mediatomb_interface="vge0"
最後のinterfaceを設定しないとmediatombが一番はじめに見つけたインターフェースのIPアドレスで動く様になるからネットワークインターフェースが2個以上付いていれば設定するし、そうでなければいらない。
動作確認
設定が終わったら/usr/local/etc/rc.d/mediatomb startで動くはず
mediatomb_logfileに設定したファイルを確認してみる
ファイルを登録
ここまで書いて子供が騒ぎ始めたので続きはまた後で。
未解決な事リスト
*1:途中xlibのバージョンあげろとかconfig画面で何度か止まったけど
プレステ3買いました
新型が出たし、4Gamer.net ― LEGO Indiana Jones: The Original Adventures[PC]もWiiの日本版の発売がやめになってしまって困ってたし*1、トロ大好きだし買ってしまえ。という事で買ってきました。
HDMIの付いてないテレビなのでD端子でつなごうと思ったのですが、D端子の空き無いからWiiはしばらく外しておこうかと思ったらPS2・PS3・Wii・Xbox360を1つのD端子につなげるセレクター付きのケーブルを見つけたので一緒に購入。
縦置きスタンドも買って、全部で35000円くらいビックカメラで払いました。
で、早速設置。あらかじめアマゾンで頼んであったレゴインディとまいにちいっしょでとりあえず楽しんでます。
ついでにこの間ワンダースワン探した時にポケステが出てきたので、PS2もテレビにつないでどこでもいっしょとか使えるようにしようかな
■
はてなブロガーの本まとめて欲しい! (B賞欲しいです)
はてなのキャンペーンに応募。
ブロガーの本キャンペーンはコメント欄にどっちが欲しいか書けってあったけど本文じゃだめなのかなぁ