Now we can also configure our VM to have an emulated serial port, and instruct the OS, to send a copy of the boot messages / start a login prompt on the emulated serial port. Once this is configured it will be possible to connect from the host (ie the server running pve) using a terminal emulation program. Create a serial device inside the VM (n is 0 to 3), and pass through a host serial device (i.e. /dev/ttyS0), or create a unix socket on the host side (use qm terminal to open a terminal connection). If you pass through a host serial device, it is no longer possible to migrate such machines - use with special care.
Why would I need a serial terminal / serial console?
Note: This apply to qemu/kvm virtualization.
If you do a lot of work over ssh on your pve server you would maybe appreciate to connect to your running VMslike:
Other use cases:
you lost network access to the guest and VNC is either too slow for you or does not have the features you need (i.e. easy copy/paste between other terminals)
your guest freezes or kernel panics, you want to debug it, but it is impossible to capture all messages on VNC screen
your keyboard layout is borked on the guest
you are familiar with xm console <guest> from Xen and you want to use a similar feature here
Some background so you get the idea
When you start Unix/Linux on a PC, the default input device is the attached keyboard (PS/2 or USB), and the default output device is the available VGA /HDMI / Display port of the PC. This is called in Unix-speak the default console, or system console.During boot, the kernel sends its boot messages, like device detection, to this default console, and at the end of the boot processes, fires a 'login: ' prompt on this console. (Actually it spawns multiple login prompts, you can switch between them with Ctrl-alt-F1, Ctrl-alt-F2, etc ... )
Now it is perfectly fine to send the boot messages and start a login prompt on something else. For instance the Linux Kernel has a netconsole feature, to send the boot messages over the network to another Linux computer. It is also possible to send a copy of the boot messages, and start a login prompt on the serial port of the PC. We get then what is called a serial consoleIf you connect to this serial port any computing device with a terminal emulation program, it will be possible to work on the Linux PC as if you were using the PC locally in text mode. The requirements of the terminal emulation are quite low, so you could use HyperTerminal on a Windows PC, Minicom on Linux or even an old Atari ST with the appropriate program.
How do this apply to Proxmox PVE ?
In proxmox things work exactly the same, but with emulated devices. NoVNC/ VNC Applet connects to your VM keyboard and VM VGA display and displays the stuff you would expect from a real PC on a VGA display with a locally attached keyboard.Now we can also configure our VM to have an emulated serial port, and instruct the OS, to send a copy of the boot messages / start a login prompt on the emulated serial port.Once this is configured it will be possible to connect from the host (ie the server running pve) using a terminal emulation program, which is handily builtin in the Proxmox Qemu Manager.
Configuration on the host
Add a virtual serial port to the VM
Provided your VM IS is 101
or use
Configuration on the guest
Configure the terminal if not present
As detailed in https://help.ubuntu.com/community/SerialConsoleHowto#Server_Setup , check if you have the file /etc/init/ttyS0.conf. If not, create it:
then ask upstart to start terminal
You might consider creating the ttyS1.conf file as well, just as a backup in case you have a crash with ttyS0
Reboot the VM, verify that the emulated serial port is there
If ttyS0 is not there, type
from the VM shell
Instruct grub2 to send the boot messages on the VGA display and on the serial port
run
and do a final reboot
Connecting to the Serial Terminal
On the Host, just enter
and enter enter a second time you should get a login prompt
Note: if it seems this is not working, and if you have defined ttyS1, you can connect to itwith the command
Now if you reboot your system you should see that the kernel startup messages are send to both your serial terminal and NoVNC display.
Additionally (quoting from a private email, edited for clarity):
Trouble shooting
You can check that the virtual serial port is present, and properly bound to the unix socket that qm terminal uses with:
which should contains a line starting with serial0 like:
Remember the qm terminal uses Ctrl-O as shortcut, so saving a file from nano with Ctrl-O will log you out instead
It is also possible to have the grub2 and grub accessible from the serial port. See https://help.ubuntu.com/community/Grub2#Booting_from_a_serial_console for how to do this with Grub2.
Retrieved from 'https://pve.proxmox.com/mediawiki/index.php?title=Serial_Terminal&oldid=10187'