mirror of
https://github.com/Antynea/grub-btrfs.git
synced 2026-03-08 07:14:38 +08:00
Compare commits
5 Commits
4.12
...
fix-snap-d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
efc4657aab | ||
|
|
6f154329c7 | ||
|
|
4942989d7f | ||
|
|
91c4aac82c | ||
|
|
1d760ad730 |
21
README.md
21
README.md
@@ -1,8 +1,6 @@
|
|||||||
[](https://github.com/Antynea/grub-btrfs/releases)
|
[](https://github.com/Antynea/grub-btrfs/releases)
|
||||||

|

|
||||||
|
|
||||||
This is version 4.12 of grub-btrfs.
|
|
||||||
|
|
||||||
## 💻 grub-btrfs
|
## 💻 grub-btrfs
|
||||||
|
|
||||||
##### BTC donation address: `1Lbvz244WA8xbpHek9W2Y12cakM6rDe5Rt`
|
##### BTC donation address: `1Lbvz244WA8xbpHek9W2Y12cakM6rDe5Rt`
|
||||||
@@ -112,7 +110,7 @@ This is a flag to activate the auto detection of the path where Timeshift stores
|
|||||||
Let the log of the daemon be more verbose
|
Let the log of the daemon be more verbose
|
||||||
* `-h / --help`
|
* `-h / --help`
|
||||||
Displays a short help message.
|
Displays a short help message.
|
||||||
|
- - -
|
||||||
##### Systemd instructions
|
##### Systemd instructions
|
||||||
To edit the arguments that are passed to the daemon, use
|
To edit the arguments that are passed to the daemon, use
|
||||||
```bash
|
```bash
|
||||||
@@ -129,7 +127,7 @@ sudo systemctl stop grub-btrfsd
|
|||||||
```
|
```
|
||||||
Then the daemon can be manually run and played around with using the command `/usr/bin/grub-btrfsd`.
|
Then the daemon can be manually run and played around with using the command `/usr/bin/grub-btrfsd`.
|
||||||
For additional information on the daemon script and its arguments, run `grub-btrfsd -h` and see `man grub-btrfsd`
|
For additional information on the daemon script and its arguments, run `grub-btrfsd -h` and see `man grub-btrfsd`
|
||||||
|
- - -
|
||||||
##### OpenRC instructions
|
##### OpenRC instructions
|
||||||
To edit the arguments that are passed to the daemon edit the file `/etc/conf.d/grub-btrfsd`.
|
To edit the arguments that are passed to the daemon edit the file `/etc/conf.d/grub-btrfsd`.
|
||||||
After that restart the daemon with
|
After that restart the daemon with
|
||||||
@@ -149,7 +147,7 @@ For additional information on daemon script and its arguments, run `grub-btrfsd
|
|||||||
Grub-btrfsd is a daemon daemon that watches the snapshot directory for you and updates the grub menu automatically every time a snapshot is created or deleted.
|
Grub-btrfsd is a daemon daemon that watches the snapshot directory for you and updates the grub menu automatically every time a snapshot is created or deleted.
|
||||||
By default this daemon watches the directory `/.snapshots` for changes (creation or deletion of snapshots) and triggers the grub menu creation if a snapshot is found.
|
By default this daemon watches the directory `/.snapshots` for changes (creation or deletion of snapshots) and triggers the grub menu creation if a snapshot is found.
|
||||||
Therefore, if Snapper is used with its default directory, the daemon can just be started and nothing needs to be configured. For other configurations like Timeshift, or Snapper with a different directory, see further below.
|
Therefore, if Snapper is used with its default directory, the daemon can just be started and nothing needs to be configured. For other configurations like Timeshift, or Snapper with a different directory, see further below.
|
||||||
|
- - -
|
||||||
#### SystemD instructions
|
#### SystemD instructions
|
||||||
To start the daemon run
|
To start the daemon run
|
||||||
```bash
|
```bash
|
||||||
@@ -166,7 +164,7 @@ NOTE: This works also for Timeshift versions < 22.06, the path to watch would be
|
|||||||
|
|
||||||
By default the daemon is watching the directory `/.snapshots`. If the daemon should watch a different directory, it can be edited with
|
By default the daemon is watching the directory `/.snapshots`. If the daemon should watch a different directory, it can be edited with
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl edit --full grub-btrfsd # for systemd
|
sudo systemctl edit --full grub-btrfsd
|
||||||
```
|
```
|
||||||
What should be edited is the `/.snapshots`-part in the line that says `ExecStart=/usr/bin/grub-btrfsd --syslog /.snapshots`.
|
What should be edited is the `/.snapshots`-part in the line that says `ExecStart=/usr/bin/grub-btrfsd --syslog /.snapshots`.
|
||||||
So this is what the file should look afterwards:
|
So this is what the file should look afterwards:
|
||||||
@@ -205,10 +203,9 @@ Newer Timeshift versions create a new directory named after their process ID in
|
|||||||
Therefore the daemon can not simply watch a directory, it watches `/run/timeshift` first, if a directory is created it gets Timeshifts current PID, then watches a directory in that newly created directory from Timeshift.
|
Therefore the daemon can not simply watch a directory, it watches `/run/timeshift` first, if a directory is created it gets Timeshifts current PID, then watches a directory in that newly created directory from Timeshift.
|
||||||
Anyhow, to activate this mode of the daemon, `--timeshift-auto` must be passed to the daemon as a command line argument.
|
Anyhow, to activate this mode of the daemon, `--timeshift-auto` must be passed to the daemon as a command line argument.
|
||||||
|
|
||||||
##### Systemd
|
|
||||||
To pass `--timeshift-auto` to grub-btrfsd, the .service-file of grub-btrfsd can be edited with
|
To pass `--timeshift-auto` to grub-btrfsd, the .service-file of grub-btrfsd can be edited with
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl edit --full grub-btrfsd # for systemd
|
sudo systemctl edit --full grub-btrfsd
|
||||||
```
|
```
|
||||||
|
|
||||||
The line that says
|
The line that says
|
||||||
@@ -250,7 +247,7 @@ WantedBy=multi-user.target
|
|||||||
|
|
||||||
When done, the service must be restarted with
|
When done, the service must be restarted with
|
||||||
``` bash
|
``` bash
|
||||||
sudo systemctl restart grub-btrfsd # for systemd
|
sudo systemctl restart grub-btrfsd
|
||||||
```
|
```
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
@@ -260,7 +257,7 @@ To revert all the changes use `systemctl revert grub-btrfsd`.
|
|||||||
##### ❇️ Automatically update grub upon restart/boot:
|
##### ❇️ Automatically update grub upon restart/boot:
|
||||||
[Look at this comment](https://github.com/Antynea/grub-btrfs/issues/138#issuecomment-766918328)
|
[Look at this comment](https://github.com/Antynea/grub-btrfs/issues/138#issuecomment-766918328)
|
||||||
Currently not implemented
|
Currently not implemented
|
||||||
|
- - -
|
||||||
#### OpenRC instructions
|
#### OpenRC instructions
|
||||||
To start the daemon run
|
To start the daemon run
|
||||||
```bash
|
```bash
|
||||||
@@ -304,7 +301,7 @@ optional_args+="--syslog " # write to syslog by default
|
|||||||
|
|
||||||
After that, the daemon should be restarted with
|
After that, the daemon should be restarted with
|
||||||
``` bash
|
``` bash
|
||||||
sudo rc-service grub-btrfsd restart # for openRC
|
sudo rc-service grub-btrfsd restart
|
||||||
```
|
```
|
||||||
|
|
||||||
##### 🌟 Timeshift >= version 22.06
|
##### 🌟 Timeshift >= version 22.06
|
||||||
@@ -337,7 +334,7 @@ optional_args+="--timeshift-auto "
|
|||||||
|
|
||||||
After that, the daemon should be restarted with
|
After that, the daemon should be restarted with
|
||||||
``` bash
|
``` bash
|
||||||
sudo rc-service grub-btrfsd restart # for openRC
|
sudo rc-service grub-btrfsd restart
|
||||||
```
|
```
|
||||||
|
|
||||||
##### ❇️ Automatically update grub upon restart/boot:
|
##### ❇️ Automatically update grub upon restart/boot:
|
||||||
|
|||||||
2
config
2
config
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
GRUB_BTRFS_VERSION=4.12
|
GRUB_BTRFS_VERSION=4.12-fix-snap-dir-check-2022-11-26T14:06:44+00:00
|
||||||
|
|
||||||
# Disable grub-btrfs.
|
# Disable grub-btrfs.
|
||||||
# Default: "false"
|
# Default: "false"
|
||||||
|
|||||||
31
grub-btrfsd
31
grub-btrfsd
@@ -9,6 +9,7 @@ watchtime=0
|
|||||||
logfile=0
|
logfile=0
|
||||||
snapshots=-1
|
snapshots=-1
|
||||||
timeshift_auto=false
|
timeshift_auto=false
|
||||||
|
timeshift_old=false
|
||||||
verbose=false
|
verbose=false
|
||||||
syslog=false
|
syslog=false
|
||||||
|
|
||||||
@@ -31,8 +32,8 @@ setcolors true # normally we want colors
|
|||||||
sysconfdir="/etc"
|
sysconfdir="/etc"
|
||||||
grub_btrfs_config="${sysconfdir}/default/grub-btrfs/config"
|
grub_btrfs_config="${sysconfdir}/default/grub-btrfs/config"
|
||||||
# source config file
|
# source config file
|
||||||
[[ -f "$grub_btrfs_config" ]] && . "$grub_btrfs_config"
|
[ -f "$grub_btrfs_config" ] && . "$grub_btrfs_config"
|
||||||
[[ -f "${sysconfdir}/default/grub" ]] && . "${sysconfdir}/default/grub"
|
[ -f "${sysconfdir}/default/grub" ] && . "${sysconfdir}/default/grub"
|
||||||
|
|
||||||
print_help() {
|
print_help() {
|
||||||
echo "${CYAN}[?] Usage:"
|
echo "${CYAN}[?] Usage:"
|
||||||
@@ -44,6 +45,7 @@ print_help() {
|
|||||||
echo "-c, --no-color Disable colors in output"
|
echo "-c, --no-color Disable colors in output"
|
||||||
echo "-l, --log-file Specify a logfile to write to"
|
echo "-l, --log-file Specify a logfile to write to"
|
||||||
echo "-s, --syslog Write to syslog"
|
echo "-s, --syslog Write to syslog"
|
||||||
|
echo "-o, --timeshift-old Look for snapshots in directory of Timeshift <v22.06 (requires --timeshift-auto)"
|
||||||
echo "-t, --timeshift-auto Automatically detect Timeshifts snapshot directory"
|
echo "-t, --timeshift-auto Automatically detect Timeshifts snapshot directory"
|
||||||
echo "-v, --verbose Let the log of the daemon be more verbose"
|
echo "-v, --verbose Let the log of the daemon be more verbose"
|
||||||
echo "-h, --help Display this message"
|
echo "-h, --help Display this message"
|
||||||
@@ -97,6 +99,9 @@ while getopts :l:ctvsh-: opt; do
|
|||||||
timeshift-auto)
|
timeshift-auto)
|
||||||
timeshift_auto=true
|
timeshift_auto=true
|
||||||
;;
|
;;
|
||||||
|
timeshift-old)
|
||||||
|
timeshift_old=true
|
||||||
|
;;
|
||||||
verbose)
|
verbose)
|
||||||
verbose=true
|
verbose=true
|
||||||
;;
|
;;
|
||||||
@@ -125,6 +130,9 @@ while getopts :l:ctvsh-: opt; do
|
|||||||
t)
|
t)
|
||||||
timeshift_auto=true
|
timeshift_auto=true
|
||||||
;;
|
;;
|
||||||
|
o)
|
||||||
|
timeshift_old=true
|
||||||
|
;;
|
||||||
v)
|
v)
|
||||||
verbose=true
|
verbose=true
|
||||||
;;
|
;;
|
||||||
@@ -168,9 +176,15 @@ else
|
|||||||
inotify_qiet_flag=" -q -q "
|
inotify_qiet_flag=" -q -q "
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ ${timeshift_auto} = false ] && [ ${timeshift_old} = true ]; then
|
||||||
|
err "[!] Flag --timeshift-old requires flag --timeshift-auto" "${RED}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
vlog "Arguments:"
|
vlog "Arguments:"
|
||||||
vlog "Snapshot directory: $snapshots"
|
vlog "Snapshot directory: $snapshots"
|
||||||
vlog "Timestift autodetection: $timeshift_auto"
|
vlog "Timestift autodetection: $timeshift_auto"
|
||||||
|
vlog "Timeshift old: $timeshift_old"
|
||||||
vlog "Logfile: $logfile"
|
vlog "Logfile: $logfile"
|
||||||
|
|
||||||
if ! [ -d "$snapshots" ] && ! [ ${timeshift_auto} = true ]; then
|
if ! [ -d "$snapshots" ] && ! [ ${timeshift_auto} = true ]; then
|
||||||
@@ -204,6 +218,15 @@ create_grub_menu() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_snapshot_dir() {
|
||||||
|
# old timeshift has it's snapshot dir in a different location
|
||||||
|
if [ "${timeshift_old}" = true ]; then
|
||||||
|
snapshots="/run/timeshift/backup/timeshift-btrfs/snapshots"
|
||||||
|
else
|
||||||
|
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# start the actual daemon
|
# start the actual daemon
|
||||||
vlog "Snapshot dir watchtimeout: $watchtime"
|
vlog "Snapshot dir watchtimeout: $watchtime"
|
||||||
vlog "Entering infinite while" "${GREEN}"
|
vlog "Entering infinite while" "${GREEN}"
|
||||||
@@ -217,7 +240,7 @@ while true; do
|
|||||||
fi
|
fi
|
||||||
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
||||||
if [ "${#timeshift_pid}" -gt 0 ]; then
|
if [ "${#timeshift_pid}" -gt 0 ]; then
|
||||||
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
|
set_snapshot_dir
|
||||||
log "detected running Timeshift at daemon startup, PID is: $timeshift_pid"
|
log "detected running Timeshift at daemon startup, PID is: $timeshift_pid"
|
||||||
vlog "new snapshots directory is $snapshots"
|
vlog "new snapshots directory is $snapshots"
|
||||||
else
|
else
|
||||||
@@ -225,7 +248,7 @@ while true; do
|
|||||||
inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && {
|
inotifywait ${inotify_qiet_flag} -e create -e delete /run/timeshift && {
|
||||||
sleep 1
|
sleep 1
|
||||||
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
timeshift_pid=$(ps ax | awk '{sub(/.*\//, "", $5)} $5 ~ /timeshift/ {print $1}')
|
||||||
snapshots="/run/timeshift/${timeshift_pid}/backup/timeshift-btrfs/snapshots"
|
set_snapshot_dir
|
||||||
log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}"
|
log "detected Timeshift startup, PID is: $timeshift_pid" "${CYAN}"
|
||||||
vlog "new snapshots directory is $snapshots" "${CYAN}"
|
vlog "new snapshots directory is $snapshots" "${CYAN}"
|
||||||
(create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this
|
(create_grub_menu) # create the grub menu once immidiatly in a forking process. Snapshots from commandline using timeshift --create need this
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ when a new btrfs snapshot is created.
|
|||||||
|
|
||||||
.SH "SYNOPSIS"
|
.SH "SYNOPSIS"
|
||||||
.PP
|
.PP
|
||||||
\fCgrub\-btrfsd [\-h, \-\-help] [\-c, \-\-no\-color] [\-l, \-\-log\-file LOG_FILE] [\-s, \-\-syslog] [\-t, \-\-timeshift\-auto] [\-v, \-\-verbose] SNAPSHOTS_DIR\fP
|
\fCgrub\-btrfsd [\-h, \-\-help] [\-c, \-\-no\-color] [\-l, \-\-log\-file LOG_FILE] [\-s, \-\-syslog] [\-t, \-\-timeshift\-auto] [\-o, \-\-timeshift\-old] [\-v, \-\-verbose] SNAPSHOTS_DIR\fP
|
||||||
|
|
||||||
.SH "DESCRIPTION"
|
.SH "DESCRIPTION"
|
||||||
.PP
|
.PP
|
||||||
@@ -38,6 +38,10 @@ Write to syslog
|
|||||||
.PP
|
.PP
|
||||||
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. Where \fC$PID\fP is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument \fCSNAPSHOTS_DIR\fP has no effect.
|
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. Where \fC$PID\fP is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument \fCSNAPSHOTS_DIR\fP has no effect.
|
||||||
|
|
||||||
|
.SS "\fC\-o / \-\-timeshift\-old\fP"
|
||||||
|
.PP
|
||||||
|
Look for snapshots in \fC/run/timeshift/backup/timeshift\-btrfs\fP instead of \fC/run/timeshift/$PID/backup/timeshift\-btrfs\fP. This is to be used for Timeshift versions <22.06.
|
||||||
|
|
||||||
.SS "\fC\-v / \-\-verbose\fP"
|
.SS "\fC\-v / \-\-verbose\fP"
|
||||||
.PP
|
.PP
|
||||||
Let the log of the daemon be more verbose
|
Let the log of the daemon be more verbose
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ grub-btrfsd - An OpenRC daemon to automatically update the grub menu with
|
|||||||
when a new btrfs snapshot is created.
|
when a new btrfs snapshot is created.
|
||||||
|
|
||||||
* SYNOPSIS
|
* SYNOPSIS
|
||||||
~grub-btrfsd [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-s, --syslog] [-t, --timeshift-auto] [-v, --verbose] SNAPSHOTS_DIR~
|
~grub-btrfsd [-h, --help] [-c, --no-color] [-l, --log-file LOG_FILE] [-s, --syslog] [-t, --timeshift-auto] [-o, --timeshift-old] [-v, --verbose] SNAPSHOTS_DIR~
|
||||||
|
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
Grub-btrfsd is a shell script which is meant to be run as a daemon.
|
Grub-btrfsd is a shell script which is meant to be run as a daemon.
|
||||||
@@ -33,6 +33,9 @@ Write to syslog
|
|||||||
** ~-t / --timeshift-auto~
|
** ~-t / --timeshift-auto~
|
||||||
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to ~/run/timeshift/$PID/backup/timeshift-btrfs~. Where ~$PID~ is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument ~SNAPSHOTS_DIR~ has no effect.
|
This is a flag to activate the auto detection of the path where Timeshift stores snapshots. Newer versions (>=22.06) of Timeshift mount their snapshots to ~/run/timeshift/$PID/backup/timeshift-btrfs~. Where ~$PID~ is the process ID of the currently running Timeshift session. The PID is changing every time Timeshift is opened. grub-btrfsd can automatically take care of the detection of the correct PID and directory if this flag is set. In this case the argument ~SNAPSHOTS_DIR~ has no effect.
|
||||||
|
|
||||||
|
** ~-o / --timeshift-old~
|
||||||
|
Look for snapshots in ~/run/timeshift/backup/timeshift-btrfs~ instead of ~/run/timeshift/$PID/backup/timeshift-btrfs~. This is to be used for Timeshift versions <22.06.
|
||||||
|
|
||||||
** ~-v / --verbose~
|
** ~-v / --verbose~
|
||||||
Let the log of the daemon be more verbose
|
Let the log of the daemon be more verbose
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user