Rant: The Risks of Experimental Migration Tools and systemd-boot ESP Limits

I attempted to upgrade my system from openSUSE Leap 15.6 to Leap 16 using the openSUSE migration tool. After the upgrade, the machine became unbootable, and the problems appear to stem from how the migration handles the transition to systemd‑boot and the existing partition layout.

I ran the official opensuse-migration-tool package from Leap 15.6. Only afterwards did I discover, by reading its upstream GitHub repository, that the tool is explicitly marked as experimental and “use with caution"". This warning is visible in project materials, but it is easy to miss when you follow the standard system upgrade documentation, which presents the tool as an available method rather than stressing its experimental status. The package upgrade itself completed without obvious errors, but on reboot the system failed to start the new Leap 16 kernel.

During the migration, the system was switched to systemd‑boot, which follows the Boot Loader Specification and stores boot entries in the EFI System Partition under /loader/entries/. Systemd‑boot does not read kernel images from Btrfs snapshots or parse Btrfs metadata; instead it expects plain EFI‑readable files (kernel and initrd) located on the EFI System Partition. On a typical Leap 15.6 installation, the EFI System Partition is often sized around 100 MB to 256 MB, which can be tight or insufficient for multiple modern kernel and initrd combinations, especially when you add new versions and keep old ones.

In my case, it looks like the upgrade routine tried to move the kernel and initrd to the EFI System Partition for systemd‑boot, but either did not copy them completely or ran out of space on that partition. I did not see a clear error at upgrade time, but the end result was that systemd‑boot did not have a valid, complete kernel to boot. This could be due to a silent “disk full” condition on the EFI System Partition, which would produce truncated or missing files and leave systemd‑boot with broken entries. That part is inferential rather than documented, but it fits the symptoms of an unbootable system after a bootloader switch on a small EFI System Partition.

When I tried to fall back to the old Leap 15.6 kernel while the rest of the system had already been upgraded to Leap 16 user space, the system quickly failed. Mixing an older kernel with a newer user space that includes upgraded glibc and systemd is not supported and can easily result in severe boot problems or kernel panics due to ABI and feature mismatches. In other words, the “old kernel plus new user space” fallback was not a viable rescue path.

At that point, I decided to wipe the disk and install openSUSE Tumbleweed fresh. With current backups available, I was able to restore most of my environment without major data loss, except for some local Brave browser data that had not been backed up. This time, I want to keep the Tumbleweed instance for at least 4-5 years without breaking it. I’ve already cut the fat and eliminated a lot of unneeded stuff.

This experience highlights that openSUSE’s download pages and documentation need very clear, prominent warnings about two things: first, the experimental status and risk profile of the openSUSE migration tool, and second, the bootloader and partitioning changes associated with adopting systemd‑boot, including EFI System Partition space requirements. Users should be made aware in advance that a small EFI System Partition can cause serious issues when switching to systemd‑boot and placing kernels and initrds there.

Finally, Tumbleweed and other recent openSUSE variants are increasingly using systemd‑boot as the default bootloader on UEFI systems. For users who rely on GRUB2’s password‑protected configuration interface and other boot‑level controls, this move can feel like a regression. Systemd‑boot offers a simpler interface with some firmware‑level security options, but it does not replicate GRUB2’s rich access control and configuration features in the same way, which is a real concern for people who want strong authentication at the boot menu itself.

If you want to rant, you need to understand at least the basics. The opensuse-migration-tool does not and did never change the bootloader or the partitioning. And Leap 16.0 does not even use systemd-boot as default. This is some made up stuff. This can also be verified by having a basic look what this tool does (the code is short and simple)

  • it installs the openSUSE-repos-Leap packages to get the Leap 16.0 repos
  • it disables 3rd party repos
  • it performs a plain and simple
    zypper dup --force-resolution --allow-vendor-change --download in-advance
  • it asks if you want to switch from pulseaudio to pipewire
  • it asks if you want to enable 32bit
  • it asks if you want to keep AppArmor or use SElinux

And that is everything. It keeps the complete partitioning and bootloader as it is from the prior installation (in your case Leap 15.6).

2 Likes

