Skip to content

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.

  1. 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_subvolume
    sudo mount -o subvolid=5 /dev/nvme0n1p2 /mnt/top-level_subvolume
    cd /mnt/top-level_subvolume
  2. 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 @ gnome
    sudo mv @cache gnome_cache
    sudo mv @home gnome_home
    sudo mv @log gnome_log
    sudo mv @root gnome_root
    sudo mv @srv gnome_srv
    sudo 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.

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:

/etc/fstab
<device> <mount point> <type> <options>
UUID=xxxx-xxxx /boot/efi vfat defaults,noatime 0 2
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / btrfs subvol=/gnome,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home btrfs subvol=/gnome_home,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /root btrfs subvol=/gnome_root,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /srv btrfs subvol=/gnome_srv,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/cache btrfs subvol=/gnome_cache,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/log btrfs subvol=/gnome_log,noatime,compress=zstd 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/tmp btrfs subvol=/gnome_tmp,noatime,compress=zstd 0 0
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
  1. 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
  2. Change the GRUB_DISTRIBUTOR= line in /etc/default/grub to 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-id in the grub-install command, not by this line. Use the same name you gave the directory above.

  3. 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-install or grub-install --no-nvram is enough. If you are not sure, refer to the document here: https://wiki.archlinux.org/title/GRUB

  4. Regenerate the Grub configuration file.

    Terminal window
    sudo grub-mkconfig -o /boot/grub/grub.cfg
  1. Boot to the live environment and start the installer. Choose the manual partitioning option.

  2. Select the EFI partition and click on Edit.

    EFI partition:

    • Content: Keep
    • Mount point: /boot/efi
  3. Next, select the Btrfs partition and click on Edit.

    Btrfs partition:

    • Content: Keep
    • Mount point: /
  4. 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.