/grub2/i386-pc/normal.mod not found after recent update

I ran zypper dup last night, and shut my laptop down. Now, when I try to start it I get a error saying “error: file ‘/grub2/i386-pc/normal.mod’ not found.”, and it enters a grub rescue console. Note that this is a 64-bit system using legacy BIOS boot. The system is on an encrypted LVM partition, with /boot on an ext2 partition outside of LVM.

Please run https://github.com/arvidjaar/bootinfoscript and make RESULTS.txt available.

Apparently /boot/grub2/i386-pc directory is gone. Is your /boot partition full?

No, far from it. It’s only using 35 MiB out of 1 GiB. That directory does indeed not exist. Nor do I have any memory of it ever existing. Is that not just for UEFI and 32-bit? There is a /boot/grub2/x86-64 directory though, but it’s empty, and there is also a btrfs subvolume on the root partition for /boot/grub2/i386-pc, which would hide the directory on the boot partition when the system is running, and which is also empty.

That i386-pc is for normal grub2 (not UEFI). The “x86_64-efi” is for 64-bit UEFI. As far as I know, opensuse does not yet support 32-bit UEFI.

I’m going to guess what happened. Something went wrong during the install, “/boot” was not properly mounted. So the grub2 files are in the root directory.

That happened to me with opensuse 13.1 (I think one of the beta releases, where I experimented with “btrfs”). The bug was supposedly solved, but maybe you found a way to trigger it.

My “solution” was to copy the files to “/boot”. As I recall, I booted into rescue mode, and mounted the root directory at “/mnt”. And I mounted my “/boot” at “/mnt/mnt”. And then I copied, using


cd /mnt/mnt
( cd /mnt/boot && tar cf - .) | tar xpf -

I then unmounted “/mnt/mnt” and remounted that partition at “/mnt/boot”. Then I did the other stuff needed for chroot mode, and reinstalled grub2.

I don’t have a i368-pc directory on the root partition either though, and I don’t remember having one, but maybe I’m mistaken. It’s worked fine so far though.

This system also initially had OpenSUSE 13.1 installed, with Btrfs (not a beta though). Where’s the bug you mentioned?

Anyway, I’ve now reinstalled the bootloader according to this: https://doc.opensuse.org/documentation/leap/startup/html/book.opensuse.startup/cha.trouble.html#sec.trouble.data.recover.rescue.grub, which did create the /boot/grub2/i386-pc directory, and I can now boot again. The grub boot menu is now text-only though.

That seems to be bug 827520.

I’m glad you have it working.

The grub boot menu is now text-only though.

You might be missing one or more of the directories “backgrounds”, “fonts”, “locale”, :"themes under “/boot/grub2”. If my guess is right, those exist on your root file system (hidden by the mounted “/boot”).

You can use:

# mount --bind / /mnt

and then look at “/mnt/boot” and below to see what is there.

The “backgrounds” and “themes” directories does seem to be missing. They’re not on the root partition though, the only thing in /boot on the root partition seems to be the /boot/grub2/x86_64-efi subvolume.

They are part of the package “grub2-branding-openSUSE”.

Install that package. If it shows as already installed, then do a forced reinstall.

Reinstalling grub2-branding-openSUSE fixed it.