グラフィックのないマルチ virsh/kvm ゲストコンソール

グラフィックのないマルチ virsh/kvm ゲストコンソール

利用可能なグラフィックがないcentos7ゲスト用のシリアルコンソールがありますvirsh console vm。ゲストには適切なconsole=ttyS0,115200n8カーネルコマンドライン引数があります。

virsh console vm --devname vc1私が話し、ログインプロンプトを受け取るように追加のコンソールを設定できますか?

本能的には、キャラクターデバイスをゲストの最初の6つの仮想コンソールに接続しようとしました。libvirt ドメイン形式そしてバーティオシリアルその方向に行かなければならないようですが、うまくいきません。

背景: 解決にはかなり時間がかかるネットワークの問題がありましたが、その間に、1人のチームメンバーがネットワークの問題を処理し、他のチームメンバーが中断することなくVM上で作業を続けなければならなかったため、ネットワークなしで複数のコンソールを使用しました。

私はそこにいることを知っています

<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>
  <listen type='address' address='127.0.0.1'/>
</graphics>

virsh console <domain> --device <device>VNCアクセスには6つの仮想端末を使用できます。構文を通して、合理的な方法で6つの仮想端末を持つ方がはるかにvirsh console便利であるかどうか疑問に思います。

ソフトウェア:

# cat /etc/fedora-release # host
Fedora release 24 (Twenty Four)
# virsh --version
1.3.3.3
# qemu-system-x86_64 --version
QEMU emulator version 2.6.2 (qemu-2.6.2-8.fc24), Copyright (c) 2003-2008 Fabrice Bellard

# cat /etc/centos-release # guest
CentOS Linux release 7.3.1611 (Core)

答え1

私はしばしば仮想マシンで複数の「コンソール」を使用します。 1つは開始を表示し、ログインプロンプトで終わる対話型コンソール用で、もう1つはこれらすべてをテキストファイルに書き込むことです(通常/var/lib/libvirt/consoles/<domain>.log)。

もっと送ってもいいかわかりません。インタラクティブ仮想マシンの「コンソール」ですが、できる必要な数だけシリアルポートを追加し、仮想gettyマシンで実行してログインプロンプトを受け取ります。

VMのこれらのシリアルポートは、telnetプロトコルを使用してホストのファイル、ソケット、またはTCPポートなどに接続できます。おそらく最も使いやすいのはTelnetポートです。

たとえば、ttyS1シリアルポートを介してアクセスできるシリアルポートを追加するには、telnet次のXMLフラグメントを次の場所に保存します/tmp/serial1.xml

<serial type='tcp'>
  <source mode='bind' host='127.0.0.1' service='4555' tls='no'/>
  <protocol type='telnet'/>
  <target port='1'/>
  <alias name='serial1'/>
</serial>

それからvirsh attach-device --config <domain> /tmp/serial1.xml

これにより、次回の仮想マシンの再起動時にアクティブになるシリアルポートデバイスが仮想マシンに追加されます。 (USBではなくシリアルポートの代わりにホットプラグ可能なUSBデバイスとして追加し、VMを再起動する必要がないようにする方法があるかもしれません。私は気付くほど気にしませんでした。)

VMが再起動したら、ポートでgettyを実行します。たとえば、sysvinitを/etc/inittab使用してtelinit q

システムを使用してください:

systemctl enable [email protected]
systemctl start [email protected]

KVMホストからVMのシリアルポートに接続するには、を実行しますtelnet 127.0.0.1 4555

必要なだけ多くのシリアルポートを作成でき、各ポートは異なるポートでリッスンします。 XMLフラグメントでTCPポート番号(service=)、宛先ポート、およびエイリアスを変更するだけです。

別のコンピュータからアクセスする必要がある場合は、別のIPアドレスでリッスンすることができます(tls='yes'この場合はTLS対応telnetクライアントを使用して接続する必要があるかもしれません)。この場合、qemuを使用するための証明書を設定する必要があります。 )。

たとえば、Debian Stretch VMに2つのシリアルポートを追加しました。

まず、localhostのttyS1:4555

$ telnet localhost 4555
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.

Debian GNU/Linux 9 stretch ttyS1

stretch login: 
telnet> quit
Connection closed.

その後、ttyS2はlocalhost:4556にあります。

$ telnet localhost 4556
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.

Debian GNU/Linux 9 stretch ttyS2

stretch login: 
telnet> quit
Connection closed.

答え2

私はOPで説明した同様の理由でこのスレッドを偶然見つけました。説明されている形式のドメインua-範囲エイリアスは必要ありません。プロジェクトファイル

1つ以上のコンソールをとして追加し、、、...コンソールを<target type='virtio' port='N'/>使用してコンソールにアクセスします。hvc0hvc1

仮想コンソール仮想マシン名快適窒素

N最初から計算します1。ゲスト側のgetty設定は、読者の練習問題として残されます。

答え3

似たようなものを検索してこの記事を見つけました。私は元の投稿が要求したものを正確に実行する方法を見つけました。ゲストに追加コンソールを追加し、virtio機能(最新のLinuxディストリビューション)を持つゲストに最適ですvirsh console

まず、接続するコンソールデバイス用のxmlを作成します。次のようにする必要があります。

<console type='pty'>
  <target type='virtio' port='1'/>
  <alias name='ua-hvc0'/>
</console>

Virtioは、ゲストに/dev/hvc{0..7}ポート1〜8に対応する8つの仮想コンソールを提供します。エイリアスはlibvirtで始まりua-、それ以外の場合は無視され、一意である必要があります。必要に応じて別のものに設定することもできます。

次に、デバイスをゲストに接続します。virsh attach-device <domain> /path/to/xml
コンソールにログインするには、そのhvcでgettyを有効にする必要があります。 systemdの場合は次のようになりますsystemctl enable --now getty@hvc0

virsh console <domain> ua-hvc0その後、選択したエイリアスを使用してホストから接続できる必要があります。

Virtioなしでテストしたことはありませんが、プロセスは似ています。コンソールデバイスの代わりにシリアルデバイスを追加できます。たとえば、次のようになります。

<serial type='pty'>
  <target port='1'/>
  <alias name='ua-ttyS1'/>
</serial>

これを行うには、クライアント/ dev / ttyS1にする必要があるシリアルポート1を追加する必要があります。 ttyS1(ゲストから)でgettyを有効にしてsystemct enable getty@ttyS1接続します。virsh console <domain> ua-ttyS1

関連情報