Virtualization

virsh:VM 控制台不顯示任何輸出

  • April 26, 2021

我有一個可以從virsh. 根據virsh dumpxml VM1,這是分配的 pty:

<serial type='pty'>
 <source path='/dev/pts/6'/>
 <target port='0'/>
 <alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/6'>
 <source path='/dev/pts/6'/>
 <target type='serial' port='0'/>
 <alias name='serial0'/>
</console>

虛擬機正在執行:

# virsh list
Id Name                 State
----------------------------------
 7 VM1                  running

在 VM 內部,這是 grub 配置:

kernel          /boot/vmlinuz-2.6.24-28-virtual root=UUID=7a1685b9-ecc8-4b70-932c-459a6faac07d ro quiet splash console=tty0 console=ttyS0,9600n8

這是 virsh 啟動虛擬機的命令行:

/usr/bin/kvm -S -M pc-0.12 -enable-kvm -m 256 -smp 1,sockets=1,cores=1,threads=1 -name VM1 -uuid 47ff6ec2-a748-4738-16b9-2ffe5780e456 -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/VM1.monitor,server,nowait -mon chardev=monitor,mode=readline -rtc base=utc -boot c -drive file=/var/VMs/VM1.qcow2,if=none,id=drive-ide0-0-0,boot=on,format=raw -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:12:34:50,bus=pci.0,addr=0x3 -net tap,fd=64,vlan=0,name=hostnet0 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 127.0.0.1:0 -k de -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4

但是,如果我使用 連接virsh console VM1或使用 連接,cat /dev/pts/6則 VM 控制台中不會顯示任何內容。

還有什麼我必須考慮的嗎?

更新

我有兩個虛擬機,一個直接從 開始kvm,另一個通過virsh. 直接啟動的有一個工作控制台。我已經在這兩種情況下驗證了打開的文件:

root@host1:~# lsof | grep 25093 | grep dev
kvm       25093         root  DEL       REG                0,4                3758780 /dev/zero
kvm       25093         root  DEL       REG                0,4                3758779 /dev/zero
kvm       25093         root  DEL       REG                0,4                3758777 /dev/zero
kvm       25093         root    0u      CHR              136,3         0t0          6 /dev/pts/3
kvm       25093         root    1u      CHR              136,3         0t0          6 /dev/pts/3
kvm       25093         root    2u      CHR              136,3         0t0          6 /dev/pts/3
kvm       25093         root    3u      CHR             10,232         0t0       8025 /dev/kvm
kvm       25093         root    7u      CHR             10,200         0t0       4983 /dev/net/tun
root@host1:~# lsof | grep 8341 | grep dev
kvm        8341 libvirt-qemu  DEL       REG                0,4                9743486 /dev/zero
kvm        8341 libvirt-qemu  DEL       REG                0,4                9743485 /dev/zero
kvm        8341 libvirt-qemu  DEL       REG                0,4                9743483 /dev/zero
kvm        8341 libvirt-qemu    0r      CHR                1,3         0t0       4640 /dev/null
kvm        8341 libvirt-qemu    4u      CHR                5,2         0t0       4897 /dev/ptmx
kvm        8341 libvirt-qemu    5u      CHR             10,232         0t0       8025 /dev/kvm
kvm        8341 libvirt-qemu   64u      CHR             10,200         0t0       4983 /dev/net/tun

如您所見,在其中一個 VM(錯誤的 VM)中,沒有文件描述符 1 和 2,並且文件描述符 0 被重定向到 /dev/null。這就是我猜的問題。

問題是,我如何告訴 virsh 不要那樣做?

<serial type='pty'>
 <target port='0'/>
</serial>
<console type='pty'>
 <target type='serial' port='0'/>
</console>

這是我通常添加到 VM 定義中的內容,使用virsh edit Thenconsole=ttyS0附加在 grub.conf 中的 VM 核心行中

到目前為止從來沒有讓我失望過

使用 Debian jessie 作為主機和來賓作業系統的工作範例。

  1. 使用 virt-install 或 virt-manager 創建 VM 在任何情況下,您都會將串列控制台語句添加到 VM.xml 文件中
  2. 在來賓虛擬機中執行以下
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service
  1. 在來賓虛擬機中/etc/default/grub替換
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
#GRUB_TERMINAL=console

經過

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"
GRUB_TERMINAL="serial console"
  1. 在來賓虛擬機中執行以下
guest# update-grub
  1. 執行虛擬機的虛擬機控制台可以通過
host# virsh console VM

或在附加控制台的情況下啟動 VM

host# virsh start VM --console

資料來源:

引用自:https://serverfault.com/questions/364895