This is a version 4.xx of grub-btrfs
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 ...
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.
- 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 the type/tags and descriptions/comments of snapper/timeshift snapshots.
- Automatically generate
grub.cfg
if you use the provided systemd service.
The package is available in the community repository grub-btrfs
pacman -S grub-btrfs
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
- Run
make install
or look into Makefile for instructions on where to put each file. - Run
make help
to check what options are available. - Dependencies:
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 ...
You have the possibility to modify many parameters in /etc/default/grub-btrfs/config
.
See config file for more information.
- If you would like grub-btrfs menu to automatically update when a snapshot is created or deleted:
- Use
systemctl enable grub-btrfs.path
.grub-btrfs.path
automatically (re)generatesgrub-btrfs.cfg
when a modification appears in/.snapshots
mount point (by default).- If the
/.snapshots
mount point is already mounted, then usesystemctl start grub-btrfs.path
to start monitoring.
Otherwise, the unit will automatically start monitoring when the mount point will be available.
- If your snapshots location aren't mounted in
/.snapshots
, you must modifygrub-btrfs.path
unit using
systemctl edit --full grub-btrfs.path
and runsystemctl reenable grub-btrfs.path
for changes take effect.
To find out the name of the.mount
unit
usesystemctl 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 usesystemctl 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
.
-
- If you would like grub-btrfs menu to automatically update on system restart/ shutdown:
Look at this comment
Currently not implemented
- If you would like grub-btrfs menu to automatically update when a snapshot is created or deleted:
- Use
rc-config add grub-btrfsd default
, to start the grub-btrfsd daemon the next time the system boots.- To start
grub-btrfsd
right now, runrc-service grub-btrfsd start
grub-btrfsd
automatically watches the snapshot directory of timeshift (/run/timeshift/backup/timeshift-btrfs/snapshots) and updates the grub-menu when a change occurs.
- To start
- Currently untested for snapper
-
If you would like grub-btrfs menu to automatically update on system restart/ shutdown: 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 "${GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub-btrfs.cfg" ]; then /etc/grub.d/41_snapshots-btrfs; else {GRUB_BTRFS_MKCONFIG:-grub-mkconfig} -o {GRUB_BTRFS_GRUB_DIRNAME:-/boot/grub}/grub.cfg; fi'
Make your script executeable with
chmod a+x /etc/local.d/grub-btrfs-update.stop
.
- The extension ".stop" at the end of the filename indicates to locald that this script should be run at shutdown.
If you want to run the menu update on startup instead, rename the file to
grub-btrfs-update.start
- Works for snapper and timeshift
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.