KVMでシリアルコンソール

サーバの停止・再開作業などをSSH上から行うことは、その端末へ行って作業を進めなくて済むため、すごく楽です。しかし、違うネットワーク環境で立ち上げたり、イーサネットの設定に失敗したりすると、全く歯が立たなくなってしまいます。

そこで今回は、KVM上のゲストOSへ、ホストOSから接続する設定を書いてみます。ゲストOSとホストOSは、ともにUbuntu 10.04 LTS Server x64です。

ゲストOSの設定をする

まずは、シリアルコンソールで接続される側の設定をします。この設定は、シリアルコンソールでの接続を許可するものになります。

最初は、ログインコンソールの設定を書きます。sudo vim /etc/init/ttyS0.confとして、下のファイルを作成します。作成が終わったところで、sudo start ttyS0とします。

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 vt102

続いてブートローダの設定を書きます。sudo vim /etc/default/grubとし、私が追加した設定は、次の3行だけです。これの編集が終わったところで、sudo update-grub(update-grub2ではない)として、設定を反映します。

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

ここまで完了したら、最後にsudo rebootとして、サーバを再起動します。dmesgを確認すると、次のようなログが残っていました。

% dmesg | grep -i "\(serial\|ttyS0\)"
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-2.6.32-29-server root=/dev/mapp
er/asagao-root ro console=tty0 console=ttyS0,115200n8 quiet
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.32-29-server root=/d
ev/mapper/asagao-root ro console=tty0 console=ttyS0,115200n8 quiet
[    0.000000] console [ttyS0] enabled
[    0.235460] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.235995] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    0.236833] 00:05: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

ホストOSから接続する

ホストOSから接続する場合は、libvirtのvirshを使って接続しました。ただし、/dev/ttyS0への接続はrootでなければ出来ないため、sudoを使って接続します。

% sudo virsh -c qemu:///system console <domain>

このコマンドを実行すると、普段は「Username: 」と表示されるログイン画面になっています。なので、何も出ない画面へログインIDを入力してEnterを押下すると、パスワードを求められます。

まとめ

意外と簡単に接続できるんだな、という印象でした。普段の作業をシリアルコンソールから行うことは無いと思いますが、たまに持ち運ぶことがあれば、設定をしておいて損は無いと思います。

参考サイト


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *