- 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>
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
- Boot from NixOS live USB (build with
./build-liveusb.sh) - Have Windows recovery media ready (just in case)
- 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-installwith--root /mnt
Scenario 2: Partition operations fail
- STOP IMMEDIATELY
- Document exact error message
- Use
sudo fdisk -landsudo parted /dev/nvme0n1 printto 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
- Expand into Microsoft reserved instead (lower risk, less space)
- Use external USB for /boot (temporary solution)
- 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