79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
|
|
# GRUB and grub-btrfs readiness
|
|||
|
|
|
|||
|
|
Verified baseline:
|
|||
|
|
|
|||
|
|
- GRUB has normal, fallback, and recovery entries for both `linux-zen` and
|
|||
|
|
standard `linux`.
|
|||
|
|
- Snapper snapshots 1, 2, and 3 exist.
|
|||
|
|
- `/boot/grub/grub-btrfs.cfg` is absent, so there are currently no generated
|
|||
|
|
snapshot entries.
|
|||
|
|
- `grub-btrfs-snapper.path` is active and watching `/.snapshots`.
|
|||
|
|
|
|||
|
|
The installed unit definitions are:
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
# /usr/lib/systemd/system/grub-btrfs-snapper.path
|
|||
|
|
[Unit]
|
|||
|
|
Description=Monitors for new snapshots
|
|||
|
|
|
|||
|
|
[Path]
|
|||
|
|
PathModified=/.snapshots
|
|||
|
|
|
|||
|
|
[Install]
|
|||
|
|
WantedBy=multi-user.target
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```ini
|
|||
|
|
# /usr/lib/systemd/system/grub-btrfs-snapper.service
|
|||
|
|
[Unit]
|
|||
|
|
Description=Regenerate grub-btrfs.cfg
|
|||
|
|
|
|||
|
|
[Service]
|
|||
|
|
Type=oneshot
|
|||
|
|
Environment="PATH=/sbin:/bin:/usr/sbin:/usr/bin"
|
|||
|
|
EnvironmentFile=/etc/default/grub-btrfs/config
|
|||
|
|
ExecStart=bash -c 'if [[ -z $(/usr/bin/findmnt -n / | /usr/bin/grep "\.snapshots") ]]; then 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; fi'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The bounded July 12 journal contains only these two parser warnings and no
|
|||
|
|
recorded service activation that generated snapshot entries:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Jul 12 17:16:42 TITANSERVER systemd[1]: /usr/lib/systemd/system/grub-btrfs-snapper.service:11: Ignoring unknown escape sequences in the ExecStart expression containing "\.snapshots".
|
|||
|
|
Jul 12 17:18:23 TITANSERVER systemd[1]: /usr/lib/systemd/system/grub-btrfs-snapper.service:11: Ignoring unknown escape sequences in the ExecStart expression containing "\.snapshots".
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The most supportable
|
|||
|
|
inference is that the watcher was enabled after snapshots 1–3 or received no
|
|||
|
|
qualifying modification afterward; absence of `grub-btrfs.cfg` confirms that the
|
|||
|
|
generator has not completed successfully for those snapshots.
|
|||
|
|
|
|||
|
|
The separately approved standalone generation and verification procedure is:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
/etc/grub.d/41_snapshots-btrfs
|
|||
|
|
generate_rc=$?
|
|||
|
|
printf 'grub_btrfs_generate_rc=%s\n' "$generate_rc"
|
|||
|
|
|
|||
|
|
test -s /boot/grub/grub-btrfs.cfg
|
|||
|
|
present_rc=$?
|
|||
|
|
printf 'grub_btrfs_cfg_present_rc=%s\n' "$present_rc"
|
|||
|
|
|
|||
|
|
grub-script-check /boot/grub/grub-btrfs.cfg
|
|||
|
|
syntax_rc=$?
|
|||
|
|
printf 'grub_btrfs_cfg_syntax_rc=%s\n' "$syntax_rc"
|
|||
|
|
|
|||
|
|
grep -E 'snapshot|Snapshot|snapper|\.snapshots' /boot/grub/grub-btrfs.cfg
|
|||
|
|
entries_rc=$?
|
|||
|
|
printf 'grub_btrfs_entries_rc=%s\n' "$entries_rc"
|
|||
|
|
|
|||
|
|
grep -q 'snapshots-btrfs' /boot/grub/grub.cfg
|
|||
|
|
main_menu_link_rc=$?
|
|||
|
|
printf 'grub_main_menu_snapshot_link_rc=%s\n' "$main_menu_link_rc"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
This procedure is not approved or executed by the maintenance scripts. If the
|
|||
|
|
last check fails, stop: making the submenu reachable would require a separately
|
|||
|
|
approved `grub-mkconfig -o /boot/grub/grub.cfg`. Do not regenerate full GRUB as
|
|||
|
|
an incidental readiness repair.
|