Files
nixos-configs/machines/zix790prors/BOOT_EXPANSION_PLAN.md
John Ogle 330cd6f92b Add /boot partition expansion plan and temporary configurationLimit fix
- Add comprehensive BOOT_EXPANSION_PLAN.md with step-by-step instructions for safely expanding /boot from 100MB to 1GB
- Temporarily reduce configurationLimit to 1 to resolve immediate /boot space crisis
- Plan supports 20 generations (configurationLimit = 20) after expansion
- Uses safe approach: shrink /games partition, create new EFI partition
- Includes full recovery context and troubleshooting information

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 21:35:18 -07:00

284 lines
8.0 KiB
Markdown

# NixOS /boot Partition Expansion Plan
## CRITICAL CONTEXT & PROBLEM STATEMENT
**System:** `zix790prors` - Dual-boot Windows 11 + NixOS on Samsung SSD 990 PRO 4TB
**Problem:** Current /boot partition (/dev/nvme0n1p1) is only 100MB, insufficient for multiple NixOS generations
**Goal:** Create 1GB /boot partition to support 20+ NixOS generations (~38MB each)
**Current Partition Layout:**
```
Device Start End Sectors Size Type
/dev/nvme0n1p1 2048 206847 204800 100M EFI System (/boot)
/dev/nvme0n1p2 206848 239615 32768 16M Microsoft reserved
/dev/nvme0n1p3 239616 1953316863 1953077248 931.3G Microsoft basic data (Windows)
/dev/nvme0n1p6 1953316864 3906394111 1953077248 931.3G Linux filesystem (/nix/store)
/dev/nvme0n1p5 3906394112 7812548607 3906154496 1.8T Linux filesystem (/games - btrfs)
/dev/nvme0n1p4 7812548608 7814031359 1482752 724M Windows recovery environment
```
**Strategy:** Shrink /games partition (p5) by 1GB and create new 1GB EFI partition
---
## PLAN A: DETAILED STEP-BY-STEP INSTRUCTIONS
### PREREQUISITES
1. **Boot from NixOS live USB** (build with `./build-liveusb.sh`)
2. **Have Windows recovery media ready** (just in case)
3. **Backup important data** (though this shouldn't affect user data)
### PHASE 1: PREPARATION & BACKUP
```bash
# 1. Connect to internet
sudo systemctl start wpa_supplicant
# OR for ethernet: sudo systemctl start dhcpcd
# 2. Mount current filesystems
sudo mkdir -p /mnt/{boot,nix,games}
sudo mount /dev/nvme0n1p1 /mnt/boot
sudo mount /dev/nvme0n1p6 /mnt/nix
sudo mount /dev/nvme0n1p5 /mnt/games
# 3. Backup current /boot contents
sudo mkdir -p /tmp/boot-backup
sudo cp -a /mnt/boot/* /tmp/boot-backup/
sudo ls -la /tmp/boot-backup/ # Verify backup
# 4. Record current UUIDs for later
sudo blkid /dev/nvme0n1p1 > /tmp/original-boot-uuid.txt
cat /tmp/original-boot-uuid.txt
```
### PHASE 2: SHRINK /games PARTITION
```bash
# 1. Check /games filesystem
sudo btrfs filesystem show /mnt/games
sudo btrfs filesystem usage /mnt/games
# 2. Shrink btrfs filesystem first (by 1.1GB for safety margin)
sudo btrfs filesystem resize -1200M /mnt/games
# 3. Verify shrink was successful
sudo btrfs filesystem usage /mnt/games
# 4. Unmount to resize partition
sudo umount /mnt/games
# 5. Note current partition end sector
sudo fdisk -l /dev/nvme0n1 | grep nvme0n1p5
# Current: 3906394112 7812548607 (note the END: 7812548607)
# 6. Calculate new end sector (subtract ~2M sectors for 1GB)
# New end should be approximately: 7812548607 - 2097152 = 7810451455
```
### PHASE 3: RESIZE PARTITIONS
```bash
# 1. Use parted to resize /games partition
sudo parted /dev/nvme0n1
# In parted shell:
print # Show current layout
resizepart 5 7810451455 # Resize partition 5 to new end
print # Verify the change
quit
# 2. Verify partition table
sudo fdisk -l /dev/nvme0n1
```
### PHASE 4: CREATE NEW 1GB EFI PARTITION
```bash
# 1. Create new partition in freed space
sudo parted /dev/nvme0n1
# In parted shell:
print free # Show free space
mkpart primary fat32 7810451456 7812548607 # Create new partition
set 7 esp on # Set ESP flag (assuming it becomes p7)
print # Verify
quit
# 2. Format new partition as FAT32
sudo mkfs.fat -F32 -n "NIXBOOT" /dev/nvme0n1p7
# 3. Get new partition UUID
sudo blkid /dev/nvme0n1p7
```
### PHASE 5: COPY BOOT CONTENTS
```bash
# 1. Mount new boot partition
sudo mkdir -p /mnt/new-boot
sudo mount /dev/nvme0n1p7 /mnt/new-boot
# 2. Copy all boot contents
sudo cp -a /tmp/boot-backup/* /mnt/new-boot/
# 3. Verify copy
sudo ls -la /mnt/new-boot/
sudo du -sh /mnt/new-boot/*
```
### PHASE 6: UPDATE CONFIGURATION
```bash
# 1. Mount root filesystem
sudo mount /dev/nvme0n1p6 /mnt/nix
sudo mount /dev/nvme0n1p6 /mnt # For nixos-enter
# 2. Mount other needed filesystems for chroot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount /dev/nvme0n1p7 /mnt/boot # Mount NEW boot partition
# 3. Enter NixOS environment
sudo nixos-enter
# 4. Inside chroot - update hardware configuration
# Edit /etc/nixos/hardware-configuration.nix or check current fstab
NEW_UUID=$(blkid /dev/nvme0n1p7 | grep -o 'UUID="[^"]*"' | cut -d'"' -f2)
echo "New boot UUID: $NEW_UUID"
# 5. Update boot partition UUID in configuration
# This step depends on your current setup - likely in hardware-configuration.nix
```
### PHASE 7: REGENERATE BOOTLOADER
```bash
# Still in nixos-enter chroot:
# 1. Rebuild bootloader configuration
nixos-rebuild switch --install-bootloader
# 2. Exit chroot
exit
# 3. Update EFI boot variables (if needed)
sudo efibootmgr -v # Check current entries
```
### PHASE 8: VERIFICATION & CLEANUP
```bash
# 1. Unmount everything
sudo umount /mnt/new-boot
sudo umount /mnt/boot
sudo umount /mnt/nix
sudo umount /mnt/games
# 2. Remount /games with new partition size
sudo mount /dev/nvme0n1p5 /mnt/games
sudo btrfs filesystem resize max /mnt/games # Expand btrfs to use available space
# 3. Final verification
sudo fdisk -l /dev/nvme0n1
sudo lsblk
```
### PHASE 9: TEST BOOT
```bash
# 1. Reboot and test
sudo reboot
# 2. After successful boot, update NixOS config
# Change configurationLimit to 20 (perfect for 1GB /boot)
# In /home/johno/nixos-configs/machines/zix790prors/configuration.nix:
# boot.loader.systemd-boot.configurationLimit = 20;
# 3. Test rebuild
sudo nixos-rebuild switch --flake .#zix790prors
```
---
## PLAN B: TROUBLESHOOTING & CONTEXT FOR ADDITIONAL HELP
### IF THINGS GO WRONG
**Scenario 1: System won't boot**
- Boot from live USB
- Mount old boot partition: `sudo mount /dev/nvme0n1p1 /mnt/boot`
- Check if bootloader entries exist: `ls /mnt/boot/loader/entries/`
- Regenerate from live USB using `nixos-install` with `--root /mnt`
**Scenario 2: Partition operations fail**
- **STOP IMMEDIATELY**
- Document exact error message
- Use `sudo fdisk -l` and `sudo parted /dev/nvme0n1 print` to check current state
- Do NOT proceed without understanding the error
**Scenario 3: Btrfs resize fails**
- Check available space: `sudo btrfs filesystem usage /mnt/games`
- May need to balance first: `sudo btrfs balance start /mnt/games`
- Or defragment: `sudo btrfs filesystem defragment -r /mnt/games`
### RECOVERY INFORMATION
**Original partition layout (before changes):**
```
/dev/nvme0n1p1: 100M EFI (/boot) - sectors 2048-206847
/dev/nvme0n1p5: 1.8T btrfs (/games) - sectors 3906394112-7812548607
```
**Key files to check:**
- `/etc/fstab` - filesystem mount configuration
- `/etc/nixos/hardware-configuration.nix` - NixOS hardware config
- `/boot/loader/loader.conf` - systemd-boot config
**Important UUIDs (save these before starting):**
```bash
# Run these BEFORE making changes:
sudo blkid /dev/nvme0n1p1 # Current boot partition
sudo blkid /dev/nvme0n1p5 # Games partition
sudo blkid /dev/nvme0n1p6 # Nix store partition
```
**Emergency boot options:**
- Boot from Windows (should be unaffected)
- Boot from NixOS live USB
- Use systemd-boot menu to select older generation (if available)
### ALTERNATIVE APPROACHES IF PLAN A FAILS
1. **Expand into Microsoft reserved instead** (lower risk, less space)
2. **Use external USB for /boot** (temporary solution)
3. **Recreate partition table** (nuclear option, requires full backup)
---
## TECHNICAL DETAILS FOR CLAUDE CODE ASSISTANCE
**Repository:** `/home/johno/nixos-configs` - NixOS flake-based configuration
**Machine config:** `machines/zix790prors/configuration.nix`
**Current configurationLimit:** 1 (temporarily reduced from 2)
**Target configurationLimit:** 20 (requires ~1GB /boot)
**Key commands for status checking:**
```bash
# Partition info
sudo fdisk -l /dev/nvme0n1
sudo parted /dev/nvme0n1 print free
sudo lsblk
# Filesystem info
sudo btrfs filesystem show
sudo btrfs filesystem usage /games
df -h /boot
# Boot info
sudo efibootmgr -v
ls -la /boot/loader/entries/
```
**This document created:** 2025-10-02 by Claude Code
**Hardware:** Samsung SSD 990 PRO 4TB, NixOS + Windows 11 dual boot