夏ですね。 ― 2008年08月06日 01時47分12秒
Namazu 開発(作業用)マシンがお亡くなりになりました。 以前より様々故障していたのを騙し騙し動かしていたのですが、boot できなくなりました。 今回はとうとうHDDのスーパーブロックが壊れちゃったみたいです。 修復には結構時間がかかりそうです。
ext3: No journal on filesystem on ide0(3,2) mount: err 22 mounting ext3 pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2 umount /initrd/proc failed: 2 Freeing unuset kernel memory: 132k freed Kernel panic: No init found. Try passing init= option to kernel.
Virtual PC の仮想HDDを物理ハードディスクにコピーする方法 ― 2008年08月09日 11時45分14秒
開発マシンの HDD を他の Linux に接続して、何とか修復を試みたところ、 ようやく中身が読み込めるようにはなりました。 ただ、かなりのダメージを受けてしまっていて、lost+found に沢山ファイル やディレクトリが移動されていました。
ブートも無理そうなので、別の HDD に OS をインストールした上で、 救出したファイルをコピーすることにします。
以前、Virtual PC に開発マシンとほぼ同じ環境を構築していましたので、 内容が古いとは言え、これを物理ハードディスクにコピーできれば復旧が楽そうです。
ここから本題。 Virtual PC の仮想HDDを物理ハードディスクにコピーする方法です。 仮想HDDを作成する際に、物理ハードディスクのリンク(読み込み専用のチェックは外す)として作成することができます。 Virtual PC 2007 では、物理ハードディスクにリンクされた仮想ハードディスクの使用を サポートしなくなりましたが、その前のバージョンである Virtual PC 2004 SP1 なら 物理ハードディスクにリンクされた仮想ハードディスクが使用できます。
ディスク1 に起動用 Linux の仮想HDD, ディスク2 にコピー先の物理ハードディスクにリンクされた仮想HDD、 ディスク3 にコピー元の仮想HDD として OS を起動します。
Linux が起動したら、
$ dd if=/dev/hdd of=/dev/hdb bs=512
で、ディスク3(/dev/hdd) を ディスク2(/dev/hdb) にコピーします。 (仮想CDドライブがセカンダリマスタなのでディスク3が /dev/hdd になるようです。)
コピーにはかなりの時間を要しますが、とりあえずこれで物理ハードディスクに Virtual PC の
仮想HDDの中身を丸ごとコピーすることができました。
もちろん、コピーした物理ハードディスクからのブートも可能です。
物理HDD同士のコピーならセンチュリーの「これdo台PRO」を使うと、簡単にコピーできていいのですがね。
Robocopy ― 2008年08月20日 21時55分17秒
エクスプローラや xcopy ではディレクトリの更新日時を含めてコピーすることができません。 Robocopy では、タイムスタンプやセキュリティ アクセス制御リスト (ACL) など、 関連ファイル情報をすべて保存することもできます。
Robocopy は Windows 2003 resource kit に含まれますが、ディレクトリのタイムスタンプをコピーする /DCOPY:T オプションが指定できるのは、 GUI 版に含まれる robocopy.exe XP026 です。
http://technet.microsoft.com/ja-jp/magazine/cc160891.aspx
GUI 版をインストールすると、コマンドライン版の robocopy.exe XP026 もインストールされます。
例えば、C:\src の内容を C:\dst にタイムスタンプを含めてコピー(ミラー)するにはこのようにします。
C:\> robocopy C:\src C:\dst /DCOPY:T /MIR
※ /MIR オプションの場合、C:\dst\ にコピー前に存在するファイルは削除されますので注意してください。
Java から Namazu の検索を行うには ― 2008年08月23日 18時39分23秒
libnmz API については 「libnmz API -初級編-」 をご覧ください。
注意点としては文字コードの変換があります。 検索式を Java から libnmz に渡す時は UNICODE -> EUC-JP に変換し、 libnmz から Java へ文字列を返す時は、EUC-JP -> UNICODE に変換すると良いでしょう。 コード変換には libiconv を使うと UNIX/Windows の両方に対応できて良いでしょう。
鯰―イメージとその素顔 ― 2008年08月26日 17時02分40秒
本書は「琵琶湖博物館ポピュラーサイエンスシリーズ」の第1冊目として出版されたもの
ナマズの魅力と不思議のすべてを紹介!
鯰の最新の研究成果をもとに解説を行っています。
琵琶湖博物館のミュージアムショップで販売されているほか、一部の書店でも取り扱っています。
SWIG を使ってみてはどうでしょう ― 2008年08月29日 22時01分10秒
libnmz の Perl バインディングには Search::Namazu があります。 また、最近 libnmz を Java バインディングとして JNI を使う話も書きました。 その他の言語から libnmz を使いたい場合はその言語用のバインディングを用意すれば良いだけです。
しかし、個々の言語用にそれぞれ専用のバインディングを用意することは大変です。 代わりに SWIG を使って共通のソースから様々な言語のバインディングを作成するのが楽で良いでしょう。 SWIG を使った方がオーバーヘッドはあるものの、生産性、保守性は高いと思います。
SWIG は Tcl/Tk、Perl、Python、Ruby、PHP 等のスクリプト言語の他、 C#, CLISP, Java 等の言語用のバインディングを作成することができるツールです。
Namazu の身近なところで SWIG が使われている例としては MeCab があります。 mknmz から利用している MeCab の Perl バインディングは SWIG によって生成されています。 (ちなみに Text-ChaSen と MeCab Perl バインディングの処理速度にあまり差がないのは、 SWIG のオーバーヘッドによるものではありません。お間違いのないように)
ただ、SWIG が生成したコードは、VC++ でコンパイルできないようなので、 Windows 環境のことを考えるとちょっと腰がひけてしまいますがね。 (MinGw + gcc ではコンパイルできるようですが、x64 対応とか考えると少々厄介です。)
追記:
SWIG 自体は VC++ に対応しているので、SWIG 用インターフェイスファイルを記述する時に gcc, g++ に依存しないようにすれば VC++ でもコンパイルできるかもしれません。
最近のコメント