Virutalbox上でLinuxを動かす際に起動ログやカーネルパニック時の画面ログを取りたい時があります。
調べると仮想シリアルポートを組み合わせることでVritualbox上の仮想マシンとシリアル接続が可能らしい。
イメージはこんな感じ。

ということで早速やってみました。
Windos7のVirtualbox上でCentOS7を起動しTeratermからシリアル接続して起動ログが表示されるか確認します。
仮想シリアルポートの導入
まずは、Windows側にここからソフトをダウンロードしてインストールします。
インストール後、Teratermを起動してCOMポートが2つ増えていればOKです。

動作確認としてTeratermを2つ起動し、各COMポート(上絵ではCOM4,COM5)を開いて片方の端末から入力した文字がもう一方の端末に表示されるか確認してみます。
動作確認がとれたら、Virutualboxの設定でシリアルポートにインストールしたCOMポート(今回の例ではCOM4)を割り当てます。
TeratermでCOMポートを開いているとエラーになるので事前に開放しておくこと。

ホスト側の設定は以上です。
grub2の設定ファイルを編集
続いてゲスト側の設定です。
シリアルの準備が出来たら、次はCentOS7を起動しgrub2の設定ファイル(/etc/default/grub)を開いて、画面ログをコンソールに出力するように編集します。
GRUB_CMDLINE_LINUXの行の”rhgb quiet”を消すと起動時のログが省略されずに画面に出力されるようになり、console=xxxで出力先のデバイスとボーレートを指定します。
1 2 3 4 5 6 7 8 9 10 |
<strong>修正前</strong> [root@vm1 ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet GRUB_DISABLE_RECOVERY="true" |
1 2 3 4 5 6 7 8 9 10 11 12 |
<b>修正後</b> <span style="font-size: 80%;">[root@vm1 ~]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" <span style="color: #ff0000;">GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap console=tty0 console=ttyS0, 115200"</span> GRUB_DISABLE_RECOVERY="true" <span style="color: #ff0000;">GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"</span> </span> |
ファイルを修正したら下記コマンドでgrub2を更新します。
1 |
[root@vm1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg |
これで準備が整いました。
実行結果
Teratermを起動しシリアルポート(今回の例ではCOM5)を開きます。
ゲストOSを再起動してTeraterm上に画面ログが出力すれば成功です。

無事シリアルにログが表示されました。
シリアル端末からログイン、コマンド入力等の操作も問題なく行えます。