2011/06/23(Thu)VMwareゲストOSのシリアル出力をホストOSで取得する方法

2011/06/23 2:37 Software::VM/ESXi
Fedora 9以降でシリアルコンソールを使用可能にする方法に関連するが、VMware製品でゲストVMのシリアル出力をホスト側で捕まえる設定をメモ。
何に便利かというと、ズバリ、カーネルデバッグっていう。
ゲスト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デバッグなりお好きに…