カテゴリー別アーカイブ: 仮想化

壊れた仮想ディスクを扱う

立ち上げっぱなしのWindowsマシンが、気が付くとBSoDで落ちてしまいました。原因は追加したHDDにあるようで、Linuxで観測してみると不定期にSATAのエラーを吐きます。

再起動したら、HDD自体が認識されず困ったので、testdiskでパーティションテーブルの復元を試みました。幸いなことに、これでNTFSパーティションの復旧はできました。このtestdiskはSystemRescueCD辺りも含まれているので、普段から起動ディスクとして用意しておくと安心です。

しかしこれだけでは不完全で、NTFSパーティション自体がdirtyになっていたので、回復コンソールからchkdsk /fを実施することでファイルシステムレベルの修正できました。

しかし不幸はこれだけでは終わりませんでした。対象HDD内においていた仮想マシンが起動しなくなり、grubのプロンプトに落ちるという状況になりました。Debianのインストーラーrescueモードで見ると、そもそもext2/3としてのsignatureまで壊れてしまっているようでした。

使っていた仮想マシンのディスク形式はVMware Playerからimportしてきたvmdk形式だったので、いったんqemu-imgでraw形式に変換し、kpartxでパーティションを認識、fsckを実施しました。

# qemu-img convert -f vmdk -O raw /path/to/disk.vmdk /output/disk.img
# kpartx -av /output/disk.img
# fsck.ext3 -y /dev/mapper/loop1p1

大量のエラーが発生し、lost+foundにかなりのデータがおいやられたものの、なんとかfsckは完走しました。/homeごとなくなってしまいましたが…

幸い、以前変換したときの元のイメージも残っていたので、現在はそちらをraw形式に変換してデータの復元を試みています。重要なデータはlost+foundの方を参照することにします。

VMware PlayerからVirtualBoxへの移行

最近のスラッシュドットの記事から、VMware Playerのライセンスにおける「非商用の解釈がかわった」という記事(ライセンス解釈が変わったようです。)を目にし、この機会にVirtualBoxへの移行を実施しました。

移行対象は違いますが、既にやってみた人の記事(VMware Fusion 5からVirtualBox 4.3への移行)があったので、作業自体はそれほど難しくはありませんでした。ただ、この記事にもあるようにストレージをSCSIからIDEに変更する、という作業はVMware Playerでも同様に必要でした。

自分の場合、もう一点「ホストオンリーネットワークもそのまま移行したい」という希望があったので、そのために若干の作業が発生しました。参考にしたのは「VirtualBoxのネットワーク設定とCentOS6.5のインストール」です。こちらの記事はMacOSXのようですが、Windowsでも行うことはあまり変わりません。

VirtualBox マネージャーからメニューの「ファイル」「環境設定」を選択し、ダイアログを開きます。さらに「ネットワーク」「ホストオンリーネットワーク」を選択し、ネットワークを追加します。ネットワークレンジやネットマスクを、これまでVMware Playerで使っていたものと同じになるよう設定します。

ここで一点注意があります。VMware Playerが入ったままだと、VMwareの仮想ネットワークインターフェースが設定として保持されたままになるので、vmnetcfg.exeで設定を変更するか、VMware Playerをアンインストールする必要があります。そうしないと、同一のネットワーク設定が存在しているとWindows側に認識され、リンクローカルなネットワークが強制的に割り当てられてしまいます。

あとはOVF化した仮想マシンをVirtualBoxからインポートし、ネットワーク設定を先ほど作成したホストオンリーネットワークに指定して、実際に通信ができれば完了です。

NATネットワークの移行も、ほぼ同様の手順で実行し、Window側のネットワーク共有を使えばできると思います。

第八回 カーネル/VM探検隊に参加してきた

2013年4月13日、都内で第八回 カーネル/VM探検隊が開催されたので、参加してきました。詳細はGoogle Siteの方を見てもらえば、発表内容や資料が見られます。

個人的に気になったところを書いていこうと思います。

@hiraku_wfs ftraceの解説と最近の動向

