Purpose: Automated PowerShell scripts to partition 1.8TB external drive for hybrid Linux/Windows gaming setup
ATOM Tag: ATOM-CFG-20251112-001 through ATOM-CFG-20251112-003
Initial Ask: "How do I run Battlefield 6 on Linux?"
AI Research: Found 8 potential workarounds (GPU passthrough, cloud gaming, etc.)
AI Recommendation: Don't. Install Windows dual-boot instead.
Why AI Said "No":
- BF6's Javelin anti-cheat requires kernel-level access (impossible in Wine/Proton)
- GPU passthrough: 40-80 hours setup, 60% failure rate, breaks on updates
- Dual-boot: 2-4 hours setup, 95% success rate, maintainable
User Decision: Followed AI's recommendation → Installed Windows 11
Result: You're reading 6,800+ lines of complete infrastructure documentation - partitioning, privacy, automation, workflows - all traceable via ATOM tags.
The KENL Difference: When BF6 breaks again (and it will), recovery takes 10 minutes instead of 4 hours - because AI documented not just the "how," but the entire "why."
📖 Read the full story: /home/user/kenl/case-studies/AI_GUIDED_DECISION_MAKING_BF6.md
These scripts implement the Hybrid Approach (Option C) from /home/user/kenl/scripts/1.8TB_EXTERNAL_DRIVE_LAYOUT.md:
1.8TB External Drive Layout:
├─ Partition 1: Games-Universal (900GB, NTFS) - Shared Steam library
├─ Partition 2: Claude-AI-Data (500GB, ext4) - LLM models, datasets
├─ Partition 3: Development (200GB, ext4) - Distrobox, Git repos
├─ Partition 4: Windows-Only (150GB, NTFS) - BF6, anti-cheat games
└─ Partition 5: Transfer (50GB, exFAT) - Cross-OS file exchange
- Administrator privileges (all scripts require
Run as Administrator) - Native Windows PowerShell (NOT WSL2 - see warnings below)
- PowerShell 5.1+ (built into Windows 10/11)
- 1.8TB external drive connected and recognized as Disk 1
- Backup all data - these scripts will DESTROY all data on the target disk
-
VERIFY DISK NUMBER BEFORE RUNNING:
Get-Disk | Format-Table Number, FriendlyName, Size, PartitionStyle -AutoSize
If your external drive is NOT Disk 1, edit
$DISK_NUMBERin each script or useconfig.local.ps1. -
❌ NEVER RUN FROM WSL2:
❌ WRONG: Windows → WSL2 → wsl -e ./script.sh ✅ CORRECT: Windows → Native PowerShell → .\script.ps1WHY: WSL2 cannot safely partition physical disks. Data corruption guaranteed. SOLUTION: Use native Windows PowerShell only.
-
Format ext4 in NATIVE LINUX ONLY:
❌ WRONG: Windows → WSL2 → mkfs.ext4 /dev/sdb2 ✅ CORRECT: Reboot → Bazzite-DX → mkfs.ext4 /dev/sdb2After Windows partitioning (STEP1-3), reboot to native Linux for ext4 formatting.
📚 Quick Start Guides:
- Workflow Diagrams: See
WORKFLOW_DIAGRAM.mdfor visual flowcharts - Profile Setup: See
PROFILES_SETUP.mdfor PowerShell/Bash automation - Privacy Guide: See
USAGE_PRIVACY.mdfor gitignore and data safety
Run scripts in sequence:
File: STEP1-WINDOWS-WIPE-DISK1.ps1
Safely wipes all data and partitions from Disk 1.
# Open PowerShell as Administrator
cd path\to\kenl\scripts\windows-partition-scripts
# Run STEP 1
.\STEP1-WINDOWS-WIPE-DISK1.ps1
# Confirmation required: type "WIPE DISK 1" when promptedWhat it does:
- Verifies disk exists and is not a system disk
- Safety checks (size, boot status)
- Removes all partitions
- Clears partition table
- Creates handover document
Output: HANDOVER-DISK-WIPE-YYYYMMDD-HHMMSS.md on Desktop
File: STEP2-WINDOWS-PARTITION-DISK1.ps1
Creates 5 partitions with correct filesystem types.
.\STEP2-WINDOWS-PARTITION-DISK1.ps1What it does:
- Initializes disk as GPT
- Creates Partition 1 (H:, 900GB, NTFS) - Games-Universal
- Creates Partition 2 (I:, 500GB, RAW) - Claude-AI-Data
⚠️ Format in Linux - Creates Partition 3 (L:, 200GB, RAW) - Development
⚠️ Format in Linux - Creates Partition 4 (K:, 150GB, NTFS) - Windows-Only ✅ FIXED: Now NTFS (was wrong)
- Creates Partition 5 (J:, ~50GB, exFAT) - Transfer ✅ FIXED: Now exFAT (was wrong)
- Runs write tests on formatted partitions
- Creates handover document
Key features:
- ✅ Partition 4 formatted as NTFS (for Windows anti-cheat games like BF6)
- ✅ Partition 5 formatted as exFAT (for cross-OS file transfer)
- ✅ Robust error handling for "device not ready" issues
- ✅ Proper write testing with delays for filesystem initialization
Output: HANDOVER-PARTITION-YYYYMMDD-HHMMSS.md on Desktop
File: STEP3-WINDOWS-MOUNT-CHECK.ps1
Verifies all partitions are accessible and working.
.\STEP3-WINDOWS-MOUNT-CHECK.ps1What it does:
- Checks all 5 partitions exist
- Verifies filesystem types match expected layout
- Tests write access on NTFS and exFAT partitions
- Counts Windows-accessible vs Linux-only partitions
- Creates comprehensive verification report
Expected results:
- ✅ 2 NTFS partitions (Games-Universal, Windows-Only)
- ✅ 1 exFAT partition (Transfer)
- ✅ 2 RAW partitions (Claude-AI-Data, Development)
- ✅ All write tests pass
Output: HANDOVER-VERIFICATION-YYYYMMDD-HHMMSS.md on Desktop
Cause: Filesystem not fully initialized after format
Fix: Script now includes delays (Start-Sleep) before write tests. If still failing:
# Manually verify in File Explorer
Start-Process "explorer.exe" "H:\"
# Try creating a test file manually
"Test" | Out-File H:\test.txtCause: Partitions not formatted in STEP2
Fix:
- Open Disk Management:
Win+R→diskmgmt.msc - Check if partitions show as "RAW" or "Unformatted"
- Re-run STEP2
Symptom: Script targets wrong drive
Fix:
- Check disk numbers:
Get-Disk | Format-Table Number, FriendlyName, Size -AutoSize
- Edit
$DISK_NUMBERvariable at top of each script - Re-run
Cause: Not running as Administrator
Fix: Right-click PowerShell → Run as Administrator
Each script creates a handover document on your Desktop:
STEP1: HANDOVER-DISK-WIPE-YYYYMMDD-HHMMSS.md
- Disk wipe results
- Safety checks performed
- Next steps
STEP2: HANDOVER-PARTITION-YYYYMMDD-HHMMSS.md
- Partition creation summary
- Filesystem types for each partition
- Linux formatting commands
- Next steps
STEP3: HANDOVER-VERIFICATION-YYYYMMDD-HHMMSS.md
- Verification results table
- Write test results
- Linux setup instructions
- Mount point configuration
After completing Windows steps, boot into Bazzite-DX:
# Identify partitions (external drive should be /dev/sdb)
lsblk -o NAME,SIZE,FSTYPE,LABEL /dev/sdb
# Format Claude-AI-Data (Partition 2, usually /dev/sdb2)
sudo mkfs.ext4 -L "Claude-AI-Data" /dev/sdb2
# Format Development (Partition 3, usually /dev/sdb3)
sudo mkfs.ext4 -L "Development" /dev/sdb3
# Verify
lsblk -o NAME,SIZE,FSTYPE,LABEL /dev/sdb# Create mount points
sudo mkdir -p /mnt/{games-universal,claude-ai,development,windows-only,transfer}
# Get UUIDs
sudo blkid /dev/sdb* | tee ~/partition-uuids.txt
# Edit /etc/fstab
sudo nano /etc/fstab
# Add these lines (replace UUIDs with your actual values from blkid):
UUID=XXXX-XXXX /mnt/games-universal ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0
UUID=YYYY-YYYY /mnt/claude-ai ext4 defaults,noatime 0 2
UUID=ZZZZ-ZZZZ /mnt/development ext4 defaults,noatime 0 2
UUID=AAAA-AAAA /mnt/windows-only ntfs-3g defaults,uid=1000,gid=1000,umask=022 0 0
UUID=BBBB-BBBB /mnt/transfer exfat defaults,uid=1000,gid=1000,umask=022 0 0
# Save (Ctrl+O, Enter, Ctrl+X)
# Test mount
sudo mount -a
# Verify all mounted
df -h | grep sdb# Add shared Steam library
mkdir -p /mnt/games-universal/SteamLibrary
# In Steam:
# Settings → Storage → Add Drive → /mnt/games-universal/SteamLibrary
# Games installed here work on both Windows and Linux!Committed to Repository (Public):
- ✅ Generic template scripts (STEP1, STEP2, STEP3)
- ✅ README documentation
- ✅ Example configuration (
config.example.ps1) - ✅ ATOM tags and metadata
Excluded from Git (Private/Local):
- ❌ Handover documents (contain usernames, disk serials, UUIDs)
- ❌ User-modified scripts (
*.ps1.local,*-MODIFIED.ps1) - ❌ Execution logs and transcripts
- ❌ User configuration (
config.local.ps1) - ❌ Archive directory (
.archive/)
Option 1: Use Default Settings
# Scripts work out-of-box with sensible defaults
.\STEP1-WINDOWS-WIPE-DISK1.ps1Option 2: Customize Settings (Recommended)
# Copy example config
Copy-Item config.example.ps1 config.local.ps1
# Edit your settings (disk number, sizes, drive letters)
notepad config.local.ps1
# Modified scripts will auto-load config.local.ps1
.\STEP1-WINDOWS-WIPE-DISK1.ps1Create .archive/ for execution history (gitignored):
# Create archive directories
mkdir .archive\handover-docs
mkdir .archive\logs
mkdir .archive\backups
# Scripts can save here instead of Desktop
# Edit $HANDOVER_DIR in config.local.ps1:
# $HANDOVER_DIR = "$PSScriptRoot\.archive\handover-docs"Suggested .archive/ layout:
.archive/
├── handover-docs/ # All HANDOVER-*.md files
│ ├── HANDOVER-DISK-WIPE-20251112-*.md
│ ├── HANDOVER-PARTITION-20251112-*.md
│ └── HANDOVER-VERIFICATION-20251112-*.md
├── logs/ # PowerShell transcripts
│ └── execution-20251112-*.log
├── backups/ # Old script versions
│ ├── STEP2-20251111.ps1.old
│ └── config-20251111.ps1.bak
└── notes/ # Personal notes
└── disk-layout-decisions.md
See .gitignore for full list. Key patterns:
# Handover docs (usernames, disk serials)
HANDOVER-*.md
# User config (disk numbers, preferences)
*.ps1.local
config.local.ps1
# Archive directory
.archive/
# UUIDs and hardware info
*-UUID*.txt
partition-uuids.txtIf you need to share execution results:
# Sanitize handover doc before sharing
$handover = Get-Content HANDOVER-DISK-WIPE-20251112-*.md
$handover = $handover -replace "C:\\Users\\.*\\Desktop", "C:\Users\USERNAME\Desktop"
$handover = $handover -replace "Serial Number:.*", "Serial Number: [REDACTED]"
$handover | Out-File HANDOVER-SANITIZED.md| File | Purpose | Key Topics |
|---|---|---|
| README.md (this file) | Main usage guide | Prerequisites, execution steps, troubleshooting |
| WORKFLOW_DIAGRAM.md | Visual flowcharts | Mermaid diagrams for complete workflow |
| PROFILES_SETUP.md | Shell profile configs | PowerShell & Bash automation, WSL2 warnings |
| USAGE_PRIVACY.md | Privacy & safety guide | Gitignore patterns, archive structure, sanitization |
| config.example.ps1 | Configuration template | Disk numbers, sizes, drive letters, paths |
| .gitignore | Privacy rules | Blocks personal data from Git commits |
| Script | ATOM Tag | Purpose |
|---|---|---|
| STEP1-WINDOWS-WIPE-DISK1.ps1 | ATOM-CFG-20251112-001 | Safely wipe disk |
| STEP2-WINDOWS-PARTITION-DISK1.ps1 | ATOM-CFG-20251112-002 | Create 5 partitions |
| STEP3-WINDOWS-MOUNT-CHECK.ps1 | ATOM-CFG-20251112-003 | Verify layout |
Design Specifications:
/home/user/kenl/scripts/1.8TB_EXTERNAL_DRIVE_LAYOUT.md- Complete design with all three layout options/home/user/kenl/scripts/KENL_WIN11_DUALBOOT_SETUP.md- Dual-boot configuration guide
Gaming Setup:
/home/user/kenl/scripts/WINDOWS_GAMING_ESSENTIALS.md- Windows libraries and optimizations/home/user/kenl/case-studies/BF6_LINUX_LAUNCH_OPTIONS.md- BF6 gaming on Linux (anti-cheat info)
System Design:
/home/user/kenl/README.md- KENL framework overview/home/user/kenl/CLAUDE.md- Claude Code guidance
| Script | ATOM Tag | Purpose |
|---|---|---|
| STEP1 | ATOM-CFG-20251112-001 | Disk wipe |
| STEP2 | ATOM-CFG-20251112-002 | Partition creation |
| STEP3 | ATOM-CFG-20251112-003 | Verification |
Related ATOM Tags:
ATOM-CFG-20251107-021- Dual-boot setupATOM-CFG-20251107-022- Windows gaming essentialsATOM-CFG-20251107-023- 1.8TB drive layout design
Drive Letter Mapping:
| Windows | Linux | Size | FS | Purpose |
|---|---|---|---|---|
| H: | /mnt/games-universal | 900GB | NTFS | Shared Steam library |
| I: | /mnt/claude-ai | 500GB | ext4 | LLM models, datasets |
| L: | /mnt/development | 200GB | ext4 | Distrobox, Git repos |
| K: | /mnt/windows-only | 150GB | NTFS | BF6, EA App, anti-cheat |
| J: | /mnt/transfer | 50GB | exFAT | Quick file exchange |
Last Updated: 2025-11-12 Author: Claude Code ATOM: ATOM-CFG-20251112-001