Compare commits

...

14 Commits
v2.0 ... 2.2

Author SHA1 Message Date
Maxim Baz
773a8bfb76 Support selecting snapper's config, default to 'root' (#41) 2018-04-01 21:38:22 +02:00
Antynea
1b40cfee20 Update 41_snapshots-btrfs
Update 41_snapshots-btrfs
2018-02-03 22:59:03 +01:00
Antynea
358dedc392 Update 41_snapshots-btrfs
Update 41_snapshots-btrfs
2018-02-03 22:57:04 +01:00
Antynea
55dc182b34 Update README.md 2018-02-03 22:31:43 +01:00
Nathan Parsons
23ddb063cb Add systemd service configuration for grub updating (#38)
* Add systemd service configuration for grub updating

This configuration file causes `update-grub` to be run after
Snapper's cleanup and timeline services are run by systemd

* Make invoked command more universal

* Note the need to run systemctl daemon-reload
2018-02-03 21:50:40 +01:00
Antynea
ca51d74265 Update README.md 2018-01-26 11:00:55 +01:00
Antynea
f8937a3fc7 Update README.md 2018-01-26 10:58:04 +01:00
Antynea
9265eb96de Update README.md 2018-01-26 10:55:45 +01:00
Antynea
72edee3d1c Update README.md 2018-01-26 10:54:37 +01:00
Antynea
d24ba197a8 Update README.md 2018-01-26 10:53:42 +01:00
Antynea
0e826391f1 Update 41_snapshots-btrfs 2018-01-26 09:19:33 +01:00
Antynea
7166d939fa Update README.md 2018-01-26 09:18:13 +01:00
Antynea
5cfbf46c8c fix Snapper id too long #36
* fix Snapper id too long #36
2018-01-07 00:31:16 +01:00
Antynea
12cb591307 Update README.md 2018-01-04 10:06:41 +01:00
3 changed files with 103 additions and 75 deletions

2
10-update_grub.conf Normal file
View File

@@ -0,0 +1,2 @@
[Service]
ExecStartPost=/usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg

View File

@@ -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'
@@ -293,7 +301,7 @@ snapshot_list()
for id in "${ids[@]}"; do for id in "${ids[@]}"; do
for j in "${!snapper_ids[@]}"; do for j in "${!snapper_ids[@]}"; do
local snapper_id="${snapper_ids[$j]//[[:space:]]/}" local snapper_id="${snapper_ids[$j]//[[:space:]]/}"
if [[ "$snapper_id" -eq "$id" ]]; then if [[ "$snapper_id" == "$id" ]]; then
local snapper_type=$(trim "${snapper_types[$j]}") local snapper_type=$(trim "${snapper_types[$j]}")
local length="${#snapper_type}" local length="${#snapper_type}"
[[ "$length" -gt "$max_type_length" ]] && max_type_length=$length [[ "$length" -gt "$max_type_length" ]] && max_type_length=$length
@@ -306,7 +314,7 @@ snapshot_list()
local entry="${entries[$i]}" local entry="${entries[$i]}"
for j in "${!snapper_ids[@]}"; do for j in "${!snapper_ids[@]}"; do
local snapper_id="${snapper_ids[$j]//[[:space:]]/}" local snapper_id="${snapper_ids[$j]//[[:space:]]/}"
if [[ "$snapper_id" -eq "$id" ]]; then if [[ "$snapper_id" == "$id" ]]; then
local snapper_type=$(trim "${snapper_types[$j]}") local snapper_type=$(trim "${snapper_types[$j]}")
local snapper_description=$(trim "${snapper_descriptions[$j]}") local snapper_description=$(trim "${snapper_descriptions[$j]}")
printf -v entry "%-${max_entry_length}s | %-${max_type_length}s | %s" "$entry" "$snapper_type" "$snapper_description" printf -v entry "%-${max_entry_length}s | %-${max_type_length}s | %s" "$entry" "$snapper_type" "$snapper_description"

View File

@@ -1,14 +1,15 @@
[![GitHub release](https://img.shields.io/github/release/Antynea/grub-btrfs.svg)](https://github.com/Antynea/grub-btrfs) [![GitHub release](https://img.shields.io/github/release/Antynea/grub-btrfs.svg)](https://github.com/Antynea/grub-btrfs)
### grub-btrfs ## grub-btrfs
This is a version 1.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 v1.xx do : ### What does grub-btrfs v2.xx do :
Simple rollback using snapshots you made previously. Simple rollback using snapshots you made previously.
@@ -20,12 +21,13 @@ 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.
#### How to use it: ##
### How to use it:
Add this lines to /etc/default/grub: Add this lines to /etc/default/grub:
* GRUB_BTRFS_SUBMENUNAME="ArchLinux Snapshots" * GRUB_BTRFS_SUBMENUNAME="Arch Linux Snapshots"
(Name menu appearing in grub.) (Name menu appearing in grub.)
@@ -35,7 +37,7 @@ Add this lines to /etc/default/grub:
* GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT="true" * GRUB_BTRFS_DISPLAY_PATH_SNAPSHOT="true"
(Show full path snapshot or only name) (Show full path snapshot or only name, weird reaction with snapper)
* GRUB_BTRFS_TITLE_FORMAT="p/d/n" * GRUB_BTRFS_TITLE_FORMAT="p/d/n"
@@ -77,21 +79,37 @@ Add this lines to /etc/default/grub:
* GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES="false" * GRUB_BTRFS_CREATE_ONLY_HARMONIZED_ENTRIES="false"
(Create entries with matching version number instead of all possible combinations of kernel and initramfs) (Create entries with matching version number instead of all possible combinations of kernel and initramfs, very useful with debian-like distributions)
Generate grub.cfg (on Archlinux use grub-mkconfig -o /boot/grub/grub.cfg ) 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: [2014-02-12 11:24:37] my snapshot name overkill ) 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/`
* Snapper support 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)
##