ftraceそのもの以上に、debugfsの使い方が興味深いものでした。debugfs(8)ではなく、Greg Kroah-Hartmanが実装した、kernelとuserspaceを橋渡しするためのインターフェースです。mkdirすることでトレース状態のスナップショットをとることが可能、という使われ方をしていました。

ライトニングトーク

「市販のプレスされたメディアでも結構エラーは出るもの」「むしろ一部の書き込みメディアの方がエラーレートが低いことがある」などなどいろいろと面白い話でした。qpxtoolはDebianパッケージもあるので、試してみたいところです。
フォントレンダラーのバグをつくことで、OSを落とすことすら可能なフォントデータが作れる、という話でした。過去にFreeTypeでも脆弱性の報告がありましたから、まあそういうこともあるよね、という感じです。今でもlibpngあたりはよく脆弱性が報告されていますから、気を付けたいところです。
TELNETの標準プロトコルでも暗号化をサポートしていますよ、という話がメインでした。実際に対応している実装としては、FreeBSDのtelnetがあるようです。Debianのnetkitベースなtelnetにそういう処理はなさそうでした。
驚愕だったのは、source routingをサポートしているというところです。sshの多段接続よりも驚きです。
残念ながら懇親会に参加することはできなかったので、懇親会内でのライトニングトークは聞けませんでしたが、あいかわらず濃いイベントでした。

VirtualBoxと実マシンとでディスクI/Oの違いを確認

Windows上のVirtualBoxのLinuxが起動だけやたら遅いのはどうもBIOS経由のdisk I/Oが遅いんじゃなかろうか、と思って起動後の状態でベンチマークをとってみました。使ったのは、dbenchです。dbench 5で5並列でのアクセスをさせてみています。対象はraw diskを使ったVirtualBox環境とリアルブート環境です。

結果:VirtualBox

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX     240151     0.576   482.564
 Close         176257     0.051    28.976
 Rename         10162     1.454   295.741
 Unlink         48614     4.451  3611.593
 Qpathinfo     217765     0.222   413.916
 Qfileinfo      37911     0.055    32.303
 Qfsinfo        39954     2.234    60.401
 Sfileinfo      19542     0.550   388.175
 Find           84199     0.672  1678.476
 WriteX        118530     3.479  3651.417
 ReadX         376109     0.185  1692.655
 LockX            780     0.138    20.811
 UnlockX          780     0.130    18.023
 Flush          16811    90.072  4535.314

Throughput 12.4427 MB/sec  5 clients  5 procs  max_latency=4535.443 ms

結果:実マシン

 Operation      Count    AvgLat    MaxLat
 ----------------------------------------
 NTCreateX     283026     0.056  1043.521
 Close         207853     0.006    10.037
 Rename         12009     0.182   467.670
 Unlink         57203     1.961  4348.426
 Qpathinfo     256742     0.025   586.056
 Qfileinfo      44763     0.005     6.373
 Qfsinfo        47089     0.264    16.122
 Sfileinfo      23114     0.054    39.272
 Find           99221     0.094  2166.365
 WriteX        139882     0.612  2854.145
 ReadX         444345     0.026  1545.910
 LockX            922     0.008     0.135
 UnlockX          922     0.007     0.143
 Flush          19858   136.950  5046.682

Throughput 14.7063 MB/sec  5 clients  5 procs  max_latency=5046.695 ms

というわけで、スループットは2MB/sec程度しか落ちていません。パフォーマンス的には十分でしょう。raw partitionを使わず、仮想ディスク+ホストキャッシュONをやれば、もっと早くなるような気がします。

VMware PlayerでInter Ethernet Express 1000

VMware Playerの仮想NICはどうやらguest OSの設定に依存するらしい。NetBSDを入れようとすると選択肢がないため、Other OSを選ぶことになってしまう。すると、pcnを使うことになる。

しかし、なんだかpcnは動きが遅いっぽいので、他のNICに変えてみた。具体的にはvmxファイルを直接エディタで開いて、以下の設定を追加した。

ethernet0.virtualDev = “e1000″

これでwm0が認識され、うまく動いているように見える。

参考: http://asagiri.dyndns.biz/wiki/index.php?Installmemo%2Fvmware