Upon post-mortem analysis via live rescue media, I discovered that /etc/sysconfig/bootloader had LOADER_TYPE explicitly defined as "systemd-boot". This configuration explains the structural failure: when the migration tool invoked the sweeping Leap 16 package transaction, the kernel post-install hooks faithfully executed under systemd-boot rules. The automation attempted to stage the new kernel and initrd assets directly onto a legacy EFI System Partition (ESP) optimized for GRUB2 (typically 100MB–256MB), which inevitably triggered an allocation overflow and left the system in a corrupted, unbootable state.

My takeaway is straightforward: openSUSE should prominently feature these architectural shifts, changelogs, or partitioning prerequisites on the main download and documentation pages. Users migrating across major release baselines need explicit warning of what they are getting into, particularly how legacy infrastructure interacts with modernizing boot frameworks.

For fun I fired up a 15.6 VM I had around, fully updated, Packman enabled. Ran the migration tool, and could not replicate what you describe. Which leaves me confused, wondering what you actually did. Any logs you could provide?

Feel free to head over to the Wiki and edit away or clone the relevant sites and submit PR’s for the changes?

Release Notes, Change Logs, Weekly Reviews etc are provided, Tumbleweed users are expected to at least follow the factory mailing list for up and coming changes (some lively discussion on replacing shadow-pw-mgmt with account-utils), likewise the recent XBOOTLDR implementation to alleviate those small ESP’s.
Ref: https://forums.opensuse.org/t/support-of-xbootldr-in-opensuse/194794

Leap 16.0 has been out over a year, Leap 15.6 EoL was extended and officially went EoL just over two months ago and your only now looking at migration?

My failure occurred explicitly at the dracut-initqueue stage. While a straightforward, single-disk VM layout might navigate the upgrade cleanly, environments with complex mount structures present a completely different matrix of failure points. I reckon my experience was the culmination of several underlying issues, and I certainly don’t rule out a configuration oversight on my part. My core argument remains: openSUSE should feature clear documentation or link a comprehensive changelog directly on the download page so users understand the architectural shifts they are walking into.

In a subsequent attempt to evaluate the OS, I used virsh to pass through the physical block device and installed Leap 16 directly via the ISO. The new installer introduced considerable friction; it defaulted to systemd-boot, omitted YaST2, and imposed a restricted feature set that didn’t align with my workflow. Ultimately, I chose to deploy Tumbleweed instead. Although Tumbleweed also defaults to systemd-boot now, I successfully purged it post-install, reverted to a custom-configured GRUB2 setup, and stripped out the remaining bloat to match my requirements.

Look at using Agama profiles for installs?

My delayed migration was a deliberate choice; I had been entirely consumed by a massive, eight-month OpenBSD project. Furthermore, since my day-to-day workload heavily revolves around headless KVM/QEMU environments and I rarely touch GUI applications outside of web browsers, a major distribution upgrade wasn’t an immediate priority.

Moving forward, I plan to closely monitor specific upstream mailing lists to better anticipate these fundamental platform changes. This upgrade marked my first encounter with systemd-boot, the Agama installer, and the apparent deprecation of legacy frameworks like YaST and grub2-efi. Frankly, seeing the ecosystem shift so drastically away from these robust, traditional pillars shook me to the core.

While Agama profiles are useful for automated, clean deployments via JSON configuration schemas, they are entirely irrelevant to an in-place distribution upgrade. My objective was to migrate an existing, deeply configured Leap 15.6 environment via the orchestration tool, rendering a post-facto installation profile out of the question.

After the second failed installation, I decided to switch to Tumbleweed for YaST2 capabilities and the ability to use grub2-efi to password encrypt the full multiboot grub menu. I am satisfied with my present Tumbleweed configuration because I spent a day tweaking it to my liking, and the chances of it breaking soon are slim.

Again your probably 18 months plus behind the eight ball so to speak. These discussions had already been made, implemented etc. Not sure about systemd-boot on Leap 16.0, not seen it here, perhaps Leap 16.1 received it, which is still in the development cycle?

Most of my kvm/qemu deployments on my home lab are on MicroOS and Combustion along with kubernetes.

I’m using Agama and profiles for fresh installs, well one setup is a dual boot and that ran fine by excluding the disks with MacOS on.

Not sure when grub2-efi support will end, but it’s on the cards… Tumbleweed does really roll!!

1 Like