Need help with grub-btrfs?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Antynea
229 Stars 43 Forks GNU General Public License v3.0 245 Commits 4 Opened issues

Description

Include btrfs snapshots at boot options. (Grub menu)

Services available

!
?

Need anything else?

Contributors list

GitHub release

grub-btrfs

This is a version 4.xx of grub-btrfs

BTC donation address:
1Lbvz244WA8xbpHek9W2Y12cakM6rDe5Rt

Description :

Improves Grub by adding "btrfs snapshots" to the Grub menu.

You can boot your system on a "snapshot" from the Grub menu.
Supports manual snapshots, snapper, timeshift ...

Warning: booting on read-only snapshots can be tricky

If you choose to do it,

/var/log
or even
/var
must be on a separate subvolume.
Otherwise, make sure your snapshots are writeable.
See this ticket for more info.

This project includes its own solution.
Refer to the documentation.


What does grub-btrfs v4.xx do :

  • Automatically List snapshots existing on root partition (btrfs).
  • Automatically Detect if "/boot" is in separate partition.
  • Automatically Detect kernel, initramfs and intel/amd microcode in "/boot" directory on snapshots.
  • Automatically Create corresponding "menuentry" in
    grub.cfg
  • Automatically detect snapper and use snapper's snapshot description if available.
  • Automatically generate
    grub.cfg
    if you use the provided systemd service.

Installation :

Arch Linux

The package is available in the community repository grub-btrfs

pacman -S grub-btrfs

Gentoo

grub-btrfs is only available in the Gentoo User Repository (GURU) and not in the official Gentoo repository.
If you have not activated the GURU yet, do so by running:

emerge -av app-eselect/eselect-repository 
eselect repository enable guru 
emerge --sync 

Now merge grub-btrfs via

emerge app-backup/grub-btrfs

Manual

  • Run
    make install
    or look into Makefile for instructions on where to put each file.
  • Dependencies:

NOTE: All distros

Generate your Grub menu after installation for the changes to take effect.
For example:
On Arch Linux or Gentoo use

grub-mkconfig -o /boot/grub/grub.cfg
.
On Fedora use
grub2-mkconfig -o /boot/grub2/grub.cfg

On Debian-like distribution
update-grub
is an alias to
grub-mkconfig ...

Customization :

You have the possibility to modify many parameters in

/etc/default/grub-btrfs/config
.
See config file for more information.

Automatically update grub :

Systemd

  1. If you would like grub-btrfs menu to automatically update when a snapshot is created or deleted:
  2. Use
    systemctl enable grub-btrfs.path
    .
    • grub-btrfs.path
      automatically (re)generates
      grub-btrfs.cfg
      when a modification appears in
      /.snapshots
      mount point (by default).
    • If the
      /.snapshots
      mount point is already mounted, then use
      systemctl start grub-btrfs.path
      to start monitoring.
      Otherwise, the unit will automatically start monitoring when the mount point will be available.
  3. If your snapshots location aren't mounted in

    /.snapshots
    , you must modify
    grub-btrfs.path
    unit using
    systemctl edit --full grub-btrfs.path
    and run
    systemctl reenable grub-btrfs.path
    for changes take effect.
    To find out the name of the
    .mount
    unit
    use
    systemctl list-units -t mount
    .
    • For example: Timeshift mounts its snapshot folder in

      /run/timeshift/backup/timeshift-btrfs/snapshots
      .

      Use

      systemctl edit --full grub-btrfs.path
      . Then replace the whole block by: ``` [Unit] Description=Monitors for new snapshots DefaultDependencies=no Requires=run-timeshift-backup.mount After=run-timeshift-backup.mount BindsTo=run-timeshift-backup.mount

      [Path] PathModified=/run/timeshift/backup/timeshift-btrfs/snapshots

      [Install] WantedBy=run-timeshift-backup.mount ``

      Then save and finally run
      systemctl reenable grub-btrfs.path
      for changes take effect.  
      Optional:  
      If the
      /run/timeshift/backup/timeshift-btrfs/snapshots
      mount point is already mounted,  
      then use
      systemctl start grub-btrfs.path` to start monitoring.
      Otherwise, the unit will automatically start monitoring when the mount point will be available.
    • You can view your change to

      systemctl cat grub-btrfs.path
      .
    • To revert change use

      systemctl revert grub-btrfs.path
      .
  4. If you would like grub-btrfs menu to automatically update on system restart/shutdown:
    Look at this comment
    Currently not implemented

    OpenRC

  5. There is sadly no similar solution to the systemd service yet.
    As a workaround it is possible to add a script to

    /etc/local.d
    to execute the snapshot menu update every time you shut down your system.
    To do so just add the following script as
    /etc/local.d/grub-btrfs-update.stop
    ```

    !/bin/bash

    description="Update the grub btrfs snapshots menu" name="grub-btrfs-update"

    depend() { use localmount }

    bash -c 'if [ -s "${GRUBBTRFSGRUBDIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41snapshots-btrfs; else {GRUBBTRFSMKCONFIG:-grub-mkconfig} -o {GRUBBTRFSGRUB_DIRNAME:-/boot/grub}/grub.cfg; fi' ```

    If you want to run the menu update on startup instead, rename the file to

    grub-btrfs-update.start
Warning :

by default,

grub-mkconfig
command is used.
Might be
grub2-mkconfig
on some systems (Fedora ...).
Edit
GRUB_BTRFS_MKCONFIG
variable in
/etc/default/grub-btrfs/config
file to reflect this.

Special thanks for assistance and contributions

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.