RHEL7: Access a virtual machine’s console
Note: This is an RHCSA 7 exam objective.
Standard procedure
With KVM, to access the virtual machine’s console under X Window, type:
# virt-manager
If you aren’t under X Window, there is another way to access a virtual machine’s console: you can go through a serial console.
On the virtual machine, add ‘console=ttyS0‘ at the end of the kernel lines in the /boot/grub2/grub.cfg file:
# grubby --update-kernel=ALL --args="console=ttyS0"
Note: Alternatively, you can edit the /etc/default/grub file, add ‘console=ttyS0‘ to the GRUB_CMDLINE_LINUX variable and execute ‘# grub2-mkconfig -o /boot/grub2/grub.cfg‘.
Now, reboot the virtual machine:
# reboot
With KVM, connect to the virtual machine’s console (here vm.example.com):
# virsh console vm.example.com
Connected to domain vm.example.com
Escape character is ^]
Red Hat Enterprise Linux Server 7.0 (Maipo)
Kernel 3.10.0-121.el7.x86_64 on an x86_64
vm login:
Emergency procedure
Sometimes you have lost all links to your virtual machine (error in the /etc/fstab file, ssh configuration, etc) and, as you didn’t set up any virtual console, you are in real trouble. There is still a solution! Connect to the physical host and shut down your virtual machine (here called vm.example.com):
# virsh destroy vm.example.com
Define where the virtual machine image file is located (by default in the /var/lib/libvirt/images directory with a name like vm.example.com.img):
# virsh dumpxml | grep "source file="
<source file='/var/lib/libvirt/images/vm.example.com.img'/>
Map your virtual machine image file into the host environment (-a for add and -v for verbose):
# kpartx -av /var/lib/libvirt/images/vm.example.com.img
add map loop0p1 (253:2): 0 1024000 linear /dev/loop0 2048
add map loop0p2 (253:3): 0 10240000 linear /dev/loop0 1026048
From the previous display, you know that you’ve got two partitions (in fact /boot and /, distinguishable by their respective size). You need to mount the /boot partition to be able to change the grub configuration:
# mount /dev/mapper/loop0p1 /mnt
Then, edit the /mnt/grub2/grub.cfg file and add ‘console=ttyS0‘ at the end of every line containing /vmlinuz (the linux kernel). Unmount the partition:
# umount /mnt
Unmap the virtual machine image file (-d for delete and -v for verbose):
# kpartx -dv /var/lib/libvirt/images/vm.example.com.img
del devmap : loop0p2
del devmap : loop0p1
loop deleted : /dev/loop0
Restart your virtual machine:
# virsh start vm.example.com
Domain vm.example.com started
Connect to your virtual machine console:
# virsh console vm.example.com
Connected to domain vm.example.com
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-123.el7.x86_64 on an x86_64
vm login:
This procedure works for RHEL 6/CentOS 6 and RHEL 7/CentOS 7.
Source: Deepal Jayasinghe’s blog.
Leave a comment