多個沒有圖形的 virsh/kvm 來賓控制台
我有一個為沒有圖形的 centos7 來賓工作的串列控制台,我使用
virsh console vm
. 來賓具有相應的console=ttyS0,115200n8
核心命令行參數。是否可以配置其他控制台,以便我可以說出
virsh console vm --devname vc1
並獲得登錄提示?本能地,我正在考慮以某種方式連接到客人的前 6 個虛擬控制台的字元設備;我研究了libvirt 域格式和virtio-serial,因為我似乎應該朝那個方向發展,但無法讓它發揮作用。
背景: 我們遇到了需要花費大量時間來解決的網路問題,在此期間,我們需要一名團隊成員處理網路問題,而另一名則不間斷地繼續他在 VM 上的工作,因此需要在沒有網路的情況下使用多個控制台。
我知道有
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'> <listen type='address' address='127.0.0.1'/> </graphics>
啟用帶有 6 個虛擬終端的 VNC 訪問,我只是想知道是否可以通過
virsh console <domain> --device <device>
語法以任何合理的方式擁有這樣的 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)
我經常在我的虛擬機上使用多個“控制台”——一個用於顯示啟動並以登錄提示結束的互動式控制台,另一個用於將所有這些記錄到文本文件中(通常
/var/lib/libvirt/consoles/<domain>.log
)我不知道您是否可以在 VM 中擁有多個互動式“控制台”,但您可以添加任意數量的串列埠,然後
getty
在 VM 中執行它們以獲取登錄提示。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
。這將為 VM 添加一個串列埠設備,該設備將在 VM 下次重新啟動時被啟動。(可能有一些方法可以將其添加為可熱插拔的 USB 設備而不是非 USB 串列埠,並避免重新啟動 VM。我從來沒有足夠在意找出)。
VM 重新啟動後,在埠上執行 getty。例如使用 sysvinit,編輯
/etc/inittab
並執行telinit q
。使用系統:
systemctl enable getty@ttyS1.service systemctl start getty@ttyS1.service
要從 KVM 主機連接到 VM 的串列埠,請執行
telnet 127.0.0.1 4555
.您可以創建任意數量的串列埠,每個埠偵聽不同的埠。只需更改
service=
XML 片段中的 tcp 埠號 ( )、目標埠和別名。如果你需要從另一台機器上訪問它,你可以讓它監聽不同的 IP 地址(雖然你可能想要
tls='yes'
在這種情況下,並使用啟用 tls 的telnet
客戶端進行連接,這需要設置一個證書供 qemu 使用)。例如,我向 Debian Stretch VM 添加了兩個串列埠:
首先,localhost:4555 上的 ttyS1
$ 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.
由於 OP 描述的類似原因,我偶然發現了這個執行緒。不需要
ua-
以描述項目文件的形式使用域範圍的別名。只需將一個或多個控制台添加為
<target type='virtio' port='N'/>
. 然後訪問hvc0
,hvc1
, … 控制台virsh 控制台*VMNAME*控制台*N*
N
從 計數1
。客戶端getty
設置留給讀者作為練習。