访问Ubuntu 16.04 KVM Guest控制台

访问Ubuntu 16.04 KVM Guest控制台

当我将 Debian 8 添加到我的KVM管理工具,我发现我console=ttyS0除非我添加到 grub 启动配置中,否则无法访问控制台。这不是很好,但很有效。我正在将 Ubuntu 16.04 添加到管理工具中,这次安装来宾时也出现了同样的问题,但是当我在连接到控制台的情况下重新启动实例时,我无法再看到 grub 菜单选项。因此,我无法实施该解决方法。

我设法通过在虚拟机管理程序上运行并连接到 KVM 桥上的 IP 来找到来宾实例的 IP 地址,arp -an直到找到正确的 IP 地址。这使我能够确认来宾已正确安装并运行。我希望能够连接到控制台,以防sudo virsh console [guest ID]网络出现问题或者 openssh 突然决定停止工作。我需要做什么才能从虚拟机管理程序连接到来宾 ubuntu 16.04 控制台?

我的直觉是我应该只需要调整sudo virsh edit [guestID].目前我有:

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

额外信息

  • 使用内核 4.2.0-36-generic 的 Ubuntu 14.04 KVM 管理程序
  • 维尔什1.2.2

答案1

谢谢@Programster 解决方案对我有用。由于我什至没有 SSH 访问权限,因此我必须安装并使用 virt-edit。

sudo apt install libguestfs-tools
sudo virt-edit -d myVM /boot/grub/grub.cfg

将grub.cfg 文件中的所有实例替换为quiet并启动我的虚拟机以进行控制台连接。quiet console=ttyS0

virsh start myVM && virsh console myVM

登录后,不要忘记根据 @programster 答案编辑和更新 grub。

答案2

2017 年 3 月 13 日更新

对于那些已经处于上述情况的人,您可以修复您的问题现存的客人使用下面的原始答案。然而,对于那些不想再次经历这种痛苦的人来说,您可以在 kickstart 文件的 %post 部分添加以下内容:

%post --nochroot
(
    sed -i "s;quiet;quiet console=ttyS0;" /target/etc/default/grub
    sed -i "s;quiet;quiet console=ttyS0;g" /target/boot/grub/grub.cfg
) 1> /target/root/post_install.log 2>&1
%end

这将确保按如下所述对 grub 进行必要的更改,以便您通过使用 kickstart 文件部署的新来宾不会遇到此问题。

原答案

arp -an对于那些在找到主机上使用的IP后设法通过SSH连接的人,您可以执行以下步骤(取自本页底部一旦您连接到访客

编辑grub配置文件:

sudo vim /etc/default/grub

将文本添加console=ttyS0GRUB_CMDLINE_LINUX_DEFAULT参数中,如下所示:

在此输入图像描述

然后通过执行以下命令使用您的更改重建 grub 菜单:

sudo update-grub

现在您应该能够使用virsh console [guest ID].

当未来的内核添加到系统中时,这将继续工作,但是我更希望有一个不需要我首先通过 SSH 访问来宾的解决方案

答案3

按照 @Programster 的优秀答案中的建议,在安装后步骤中修复 grub 配置。以下是在其他一些情况下如何执行此操作。

使用 Debconf 预置文件安装 Ubuntu 16.04 时,请将其添加到您的预置文件中:

di preseed/late_command 字符串 ( \
    sed -i "s;安静;安静控制台=ttyS0;" /目标/etc/default/grub; \
    sed -i "s;quiet;quiet console=ttyS0;g" /target/boot/grub/grub.cfg \
) 1> /target/root/post_install.log 2>&1

使用 Kickstart 安装 RHEL 7 或 CentOS 7 时,请将其添加到您的 kickstart 文件中:

%post --nochroot --log /mnt/sysimage/root/post.log
    sed -i "s;安静;安静控制台=ttyS0;" /mnt/sysimage/etc/default/grub
    sed -i "s;安静;安静控制台=ttyS0;g" /mnt/sysimage/boot/grub2/grub.cfg
) > /mnt/sysimage/root/post_install.log 2>&1
%结尾

答案4

一种更简单、更容易的方法红帽文档

grubby --update-kernel=ALL --args="console=ttyS0"
reboot

相关内容