Multiple installations on one partition
It is possible to have multiple Garuda (or other Linux) installations on a single partition using Btrfs subvolumes. The basic steps for configuring this kind of setup are outlined here.
Rename the default subvolumes
Section titled “Rename the default subvolumes”-
Create a mount point outside the top-level subvolumes. In my example here, my Btrfs partition is on
nvme0n1p2. Obviously change that to whatever your Btrfs partition happens to be.Terminal window sudo mkdir /mnt/top-level_subvolumesudo mount -o subvolid=5 /dev/nvme0n1p2 /mnt/top-level_subvolumecd /mnt/top-level_subvolume -
Rename all the subvolumes. Replace
gnome,gnome_cache, etc. from the example here with whatever names you wish to use for your subvolumes.Terminal window sudo mv @ gnomesudo mv @cache gnome_cachesudo mv @home gnome_homesudo mv @log gnome_logsudo mv @root gnome_rootsudo mv @srv gnome_srvsudo mv @tmp gnome_tmp
It is customary to mark these subvolumes with ”@”. This convention can be preserved or not depending on your preference. In this example, ”@” has not been used in the subvolume names.
Update /etc/fstab
Section titled “Update /etc/fstab”It is important to get your /etc/fstab updated before you reboot. Take extra care to ensure the entries are accurate.
Update the subvol= values to the new names (i.e. subvol=@ should be changed to subvol=gnome, and so on.)
Here is an example, continuing with the “gnome” subvolume names:
<device> <mount point> <type> <options>UUID=xxxx-xxxx /boot/efi vfat defaults,noatime 0 2UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / btrfs subvol=/gnome,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home btrfs subvol=/gnome_home,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /root btrfs subvol=/gnome_root,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv btrfs subvol=/gnome_srv,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/cache btrfs subvol=/gnome_cache,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/log btrfs subvol=/gnome_log,noatime,compress=zstd 0 0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/tmp btrfs subvol=/gnome_tmp,noatime,compress=zstd 0 0tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0Update Grub
Section titled “Update Grub”-
Change the name of the boot directory from “Garuda” to something else so it won’t create a conflict when you install the next ISO. The next installation will also name the boot directory “Garuda”, which will simply overwrite any directory with the same name (this would make our first installation unbootable).
Terminal window sudo mv /boot/efi/EFI/Garuda /boot/efi/EFI/Gnome -
Change the
GRUB_DISTRIBUTOR=line in/etc/default/grubto match whatever you just named the boot directory in/boot/efi/EFI/.Terminal window sudo micro /etc/default/grub/etc/default/grub GRUB_DISTRIBUTOR="Gnome"The directory name is set by
--bootloader-idin thegrub-installcommand, not by this line. Use the same name you gave the directory above. -
Next, run the Grub installation script.
Terminal window sudo grub-install ...I have put “
...” to mean “add whatever options are specifically relevant for your Grub installation”. In some cases,grub-installorgrub-install --no-nvramis enough. If you are not sure, refer to the document here: https://wiki.archlinux.org/title/GRUB -
Regenerate the Grub configuration file.
Terminal window sudo grub-mkconfig -o /boot/grub/grub.cfg
Add another installation
Section titled “Add another installation”-
Boot to the live environment and start the installer. Choose the manual partitioning option.
-
Select the EFI partition and click on Edit.
EFI partition:
- Content: Keep
- Mount point:
/boot/efi
-
Next, select the Btrfs partition and click on Edit.
Btrfs partition:
- Content: Keep
- Mount point:
/
-
Proceed with the rest of the installation as you normally would.
This process can be repeated as many times as needed, so long as you continue to choose unique names for the subvolumes and Grub distributor entries each time.