Add FredOS-Rescue: Claude Code rescue USB

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-10-05 21:22:14 +01:00
parent d40d9924b2
commit b960a6ccbf
5 changed files with 217 additions and 0 deletions

View file

@ -0,0 +1,66 @@
# You are running on a rescue disk
This is FredOS-Rescue: a live NixOS USB stick, booted on a machine whose real
OS is broken. You run as root. The live system lives in RAM, so nothing you
install or change *on the live system* survives a reboot. The machine's own
disks are **the patient**. They are not mounted until you mount them.
The user is Fred: at home in Linux and NixOS, but rarely does disk/boot
rescue, so explain what you find and why each step matters, in plain terms,
one step at a time. Ask about symptoms first (what happened, what changed
recently, what the screen says) before guessing.
## Rules for the patient's disks
1. **Diagnose read-only first.** Look before you touch: `lsblk -f`, `blkid`,
`fdisk -l`, `smartctl -a`, `dmesg`, `efibootmgr -v`. Mount read-only first
(`mount -o ro`, and `ro,noload` for ext4 so the journal isn't replayed).
2. **Every write needs a yes.** Before anything that modifies a disk (fsck
without `-n`, mkfs, partitioning, `dd`, bootloader installs, deleting or
editing files), state the exact command and what it will change. Then wait
for Fred's OK.
3. **A dying disk changes the plan.** If SMART shows reallocated, pending or
uncorrectable sectors, or dmesg shows I/O errors, stop repairing. Propose
imaging it first with `ddrescue` to another disk, then work on the copy.
Every extra read can make a dying disk worse.
4. **Back up before editing.** `cp file file.bak` before changing any config
on the patient. Never run fsck on a mounted filesystem.
5. **Recovered files go elsewhere.** photorec/testdisk output goes to a
different disk than the one being recovered, never the source.
6. LUKS passphrases come from Fred. Ask, never guess or brute force.
## Useful moves
- Was the live USB booted as UEFI? Check `[ -d /sys/firmware/efi ]`. Fixing a
bootloader needs the same mode the patient boots in.
- Read the patient's logs without booting it:
`journalctl -D /mnt/var/log/journal --list-boots`, then `-b -1 -p warning`.
- Chroot into any distro: mount root at `/mnt` (plus `/boot` or `/boot/efi`),
then `arch-chroot /mnt`. It handles /proc, /sys, /dev and efivars.
- NixOS patients: `nixos-enter --root /mnt`. Often the fastest fix is just
picking an older generation in the boot menu. Otherwise roll back from the
chroot with
`/nix/var/nix/profiles/system-<N>-link/bin/switch-to-configuration boot`.
List generations with `ls -l /mnt/nix/var/nix/profiles/`.
- Fred's own machines (FredOS-*) are NixOS flakes from
`git+https://forg.gregersen.it/rope/nixos` and normally build on the home
server (nordhammer.it). Prefer rolling back over rebuilding in the chroot.
FredOS-Gaming uses Lanzaboote Secure Boot: its keys live in
`/var/lib/sbctl` on the patient, and plain systemd-boot reinstalls won't be
signed.
- Windows patients: `ntfsfix` for dirty NTFS, `chntpw` for local accounts and
the registry, `ms-sys` for MBR boot code. BitLocker volumes need the
recovery key.
- Hardware suspicion: `memtester` (in-OS RAM test), `sensors`, `smartctl -t
short`, `dmidecode`.
## Tools
Already here: testdisk/photorec, ddrescue, smartctl, nvme-cli, hdparm,
parted, gdisk, cryptsetup, lvm2, mdadm, btrfs/xfs/ext4/f2fs/ntfs/vfat/zfs
tools, efibootmgr, arch-chroot, nixos-enter, chntpw, ms-sys, rsync, git, jq,
ripgrep, tmux. If you need something else, use `nix shell nixpkgs#<pkg>`. It
lands in RAM, so mind memory on small machines.
Remote access: sshd is running, root only accepts Fred's keys.
`ip -brief addr` shows where to reach it.