I have two hard drives, with two corresponding Grubs. One is from Arch Linux, and the other is from Ubuntu. Using Arch's grub, I can boot into either distribution. However, using Ubuntu's grub, I can see both Arch and Ubuntu, but cannot boot into Arch. I get the error:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
I compared grub.cfg for both distributions. In Ubuntu's grub, I can see an entry for Arch, with the following line.
initrd /boot/intel-ucode.img
I changed it to follow Arch's grub.cfg:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Now I can boot into Arch from Ubuntu's grub. It appears that Ubuntu is not appending this required option by default. How can I make Ubuntu automatically create the correct entry?
Edit
I'm updating Arch's grub with grub-mkconfig -o /boot/grub/grub.cfg. In Ubuntu, I've tried both update-grub and the raw command above (which it is aliased to).
Edit 2
The uncommented lines of /etc/default/grub
GRUB_DEFAULT="saved"
GRUB_SAVEDEFAULT="true"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="3"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
update-grub2is aliased toupdate-grub. I actually do see an Arch entry, and it is detected; it just has the wrong settings. I'll clarify in an edit.