docs: add all untracked content
This commit is contained in:
69
boot-from-snapshot.md
Normal file
69
boot-from-snapshot.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: Restoring Root Filesystem from BtrFS Snapshot
|
||||
description: Undo your grave mistakes quickly and efficiently. Yay!
|
||||
published: true
|
||||
date: 2022-04-30T20:10:46.302Z
|
||||
tags: btrfs, recovery, rootfs
|
||||
editor: markdown
|
||||
dateCreated: 2021-10-20T05:15:59.558Z
|
||||
---
|
||||
|
||||
If you frigged up *really* bad, you likely cannot read this, which is ironic.
|
||||
|
||||
However, I'll write it down so it hopefully sinks in the ol' noggin.
|
||||
|
||||
# Booting into snapshots
|
||||
I configured the system to use `snapper`, a tool from OpenSUSE, which takes and manages BtrFS snapshots. Thanks to the `grub-btrfs` plugin, these root filesystem snapshots are accesable from the GRUB2 boot menu.
|
||||
|
||||
First, select whichever snapshot (they are neatly dated) by following the `Gentoo snapshots` option in the boot menu.
|
||||
|
||||
# Making snapshots writable
|
||||
|
||||
By default, snapshots are read only. They should still boot neatly, but lots of things will not work (like NTP and most compiles).
|
||||
|
||||
Take a good look around - do you like this snapshot? is this a nice snapshot? would you like to settle down with this snapshot?
|
||||
|
||||
If so, run:
|
||||
`btrfs property set -ts / ro false`
|
||||
when `/` is the path the snapshot is currently mounted at (use `findmnt -nt btrfs` to find out).
|
||||
|
||||
> Once a snapshot is writeable, consider it compromised - booting from it again if you change your mind may not be as smooth!
|
||||
{.is-warning}
|
||||
|
||||
# Setting snapshot as new root
|
||||
First, find the snapshot ID by runnnig `findmnt -nt btrfs` - which will give you something like this:
|
||||
|
||||
```
|
||||
root@Takahe] ~ (takahe-root)
|
||||
❯ findmnt -nt btrfs
|
||||
/ /dev/nvme0n1p2[/.snapshots/232/snapshot] btrfs rw,noatime,compress=zstd:11,ssd,d
|
||||
```
|
||||
|
||||
Now, `grep` the path in the square brackets from the output of `btrfs snapshots list /`:
|
||||
```
|
||||
[root@Takahe] ~ (takahe-root)
|
||||
❯ btrfs subvolume list / | grep .snapshots/232/snapshot
|
||||
ID 8624 gen 2199024063871 top level 2740 path .snapshots/232/snapshot
|
||||
```
|
||||
Noticed how I removed the leading `/`.
|
||||
|
||||
Now, take the `ID` of the snapshot, and set it as the new default:
|
||||
```
|
||||
[root@Takahe] ~ (takahe-root)
|
||||
❯ btrfs subvolume set-default 8624 /
|
||||
```
|
||||
|
||||
> The BtrFS default is built into the filesystem - it overrides the value on `/etc/fstab`.
|
||||
{.is-info}
|
||||
|
||||
Finally, update the bootloader to enable the default entry to boot into your snapshot:
|
||||
`grub-mkconfig -o /boot/grub/grub.cfg`
|
||||
|
||||
This should be it - but you can double check if you're really keen by reading that file and looking for something like this in the kernel parameters:
|
||||
```
|
||||
linux /vmlinuz-5.14.10-gentoo-x86_64 root=UUID=d9699f1e-6825-4b38-9e3a-c228763b07cc ro rootflags=subvol=.snapshots/232/snapshot
|
||||
```
|
||||
See the `rootflags`? that's us, baby.
|
||||
|
||||
|
||||
Happy compiling!
|
||||
Reference in New Issue
Block a user