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

8.0 KiB

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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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

# 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):

# 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:

# 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