From Fedora Project Wiki

Description

This test case creates a dual boot system with two Fedoras of different release versions, using btrfs snapshots, works as expected

Setup

  • Install Fedora 36. Any desktop, using Automatic partitioning.
  • Freshen your backups, just in case
  • Backup /boot/efi, just in case, e.g.
    1. cd /boot
    2. sudo tar -acf bootefibackup.tar efi

Actions

Make snapshots

  1. Use the df command to find the /dev node/partition for your / volume
  2. Run mount /dev/nvme0n1p5 /mnt; cd /mnt; ls -l
  3. You should see two directories, root and home. These are Btrfs subvolumes, and we can snapshot them; e.g
  4. btrfs subvolume snapshot root root37 #any name will do
  5. Optional: btrfs sub snap -r home home.20220806 #creates a read-only snapshot of home, should things go really sour for some reason, you can copy over files or configurations from the read-only snapshot back into home on a case by case basis
  6. Optional: You can modify files in the snapshot nano /mnt/root37/etc/dnf/dnf.conf before rebooting. See below "One bootloader" and "Limitations" sections for some reasons you might modify dnf.conf.

Create a bootloader entry

  1. ls -l /boot/loader/entries
  2. Dup the most recent snippet, e.g. cp /boot/loader/entries/799c3cd1115b414cbe5c030fc6dc0d16-5.18.15-200.fc36.x86_64.conf /boot/loader/entries/799c3cd1115b414cbe5c030fc6dc0d16-5.18.15-200.fc36.x86_64-UPGRADE.conf
  3. Edit the copy nano boot/loader/entries/799c3cd1115b414cbe5c030fc6dc0d16-5.18.15-200.fc36.x86_64-UPGRADE.conf
    1. title line, add any distinctive word anywhere in this line such as "UPGRADE" or "SNAPSHOT"
    2. options line, find rootflags=subvol=root and change it to match your snapshot name rootflags=subvol=root37
    3. save and exit
  4. Make it the default grubby --set-default=/boot/
  5. Optional: Instead of creating a new drop-in BLS file, you can show the GRUB menu on reboot, and modify the default entry manually. You'll do this twice: once to boot the snapshot to do system-upgrade download; and then again immediate following system-upgrade reboot`. And then you won't need to hunt down this BLS snippet and delete it later.

One bootloader

As each Fedora performs updates, it'll step on the bootloader in /boot/efi. It shouldn't be a problem unless there are bugs and then "wheee!" So you could consider adding an exclude=grub2-* in the test instance's dnf.conf.

How to boot

  1. GRUB menu shows boot options: variant+version+kernelversion for switching between the two; or
  2. Use grubby --set-default=/boot/vmlinuz-5.18.15-200.fc36.x86_64

Limitations

  1. /boot is only 1GiB by default, so this is the limiting factor right now, how many Fedoras you can have installed at one time. Two is safe. Three is iffy unless
    1. configure the test Fedora instances' dnf.conf such exclude=kernel-*;
    2. consider deleting the "rescue" initramfs and kernel for the test instances, also removing dracut-config-rescue-056-1.fc36.x86_64 from them so these files aren't recreated; or
    3. put /boot on a Btrfs subvolume.