2011/06/23(Thu)VMwareゲストOSのシリアル出力をホストOSで取得する方法
2011/06/23 2:37
何に便利かというと、ズバリ、カーネルデバッグっていう。
ゲストOSのカーネルがpanicしてしまうと、Oopsを見るどころか、ゲストOS全体のI/Oが使用不可能になってsyslogにも書かれないので、こういう原始的な方法に頼らざるを得ない。
ゲスト側の設定
Fedora 9以降でシリアルコンソールを使用可能にする方法に+αして、tty0の出力をコンソール経由でシリアル接続ttyS0に投げるようにgrubをconfigする。シリアル設定は115200bps, parity = No, 8bitという具合に。
$ cat /boot/grub/menu.lst | grep kernel kernel ...(省略)... console=tty0 console=ttyS0,115200n8
ホスト側の設定
VMのハードウェアとしてシリアルポートを接続する必要がある。しかし、ゲストOS起動中には追加できないデバイスなので、一旦ゲストOSをシャットダウン。
VMware Workstationならば仮想マシン設定から、"ハードウェア"タブの追加→シリアル ポート→ファイルに出力→出力ファイルを適当に設定、起動時に接続にチェックを入れて完了
VMware Playerならば、vmxに次のように追加。
serial1.present = "TRUE" serial1.fileType = "file" serial1.fileName = "C:\Users\Kero\Desktop\console.txt"これでゲストOSを起動すれば、カーネルの起動ログからバッチリファイルに書かれているはずです。
[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Linux version 2.6.35.11-83.fc14.i686.PAE (mockbuild@x86-12.phx2.fedoraproject.org) (gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC) ) #1 SMP Mon Feb 7 06:57:55 UTC 2011 [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] NSC Geode by NSC [ 0.000000] Cyrix CyrixInstead [ 0.000000] Centaur CentaurHauls [ 0.000000] Transmeta GenuineTMx86 [ 0.000000] Transmeta TransmetaCPU [ 0.000000] UMC UMC UMC UMC ...後はprintkデバッグなりお好きに…