The general idea is to:
From the grub command prompt, you would issue:
ls
which should list something like:
(hd0) (hd0,msdos2) (hd0,msdos1)
where (hd0) is a drive and (hd0,msdos2) and (hd0,msdos1) means that (hd0) has the old style MBR partition table - output will be similar for GPT partition tables.
Next would be to load the filesystem module:
insmod ext2
in this case, the ext module is loaded but his may differ depending on (hd0).
Now with the module loaded, the filesystem can be probed:
ls (hd0,1)/
The purpose is to locate:
this can usually be in, like:
(hd0,1)/vmlinuz - for Debian-like distros that place the kernel in the root(hd0,1)/boot/vmlinuz-4.4-xen - for Xen that places the kernel under /boot/
You will have to search for the image using ls - especially if you have no clue where the kernel is placed. The same applies to the initrd image:
(hd0,1)/initrd.img - for Debian, or perhaps,(hd0,1)/boot/initrd-4.4-xen.img - for XenWhen you locate the files, let's assume you picked:
(hd0,1)/boot/vmlinuz-4.4-xen for the kernel, and(hd0,1)/boot/initrd-4.4-xen.img for the initrd imagethen you would issue:
set root=(hd0,1)
to instruct grub to change the root into the first partition of drive (hd0).
Now you specify the kernel image and the initrd image:
linux /boot/vmlinuz-4.4-xen root=/dev/sda1 initrd /boot/initrd-4.4-xen.img
where /dev/sda1 is the device where the filesystem is located. Note that some installs can have a separate boot partition and that the general guideline for mappings is: /dev/sda1 for (hd0,1), /dev/sda2 for (hd0,2), etc... However, this is kernel-dependent so there will be some amount of guesswork involved.
Finally, issue:
boot
and grub should boot.
To boot in single user mode, you would just have to change the line:
linux /boot/vmlinuz-4.4-xen root=/dev/sda1
and append the run-level number to that line, as in:
linux /boot/vmlinuz-4.4-xen root=/dev/sda1 1
where 1 stands for run-level 1, meaning single-user mode.
In single user mode you can reset the root password if need be. If that does not work, you can try:
linux /boot/vmlinuz-4.4-xen root=/dev/sda1 init=/bin/bash
which should load up /bin/bash instead so you can type passwd and reset the root password.
To boot from a grub rescue shell, you have to load two modules before any command:
normallinuxFor instance, the example above would be transformed into:
set prefix=(hd0,1)/boot/grub insmod ext2 set root=(hd0,1)
to set the prefix to the grub image and switch the root to (hd0,1), followed by:
insmod normal normal insmod linux
and then specify the path to the the kernel and initrd image:
linux /boot/vmlinuz-4.4-xen root=/dev/sda1 initrd /boot/initrd-4.4-xen.img
Then to boot, finally issue:
boot
Note that tab completion should work after loading normal and linux modules.