mirror of
https://github.com/Antynea/grub-btrfs.git
synced 2026-03-06 22:35:18 +08:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
773a8bfb76 | ||
|
|
1b40cfee20 | ||
|
|
358dedc392 | ||
|
|
55dc182b34 | ||
|
|
23ddb063cb | ||
|
|
ca51d74265 | ||
|
|
f8937a3fc7 | ||
|
|
9265eb96de | ||
|
|
72edee3d1c | ||
|
|
d24ba197a8 | ||
|
|
0e826391f1 | ||
|
|
7166d939fa |
2
10-update_grub.conf
Normal file
2
10-update_grub.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[Service]
|
||||||
|
ExecStartPost=/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg
|
||||||
@@ -1,59 +1,65 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#################################################################################################################################################
|
#########################################################################################################################################################################
|
||||||
# Written by: Antynea #
|
# Written by: Antynea #
|
||||||
# #
|
# BTC donation address: 1Lbvz244WA8xbpHek9W2Y12cakM6rDe5Rt #
|
||||||
# Purpose: Include btrfs snapshots at boot options (grub-menu). #
|
# #
|
||||||
# #
|
# Purpose: Include btrfs snapshots at boot options (grub-menu). #
|
||||||
# What this script does: #
|
# #
|
||||||
# - Automatically List snapshots existing on root partition (btrfs). #
|
# What this script does: #
|
||||||
# - Automatically Detect if "/boot" is in separate partition. #
|
# Simple rollback using snapshots you made previously. #
|
||||||
# - Automatically Detect kernel, initramfs and intel microcode in "/boot" directory on snapshots. (For custon name, see below.) #
|
# - Automatically List snapshots existing on root partition (btrfs). #
|
||||||
# - Automatically Create corresponding "menuentry" in grub.cfg , which ensures a very easy rollback. #
|
# - Automatically Detect if "/boot" is in separate partition. #
|
||||||
# #
|
# - Automatically Detect kernel, initramfs and intel microcode in "/boot" directory on snapshots. (For custon name, see below.) #
|
||||||
# How to use it: #
|
# - Automatically Create corresponding "menuentry" in grub.cfg , which ensures a very easy rollback. #
|
||||||
# - Add this lines to /etc/default/grub: #
|
# - Automatically detect snapper and use snapper's snapshot description if available. #
|
||||||
# #
|
# #
|
||||||
# * GRUB_BTRFS_SUBMENUNAME="Arch Linux snapshots" #
|
# How to use it: #
|
||||||
# (Name appearing in the Grub menu.) #
|
# - Add this lines to /etc/default/grub: #
|
||||||
# * GRUB_BTRFS_PREFIXENTRY="Snapshot:" #
|
# #
|
||||||
# (Add a name ahead your snapshots entries in the Grub menu.) #
|
# * GRUB_BTRFS_SUBMENUNAME="Arch Linux snapshots" #
|
||||||
# * GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT="true" #
|
# (Name appearing in the Grub menu.) #
|
||||||
# (Show full path snapshot or only name in the Grub menu) #
|
# * GRUB_BTRFS_PREFIXENTRY="Snapshot:" #
|
||||||
# * GRUB_BTRFS_TITLE_FORMAT="p/d/n" #
|
# (Add a name ahead your snapshots entries in the Grub menu.) #
|
||||||
# (Custom title, shows/hides p"prefix" d"date" n"name" in the Grub menu, separator "/", custom order available) #
|
# * GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT="true" #
|
||||||
# * GRUB_BTRFS_LIMIT="100" #
|
# (Show full path snapshot or only name in the Grub menu) #
|
||||||
# (Limit the number of snapshots populated in the GRUB menu.) #
|
# * GRUB_BTRFS_TITLE_FORMAT="p/d/n" #
|
||||||
# * GRUB_BTRFS_SUBVOLUME_SORT="descending" #
|
# (Custom title, shows/hides p"prefix" d"date" n"name" in the Grub menu, separator "/", custom order available) #
|
||||||
# (Sort the found subvolumes by newest first ("descending") or oldest first ("ascending"). #
|
# * GRUB_BTRFS_LIMIT="100" #
|
||||||
# If "ascending" is chosen then the $GRUB_BTRFS_LIMIT oldest subvolumes will populate the menu.) #
|
# (Limit the number of snapshots populated in the GRUB menu.) #
|
||||||
# * GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="true" #
|
# * GRUB_BTRFS_SUBVOLUME_SORT="descending" #
|
||||||
# (Show snapshots found during run "grub-mkconfig") #
|
# (Sort the found subvolumes by newest first ("descending") or oldest first ("ascending"). #
|
||||||
# * GRUB_BTRFS_SHOW_TOTAL_SNAPSHOTS_FOUND="true" #
|
# If "ascending" is chosen then the $GRUB_BTRFS_LIMIT oldest subvolumes will populate the menu.) #
|
||||||
# (Show Total of snapshots found during run "grub-mkconfig") #
|
# * GRUB_BTRFS_SHOW_SNAPSHOTS_FOUND="true" #
|
||||||
# * GRUB_BTRFS_NKERNEL=("vmlinuz-linux") #
|
# (Show snapshots found during run "grub-mkconfig") #
|
||||||
# (Use only if you have custom kernel name or auto-detect failed.) #
|
# * GRUB_BTRFS_SHOW_TOTAL_SNAPSHOTS_FOUND="true" #
|
||||||
# * GRUB_BTRFS_NINIT=("initramfs-linux.img" "initramfs-linux-fallback.img") #
|
# (Show Total of snapshots found during run "grub-mkconfig") #
|
||||||
# (Use only if you have custom initramfs name or auto-detect failed.) #
|
# * GRUB_BTRFS_NKERNEL=("vmlinuz-linux") #
|
||||||
# * GRUB_BTRFS_INTEL_UCODE=("intel-ucode.img") #
|
# (Use only if you have custom kernel name or auto-detect failed.) #
|
||||||
# (Use only if you have custom intel-ucode or auto-detect failed.) #
|
# * GRUB_BTRFS_NINIT=("initramfs-linux.img" "initramfs-linux-fallback.img") #
|
||||||
# * GRUB_BTRFS_IGNORE_SPECIFIC_PATH=("var/lib/docker" "nosnapshot") #
|
# (Use only if you have custom initramfs name or auto-detect failed.) #
|
||||||
# (Ignore specific path during run "grub-mkconfig") #
|
# * GRUB_BTRFS_INTEL_UCODE=("intel-ucode.img") #
|
||||||
# * GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES="false" #
|
# (Use only if you have custom intel-ucode or auto-detect failed.) #
|
||||||
# (Create entries with matching version number instead of all possible combinations of kernel and initramfs) #
|
# * GRUB_BTRFS_IGNORE_SPECIFIC_PATH=("var/lib/docker" "nosnapshot") #
|
||||||
# #
|
# (Ignore specific path during run "grub-mkconfig") #
|
||||||
# - Generate grub.cfg (on Arch Linux use grub-mkconfig -o /boot/grub/grub.cfg) #
|
# * GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES="false" #
|
||||||
# #
|
# (Create entries with matching version number instead of all possible combinations of kernel and initramfs) #
|
||||||
# - grub-btrfs automatically generates snapshots entries. #
|
# * GRUB_BTRFS_SNAPPER_CONFIG="root" #
|
||||||
# - You will see it appear different entries (e.g : Snapshot: [2014-02-12 11:24:37] my snapshot name overkill) #
|
# (Snapper's config name to use) #
|
||||||
# #
|
# #
|
||||||
# #
|
# - Generate grub.cfg (on Arch Linux use grub-mkconfig -o /boot/grub/grub.cfg) #
|
||||||
# To do: #
|
# #
|
||||||
# #
|
# - grub-btrfs automatically generates snapshots entries. #
|
||||||
# * Snapper support .... #
|
# - You will see it appear different entries (e.g : Snapshot: [2014-02-12 11:24:37] my snapshot name overkill) #
|
||||||
# #
|
# #
|
||||||
#################################################################################################################################################
|
# Automatically update grub #
|
||||||
|
# If you would like grub to automatically update when Snapper timeline snapshots and cleanups occur, simply install 10-update_grub.conf in the following locations: #
|
||||||
|
# - /etc/systemd/system/snapper-timeline.service.d/ #
|
||||||
|
# - /etc/systemd/system/snapper-cleanup.service.d/ #
|
||||||
|
# Once the configuration files are in place, systemctl daemon-reload should be run to reload the units and make the changes active. #
|
||||||
|
# #
|
||||||
|
#########################################################################################################################################################################
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
@@ -99,6 +105,8 @@ show_total_snap_found=${GRUB_BTRFS_SHOW_TOTAL_SNAPSHOTS_FOUND:-"true"}
|
|||||||
ignore_specific_path=("${GRUB_BTRFS_IGNORE_SPECIFIC_PATH[@]}")
|
ignore_specific_path=("${GRUB_BTRFS_IGNORE_SPECIFIC_PATH[@]}")
|
||||||
## create only entries with harmonized version numbers
|
## create only entries with harmonized version numbers
|
||||||
harmonized_entries=${GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES:-"false"}
|
harmonized_entries=${GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES:-"false"}
|
||||||
|
## snapper's config name
|
||||||
|
snapper_config=${GRUB_BTRFS_SNAPPER_CONFIG:-"root"}
|
||||||
|
|
||||||
|
|
||||||
########################
|
########################
|
||||||
@@ -256,11 +264,11 @@ snapshot_list()
|
|||||||
# Query info from snapper if it is installed
|
# Query info from snapper if it is installed
|
||||||
type snapper >/dev/null 2>&1
|
type snapper >/dev/null 2>&1
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
local snapper_ids=($(snapper -t 0 list -a | tail -n +3 | cut -d'|' -f 2))
|
local snapper_ids=($(snapper -t 0 -c "$snapper_config" list | tail -n +3 | cut -d'|' -f 2))
|
||||||
local snapper_types=($(snapper -t 0 list -a | tail -n +3 | cut -d'|' -f 1))
|
local snapper_types=($(snapper -t 0 -c "$snapper_config" list | tail -n +3 | cut -d'|' -f 1))
|
||||||
|
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
local snapper_descriptions=($(snapper -t 0 list -a | tail -n +3 | cut -d'|' -f 7))
|
local snapper_descriptions=($(snapper -t 0 -c "$snapper_config" list | tail -n +3 | cut -d'|' -f 7))
|
||||||
fi
|
fi
|
||||||
|
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
|
|||||||
40
README.md
40
README.md
@@ -1,14 +1,15 @@
|
|||||||
[](https://github.com/Antynea/grub-btrfs)
|
[](https://github.com/Antynea/grub-btrfs)
|
||||||
|
|
||||||
### grub-btrfs
|
## grub-btrfs
|
||||||
|
|
||||||
This is a version 2.xx of grub-btrfs
|
This is a version 2.xx of grub-btrfs
|
||||||
|
##### BTC donation address: 1Lbvz244WA8xbpHek9W2Y12cakM6rDe5Rt
|
||||||
#### Description
|
##
|
||||||
|
### Description
|
||||||
|
|
||||||
grub-btrfs, Include btrfs snapshots at boot options. (grub menu)
|
grub-btrfs, Include btrfs snapshots at boot options. (grub menu)
|
||||||
|
##
|
||||||
#### What does grub-btrfs v2.xx do :
|
### What does grub-btrfs v2.xx do :
|
||||||
|
|
||||||
Simple rollback using snapshots you made previously.
|
Simple rollback using snapshots you made previously.
|
||||||
|
|
||||||
@@ -21,9 +22,8 @@ Simple rollback using snapshots you made previously.
|
|||||||
* Automatically Create corresponding "menuentry" in grub.cfg , which ensures a very easy rollback.
|
* Automatically Create corresponding "menuentry" in grub.cfg , which ensures a very easy rollback.
|
||||||
|
|
||||||
* Automatically detect snapper and use snapper's snapshot description if available.
|
* Automatically detect snapper and use snapper's snapshot description if available.
|
||||||
|
##
|
||||||
|
### How to use it:
|
||||||
#### How to use it:
|
|
||||||
|
|
||||||
Add this lines to /etc/default/grub:
|
Add this lines to /etc/default/grub:
|
||||||
|
|
||||||
@@ -88,12 +88,28 @@ Generate grub.cfg (on Arch linux use grub-mkconfig -o /boot/grub/grub.cfg )
|
|||||||
grub-btrfs automatically generates snapshots entries.
|
grub-btrfs automatically generates snapshots entries.
|
||||||
|
|
||||||
You will see it appear differents entries (e.g : Snapshot: 2018-01-03 15:08:41 @test1 )
|
You will see it appear differents entries (e.g : Snapshot: 2018-01-03 15:08:41 @test1 )
|
||||||
|
##
|
||||||
|
### Automatically update grub
|
||||||
|
|
||||||
|
If you would like grub to automatically update when Snapper timeline snapshots and cleanups occur, simply install `10-update_grub.conf` in the following locations:
|
||||||
|
|
||||||
#### TO DO
|
- `/etc/systemd/system/snapper-timeline.service.d/`
|
||||||
|
- `/etc/systemd/system/snapper-cleanup.service.d/`
|
||||||
|
|
||||||
* don't hesitate to ask for improvements
|
Once the configuration files are in place, `systemctl daemon-reload` should be run to reload the units and make the changes active.
|
||||||
|
|
||||||
|
##
|
||||||
## discussion
|
### Discussion
|
||||||
Pour les francophones : https://forums.archlinux.fr/viewtopic.php?f=18&t=17177
|
Pour les francophones : https://forums.archlinux.fr/viewtopic.php?f=18&t=17177
|
||||||
|
##
|
||||||
|
### Special thanks for assistance and contributions
|
||||||
|
|
||||||
|
* [maximbaz](https://github.com/maximbaz)
|
||||||
|
* [crossroads1112](https://github.com/crossroads1112)
|
||||||
|
* [penetal](https://github.com/penetal)
|
||||||
|
* [wesbarnett](https://github.com/wesbarnett)
|
||||||
|
* [Psykar](https://github.com/Psykar)
|
||||||
|
* [anyc](https://github.com/anyc)
|
||||||
|
* [daftaupe](https://github.com/daftaupe)
|
||||||
|
* [N-Parsons](https://github.com/N-Parsons)
|
||||||
|
##
|
||||||
|
|||||||
Reference in New Issue
Block a user