Home > Support > HOWTO List > pv-grub


pv-grub allows a Xen VPS (domU) to boot a kernel that is stored inside the domU filesystem. This means that the kernel supplied by the distribution can be used, and allows the use of kernel modules.

By default we setup VPSs with an external kernel (one that is stored on the host).  RimuHosting builds and tests the external kernels before making them available via our kernel change tool. The external kernels we provide do not allow kernel modules.

Due to the January 2018 Specter/Meltdown CVEs, using pvgrub may cause a significant performance penalty. We strongly recommend using our supplied kernel instead. Please contact us if you need more details.

When to use pv-grub

Use pv-grub if you want to ...

If your VPS is already configured for pv-grub (pv-grub will be selected in our kernel change tool) you should leave it as-is.

Use the external (RimuHosting-provided) kernel if you ...

Enabling pv-grub

Before enabling pv-grub you will need to install a kernel and setup GRUB inside your VPS.

Enabling pv-grub varies by distribution. The kernel you use will need to have Xen domU support. Most modern distributions provide domU kernels out of the box. We have instructions below for all of our current distributions. Once the kernel is installed and GRUB is configured simply select pv-grub from our kernel change tool here: https://rimuhosting.com/cp/vps/kernel.jsp

If you hit any issues with pv-grub you can use our kernel change tool to revert back to the 'default' kernel listed there. You do not need to do anything else to revert - our scripts will take care of it as part of the kernel change process. You may want to then remove any additional packages you installed (e.g. the kernel and GRUB packages).


For 32bit systems:

apt-get install grub-legacy linux-image-686-pae

For 64bit systems:

apt-get install grub-legacy linux-image-amd64

Then update the root devices in grub.conf:

mkdir -p /boot/grub
echo 0 > /boot/grub/default
sed s@'# kopt=.*'@'# kopt=root=/dev/xvda1 console=hvc0 ro'@g --in-place /boot/grub/menu.lst
sed s@'# groot=.*'@'# groot=(hd0)'@g --in-place /boot/grub/menu.lst
ln -sf /boot/grub/menu.lst /boot/grub/grub.conf

For "Squeeze: and older, same as above, but the kernel package to use is "linux-image-xen-amd64" for 64 bit, or "linux-image-xen-686-pae" for 32 bit systems.


Install a kernel:

yum install kernel

Create /boot/grub/grub.conf manually, adding a default entry e.g.:


title CentOS (2.6.32-220.4.2.el6.x86_64)
root (hd0)
kernel /boot/vmlinuz-2.6.32-220.4.2.el6.x86_64 root=/dev/xvda1 console=hvc0 ro
initrd /boot/initramfs-2.6.32-220.4.2.el6.x86_64.img

For 'grubby' to work (sets up grub entries automatically) you may also need these:

ln -sf /boot/grub/grub.conf /boot/grub/menu.lst
ln -sf /boot/grub/grub.conf /etc/grub.conf 

Running 'grubby --default-kernel' should hopefully work without any errors. And if so future kernels installed with yum or RPM should be added to grub.conf.


Install the grub-legacy-ec2 package and kernel. Then remove grub2:

apt-get install grub-legacy-ec2 linux-image-virtual
apt-get remove --purge grub2 
ln -sf /boot/grub/menu.lst /boot/grub/grub.conf 

You may need to properly fix the root parameter in the /boot/grub/menu.lst file, to point to the correct device, This will do the trick:

rm -f /boot/grub/menu.lst
update-grub-legacy-ec2 -y
sed s@'# kopt=.*'@'# kopt=root=/dev/xvda1 console=hvc0 ro'@g --in-place /boot/grub/menu.lst