diff --git a/README.md b/README.md index 4d6d93e..eb1fc54 100644 --- a/README.md +++ b/README.md @@ -35,16 +35,39 @@ MBR/BIOS: ``` /dev/disk: - /dev/disk1 - ext2 - /boot - /dev/disk2 - swap - /dev/disk3 - btrfs - / + /dev/disk1 ext4 /boot + /dev/disk2 swap [SWAP] + /dev/disk3 btrfs@home /home + /dev/disk3 btrfs@root-2021-04-01 / + /dev/disk3 btrfs@root-2021-04-20 / + /dev/disk3 btrfs@conf-2021-04-01 /config + /dev/disk3 btrfs@conf-2021-04-20 /config ``` -Subvolumes: +- Every installed release has it's own subvolume for rootfs and config in case a configuration changes with an update +- The user can choose which one to boot into - - 2021-04-01: Released version - - current: Currently active version in case next boot fails - - last: Last known good version +### Update flow + +State before the update: + +- boot entry `last` is set to version 1 (last known working version) +- boot entry `current` is also set to version 1 +- on every boot the default boot entry is set to `last` automatically in early boot + +Update process: + +- a new version is downloaded as a btrfs snapshot and put into place as version 2 +- `current` boot entry is modified to boot the new version +- `current` is set as default boot entry + +- device reboots into new version 2 via `current` boot entry +- early boot sets `last` as default boot entry +- after successful boot: + - the user marks the system as functional which sets the `last` boot entry to the current version +- if something goes wrong: + - the system reboots, now with the `last` entry being the default booting into the last known working system + - the user gets displayed an error because `last` and `current` is not the pointing to the same version and `last` is booted indicating an error ---