GRUB2 is corrupted by system updates, grub2-install complains about blocklists

I’m facing a serious issue with my system. It appears that whenever there’s a Kernel upgrade (after ‘zypper dup’) and the boot loader is reinstalled, GRUB2 gets broken: I only see the word GRUB against the black screen but the actual menu never appears. I have to boot into rescue mode to repair it using console commands.

The issue seems to be caused by something called blocklists. Once I log in from a rescue console and run grub2-install, I’m met with the following error:

# grub-install /dev/sda1
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

I have to use the --force argument, in which case I’m thankfully able to repair it and reboot.

# grub-install --force /dev/sda1
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
Installation finished. No error reported 

What is causing this, how do I make it stop? Also why is it complaining about ext2 given that my root partition (including /boot) is ext4?

That does not sound right.

There should not be a boot loader reinstall after a kernel update. It should only be reinstalled after an update of something that affects the boot loader (such as a grub2 update or maybe an lvm update).

Checking here, I see that the most recent grub reinstall for Tumbleweed was Sept 26th. The most recent kernel update was yesterday.

# grub-install /dev/sda1
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

I have to use the --force argument, in which case I’m thankfully able to repair it and reboot.

This is normal when you install to a partition (instead of to the MBR). You always have to use “–force” in those circumstances.

Maybe you should run Yast bootloader, and see if it is confused about where to install booting. Perhaps it is reinstalling to the wrong place.

Is it certain that this is normal? Judging by the settings, I boot openSUSE from a partition for years… never had this problem until last week. Something must have happened but I have no idea what changed.

I see no errors or warning in the YaST2 boot loader menu. The options checked in the Boot Code Options tab are “Boot from Partition”, “Set active Flag in Partition Table for Boot Partition”, “Write generic Boot Code to MBR”.

As far as location is concerned, my /boot directory is now located on the root partition and is not a separate partition of its own. My root partition is ext4.

Failing to boot is not normal.

Requiring “–force” is normal. Yast bootloader knows about that. When the system reinstalls grub, it knows about that.

Because grub has single driver ext2 which handles all ext[234] flavors. It does not distinguish between them.

Okay. I wonder what’s corrupting my installation after some updates in that case. I did notice the “Boot from Partition” flag was disabled in YaST2 - Boot Loader, I re-enabled it yesterday after checking out the menu to respond here; It might have been that none of the Boot Loader Location options were enabled any more… if so I should not be seeing the problem again now.

Thanks, that explains this message. For a moment I thought it might have been incorrect detection of the partition type.

A bit pedantic, but sometimes it matters to understand what is what.

This is not about partition type, but about file system type.

The partition type is in every entry in the partition table. It should inform about what the intended use of the partition is.
E.g. for DOS partition tables it is one byte and can have values like :
x’05’ extended partition
x’82’ Linux swap
x’83’ Linux

Inside a partition itself there might be a file system. And file systems are developed in the course of history in plentyfull types. E.g. Reiserfs, ext2/3/4 series, XFS, Btrfs, etc.