Phase 2 - Fine-Tuning Proxmox
Fine-Tuning Your Proxmox Server:
Introduction
Welcome back! Last week you installed Proxmox VE and got your first glimpse of the web interface. But right now, your server is like a freshly built house with empty rooms - functional, but not yet optimized for daily use.
Today we're going to fine-tune your Proxmox installation to make it production-ready for your homelab. We'll add storage, optimize the system, prepare for VM installations, and set up proper backup strategies.
Difficulty Level: Beginner to Intermediate
Time Required: 60-90 minutes
What You'll Learn:
- Adding and configuring additional disks
- Creating LVM-Thin storage pools
- Running essential post-install optimizations
- Downloading and managing OS images
- Planning and configuring backup strategies
Prerequisites
Before we begin: - Completed Phase 1 (Proxmox installed and accessible) - Access to the Proxmox web interface - At least one additional disk installed (optional but recommended) - Root access to your Proxmox server
Part 1: Adding Additional Disks to Proxmox
Remember when we talked about using multiple disks? Now we're going to make those extra disks available to Proxmox.
Why Add Additional Disks?
Your Proxmox OS disk has limited space. Additional disks give you: - More storage for VMs and containers - Performance isolation (OS operations don't slow down VMs) - Flexibility to use different disk types (SSD for speed, HDD for bulk storage) - Better organization (separate storage pools for different purposes)
Step 1: Identify Your Disks
- Log into the Proxmox web interface
- Click on your node name in the left sidebar (e.g., "pve01")
- Navigate to Disks in the left menu
You'll see a list of all physical disks in your system.
Disks overview showing all available disks:
Figure 1: Disks overview showing all available disks
What you're seeing:
- Device: The disk identifier (e.g., /dev/sda, /dev/sdb, /dev/nvme0n1)
- Size: Total disk capacity
- Usage: What the disk is currently used for
- GPT: Whether the disk has a GUID Partition Table
- Health: SMART status (if available)
Step 2: Understanding Disk Status
Used disks will show: - "LVM" in the Usage column (your Proxmox OS disk) - Specific partition information
Unused disks will show: - "-" or blank in the Usage column - These are the disks we can add to Proxmox storage
Step 3: Wipe the Disk (If Necessary)
If your additional disk has old data or partitions, you should wipe it first.
Warning: This will erase ALL data on the selected disk. Double-check you're selecting the correct disk!
- Click on the disk you want to use (NOT your Proxmox OS disk!)
- Click the Wipe Disk button at the top
- A confirmation dialog appears
- Verify the disk name is correct
- Click Yes to wipe
Wipe disk confirmation dialog:
Figure 2: Wipe disk confirmation dialog
The wipe process takes just a few seconds. The disk is now ready to use.
Important Notes
- Don't wipe your OS disk! Look for the disk marked as "LVM" with your Proxmox installation
- Modern SSDs: Wiping also issues a TRIM command for SSDs
- You can skip wiping if the disk is already blank/new
Part 2: Creating LVM-Thin Storage
Now we'll turn that disk into usable storage for Proxmox.
What is LVM-Thin?
Let's break this down:
LVM (Logical Volume Manager): - A flexible way to manage disk storage - Allows resizing, snapshots, and easy management - Standard in Linux environments
Thin Provisioning: - Allocates storage on-demand instead of upfront - You can "overcommit" storage (assign more than physically available) - Only uses actual space when data is written
Example: You create a 100GB VM disk on thin storage, but the VM only uses 20GB. Thin provisioning means only 20GB of physical space is consumed, not 100GB.
Why use LVM-Thin? - Efficiency: No wasted space - Snapshots: Fast backup capabilities - Flexibility: Easy to manage and resize - Overcommitment: Useful for development/test environments
Step 1: Access LVM-Thin Creation
- Still in the Disks section of your node
- Click on LVM-Thin in the left submenu
- Click the Create: Thinpool button
LVM-Thin overview page:
Figure 3: LVM-Thin overview page
Step 2: Configure the Thinpool
A dialog appears with several options.
Create Thinpool dialog (empty):
Figure 4: Create Thinpool dialog (empty)
Field explanations:
Disk: - Select your additional disk from the dropdown - Choose the disk you just wiped (or your unused disk)
Name:
- Give your storage a descriptive name
- Examples: vm-storage, ssd-pool, data-storage
- Use lowercase, no spaces (hyphens and underscores are fine)
Add Storage: - Keep this checked (enabled) - This automatically adds the thinpool to Proxmox storage configuration
Example configuration:
Step 3: Create the Thinpool
- Verify your settings
- Click Create
- Proxmox creates the LVM-Thin pool (takes a few seconds)
- You'll see a success message
LVM-Thin overview showing the newly created thinpool:
Figure 5: LVM-Thin overview showing the newly created thinpool
Step 4: Verify Storage Addition
- Click on Datacenter in the left sidebar
- Click on Storage
- You should see your new storage pool listed
Storage overview showing the new LVM-Thin storage:
Figure 6: Storage overview showing the new LVM-Thin storage
What you're seeing:
- ID: Your storage name (e.g., vm-storage)
- Type: LVM-Thin
- Content: What can be stored here (Disk image, Container)
- Status: Active/Enabled
- Usage: Current storage consumption
Congratulations! You now have additional storage ready for VMs and containers.
Part 5: Configuring Repositories for Updates
By default, Proxmox is configured to use the Enterprise repositories, which require a paid subscription. Since we're running a homelab, we'll switch to the free "no-subscription" repositories.
Understanding Proxmox 9 Repository Structure
Proxmox 9 uses a new repository format with .sources files instead of the old .list files. This is part of Debian's modern package management system.
Step 1: Disable Enterprise Repositories
First, let's check what repositories are currently configured:
You should see three .sources files:
- pve-enterprise.sources - Proxmox VE Enterprise repository (requires subscription)
- ceph.sources - Ceph Enterprise repository (requires subscription)
- debian.sources - Standard Debian repositories (free)
Overview repository files:
Figure 7: Overview repository files
Let's disable the enterprise repositories:
# Backup the original files first
cp /etc/apt/sources.list.d/pve-enterprise.sources /etc/apt/sources.list.d/pve-enterprise.sources.bak
cp /etc/apt/sources.list.d/ceph.sources /etc/apt/sources.list.d/ceph.sources.bak
# Disable PVE Enterprise repository
nano /etc/apt/sources.list.d/pve-enterprise.sources
In nano, add a # at the beginning of each line to comment them out:
#Types: deb
#URIs: https://enterprise.proxmox.com/debian/pve
#Suites: trixie
#Components: pve-enterprise
#Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Save and exit (CTRL+O, ENTER, CTRL+X)
Comment out all lines:
Figure 8: Comment out all lines
Repeat the same process for Ceph (unless you're using Ceph storage):
Comment out all lines:
#Types: deb
#URIs: https://enterprise.proxmox.com/debian/ceph-squid
#Suites: trixie
#Components: enterprise
#Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Save and exit.
Step 2: Add No-Subscription Repository
Now let's add the free no-subscription repository:
Add the following content:
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
Save and exit.
Add no subscription repo:
Figure 9: Add no subscription repo
Step 3: Update Package Lists
Now update the package lists to use the new repositories:
You should see output like this without any errors:
Get:1 http://security.debian.org/debian-security trixie-security InRelease [43.4 kB]
Hit:2 http://deb.debian.org/debian trixie InRelease
Get:3 http://download.proxmox.com/debian/pve trixie InRelease [2,771 B]
...
Update succesful:
Figure 10: Update succesful
Check available updates:
Step 4: Upgrade Your System
Install all available updates:
This will download and install all updates, including: - Proxmox VE packages - Kernel updates - Security patches
The upgrade process may take a few minutes depending on your internet connection and the number of updates available.
When finished, you'll see a summary:
Step 5: Cleanup
Remove unnecessary packages and clean the cache:
Step 6: Verify
Check your Proxmox version to confirm everything is up to date:
You should see the latest versions of all Proxmox components.
Troubleshooting
"401 Unauthorized" Errors
If you see errors like:
This means you didn't fully comment out the enterprise repositories. Go back to Step 1 and ensure all lines in both pve-enterprise.sources and ceph.sources start with #.
No Updates Available
If apt list --upgradable shows nothing, your system is already fully updated. This is normal if you just installed Proxmox.
Kernel Updates
If a new kernel was installed, you should reboot your system to use it:
After reboot, verify the new kernel is active:
What Just Happened?
Before: - Subscription nag screen on every login - Enterprise repository (requires paid subscription) - Possibly outdated packages
After: - No more subscription popup! 🎉 - Free update repository configured - System fully updated - Optimized for home use
Next Steps:
Now that your system is up to date, we can proceed with configuring storage, networking, and creating your first virtual machine!
Part 4: Installing LXC Management Scripts
Managing updates and tracking IP addresses for multiple containers can be tedious. These two scripts make container management much easier and more organized.
Script 1: LXC Updater (Automatic Updates)
What Does This Script Do?
It installs a system that: - Tags containers with update schedules (daily, weekly, monthly) - Automatically updates tagged containers - Sends notifications when updates are applied - Saves time when you have many containers
Why is this useful?
Imagine having 10 containers. Without this: - Manually update each container individually - Easy to forget which ones need updates - Time-consuming and tedious
With tags: - Tag containers as "auto-update" - Scheduled task updates them all - Get notifications of what was updated
Step 1: Access Shell Again
- Click on your node name
- Click Shell
Step 2: Run the LXC Updater Script
Copy and paste this command:
Press Enter.
LXC updater script initial screen:
Figure 11: LXC updater script initial screen
Step 3: Choose Installation Type
The script offers options:
"Install Update LXCs?" - Press Y (Yes)
"Create a cron job to run script daily?" - Press Y if you want automatic daily updates - Press N if you prefer manual updates (you can run the script anytime)
For most homelab users, Y (automatic daily updates) is recommended.
Script completion message:
Figure 12: Script completion message
How to Use Update Tags (Quick Overview)
We'll cover this in depth later, but here's the quick version:
When creating a container:
1. In the container creation wizard, you'll see a "Tags" field
2. Add tag: auto-update or update-daily
3. The script will automatically update containers with these tags
For existing containers:
1. Click on the container
2. Go to Options
3. Edit Tags
4. Add: auto-update
Script 2: LXC Tag Install (IP Address Tags)
What Does This Script Do?
This incredibly handy script automatically: - Detects the IP address of each container - Adds it as a tag to the container - Updates tags automatically when IPs change - Makes IP addresses visible at a glance in the Proxmox interface
Why is this so useful?
Without IP tags: - Need to open each container to find its IP - Can't quickly see which container has which IP - Tedious when managing multiple containers - Hard to remember which service is at which address
With IP tags: - See all container IPs at a glance in the container list - No need to open containers to find addresses - Quick reference when connecting to services - Professional organization (looks impressive too!)
Example: Instead of seeing just "pihole" in your container list, you'll see "pihole" with a tag showing "192.168.1.53" right next to it.
Step 1: Still in Shell
Make sure you're still in the Proxmox shell from the previous step.
Step 2: Run the LXC Tag Install Script
Copy and paste this command:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/tools/pve/add-iptag.sh)"
Press Enter.
LXC tag script initial screen:
Figure 13: LXC tag script initial screen
Step 3: Confirm Installation
The script will ask for confirmation:
"This script will install tags for LXC containers showing their IP addresses. Continue?" - Press Y (Yes)
The script installs quickly (5-10 seconds).
Tag script completion message:
Figure 14: Tag script completion message
Step 4: How It Works
The script creates a systemd service that: 1. Runs when a container starts 2. Detects the container's IP address 3. Automatically adds/updates the IP as a tag 4. Keeps tags current when IPs change (DHCP renewals, manual changes)
You don't need to do anything else! The tags will appear automatically when you create containers.
Seeing IP Tags in Action
Once you create containers (which we'll do in the next tutorial), you'll see their IPs displayed as tags in the Proxmox interface:
In the container list:
ID Name Status Tags
100 pihole running 192.168.1.53
101 nginx-proxy running 192.168.1.80
102 portainer running 192.168.1.90
Combined Power of Both Scripts
Together, these two scripts give you: - Automatic updates via tags (auto-update) - Visible IP addresses via tags (192.168.1.x) - Professional organization of your homelab - Time savings managing multiple containers
Example container with both features:
You can see at a glance: - What the container is (nginx-proxy) - Where it's located (192.168.1.80) - That it updates automatically (auto-update tag)
This level of organization becomes invaluable as your homelab grows!
Part 5: Downloading Operating System ISOs
To create virtual machines, you need OS installation media. Let's download a popular Linux distribution.
Why Download ISOs to Proxmox?
- Faster installation: ISOs are stored locally
- No internet required during VM installation
- Consistency: Same ISO for multiple VMs
- Convenience: Everything in one place
Step 1: Choose an ISO to Download
For this tutorial, we'll download Ubuntu Server 24.04 LTS. It's: - Free and open source - Widely used and well-documented - Perfect for learning - Long-term support (5 years of updates)
Alternative options: - Debian (very stable, lightweight) - Rocky Linux (RHEL-compatible) - Alpine Linux (extremely lightweight) - Windows (if you have a license)
Step 2: Access Local Storage
- Click on your node name in the left sidebar
- Expand your node to see storage options
- Click on local (pve01) storage
- Click on ISO Images in the menu
ISO Images storage view (empty):
Figure 15: ISO Images storage view (empty)
Step 3: Download from URL
Proxmox can download ISOs directly from the internet.
- Click the Download from URL button
- A dialog appears
Download from URL dialog (empty):
Figure 16: Download from URL dialog (empty)
Step 4: Get the Download URL
- Open a new browser tab
- Go to https://ubuntu.com/download/server
- Left-click on the Download Ubuntu Server button
- Wait for download to finish
Ubuntu Server download page:
Figure 17: Ubuntu Server download page
Step 5: Start the Download
Back in Proxmox:
- Click upload en select the downloaded iso file.
- The File name auto-fills (you can edit if desired)
- Click upload
The upload starts! Progress is shown in a task viewer window.
Upload progress window:
Figure 18: Upload progress window
Step 6: Verify the Download
Once complete:
- Close the task viewer
- You'll see the ISO in your ISO Images list
- Note the size and filename
ISO Images view showing downloaded Ubuntu ISO:
Figure 19: ISO Images view showing downloaded Ubuntu ISO
Congratulations! You now have an OS ready to install in VMs.
Downloading Additional ISOs
Repeat this process for any other operating systems you want to test: - Different Linux distributions - Windows Server (if you have licenses) - Specialized OSes (pfSense, OPNsense, etc.)
Pro tip: Only download images you think you need. Disk space is limited.
Part 6: Backup Strategy and Configuration
Backups are not optional. They're the difference between "minor inconvenience" and "catastrophic data loss."
Why Backups Matter
Reality check: You WILL break things. We all do. It's part of learning.
Common disasters:
- Misconfigured network settings (can't access server)
- Deleted wrong VM
- Update breaks something critical
- Disk failure
- Accidentally running rm -rf / in the wrong place
With backups: "Oops, let me restore from last night."
Without backups: "I just lost 3 months of work."
Proxmox Backup Capabilities
Proxmox has excellent built-in backup features:
What can be backed up: - Entire VMs (complete system state) - Containers (LXC) - Configuration files
Backup modes: - Snapshot: VM keeps running, point-in-time backup - Suspend: VM paused during backup, then resumed - Stop: VM stopped, backed up, then restarted
Backup formats: - Vzdump: Proxmox's compressed backup format - Supports incremental backups (only changed data)
Planning Your Backup Strategy
Before configuring, answer these questions:
1. Where will backups be stored? - Local disk (fast, but no protection from disk failure) - NAS/Network storage (better, survives local disk failure) - External USB drive (okay for small setups) - Cloud storage (best for off-site protection)
2. How often should backups run? - Critical systems: Daily - Development/testing: Weekly - Rarely-changed systems: Weekly or monthly
3. How many backups to keep? - Keep at least 7 days for daily backups - Keep 4 weeks for weekly backups - Balance: Storage space vs. recovery options
My recommendation for beginners: - Daily backups of important systems - Keep last 7 backups - Store on separate disk or NAS if possible
Step 1: Add Backup Storage (Optional)
If you have a separate disk or NAS for backups:
- Click Datacenter
- Click Storage
- Click Add dropdown
- Choose your storage type:
- Directory: Local disk or mounted drive
- NFS: Network storage
- CIFS/SMB: Windows shares
For now: We'll use the local storage that came with Proxmox. We can change this later.
Storage add dropdown menu:
Figure 20: Storage add dropdown menu
Step 2: Access Backup Configuration
- Click Datacenter in the left sidebar
- Click Backup in the menu
- You'll see the backup job list (currently empty)
Step 3: Create a Backup Job
- Click Add button
- A backup job configuration dialog appears
Step 4: Configure the Backup Job
Let's go through each field:
Node:
- Select your Proxmox node (e.g., pve01)
- For multi-node clusters, choose which node runs the backup
Storage:
- Choose where backups are saved
- For now: local (your Proxmox system disk)
- Later: Change to NAS or separate disk
Schedule:
- When the backup runs
- Format: HH:MM (24-hour time)
- Example: 02:00 (2:00 AM)
- Choose a time when VMs are idle
Day of week:
- Which days to run backups
- Options: mon, tue, wed, thu, fri, sat, sun, or * for all days
- Example: * (every day) or mon,wed,fri (Mon/Wed/Fri)
Selection mode: - All: Backup all VMs and containers - Include selected: Only backup selected VMs - Exclude selected: Backup everything except selected VMs - Pool based: Backup based on resource pools
For beginners: Start with All
Compression: - ZSTD: Modern, fast, good compression (recommended) - LZO: Fast but less compression - GZIP: Slower but maximum compression
Recommendation: ZSTD
Mode: - Snapshot: VM stays running (works for most systems) - Suspend: Pause VM during backup (for consistency) - Stop: Stop VM, backup, restart (safest but causes downtime)
Recommendation: Snapshot for start
Enable: - Check to activate the job immediately - Uncheck to create but not activate
Send email to: - Email for backup notifications - Use the email you configured during install - Get notified of success/failure
Email: - When to send emails: - Always: Every backup (can be spammy) - On failure only: Only when something goes wrong (recommended)
Retention: - How many backups to keep - Example settings: - Keep Last: 7 (keep last 7 backups) - Keep Daily: 7 (keep one per day for 7 days) - Keep Weekly: 4 (keep one per week for 4 weeks) - Keep Monthly: 6 (keep one per month for 6 months)
Example beginner configuration:
Node: pve01
Storage: local
Schedule: 02:00
Day of week: *
Selection mode: All
Compression: ZSTD
Mode: Snapshot
Enable: ✓ (checked)
Send email to: your-email@example.com
Email: On failure only
Keep Last: 7
Backup job dialog filled with example settings:
Figure 21: Backup job dialog filled with example settings
Step 5: Create the Job
- Verify all settings
- Click Create
- The backup job is now scheduled!
Backup overview showing the new scheduled job:
Figure 22: Backup overview showing the new scheduled job
Step 6: Test the Backup (Optional)
Don't wait until you need a backup to discover it doesn't work!
- Select your backup job from the list
- Click Run now
- A task window shows progress
When complete, verify: 1. Click on your node → Storage → local 2. Click Backups in the menu 3. You should see backup files listed
Understanding Backup Storage Requirements
Backup sizes: - Empty VM: 100-500MB (depending on OS) - VM with data: Varies widely - Container: Usually 50-200MB
Example calculation: - 5 VMs × 5GB each = 25GB per backup - Keep 7 backups = 175GB storage needed
Pro tip: Monitor your backup storage usage. Run out of space = failed backups.
Restoring from Backup (Overview)
We'll cover full restore procedures in a future tutorial, but here's the quick version:
To restore a VM: 1. Go to Storage → Backups 2. Select the backup file 3. Click Restore 4. Choose options (same VM ID or new) 5. Click Restore
Easy! This is why backups are essential.
Summary and Best Practices
Let's recap what we've accomplished today:
✅ Added additional storage disks - More space for VMs and containers - Better performance through disk separation
✅ Created LVM-Thin storage pool - Efficient space usage with thin provisioning - Snapshot capabilities for backups
✅ Ran post-install optimizations - Removed subscription nag - Configured free update repository - Updated system to latest version
✅ Installed LXC management scripts - Automatic container updates via tags - Automatic IP address tagging for easy reference
✅ Downloaded OS installation media - Ubuntu Server ISO ready for VM creation
✅ Configured backup strategy - Automated daily backups - Retention policy configured - Email notifications enabled
Best Practices Going Forward
Storage: - Use separate disks for OS and data - Monitor storage usage regularly - Plan for growth (you'll use more than expected)
Updates: - Let the post-install script handle repositories - Check for updates weekly - Read changelogs before major updates
Backups: - Test restores regularly (at least monthly) - Store backups on separate hardware when possible - Never trust a backup you haven't tested restoring
Container Management: - Use tags consistently (auto-update for production services) - IP tags appear automatically - no action needed! - Review container tags periodically for organization
Security: - Keep system updated - Use strong passwords (password manager!) - Consider firewall rules (future tutorial)
Next Week: VMs and Containers Explained
Your Proxmox server is now optimized and ready for action! Next week in Phase 2.5: VMs and Containers Explained, we'll finally create something useful:
What's coming: - Understanding VMs vs Containers - Deep dive into when to use each - Creating your first VM - Full Ubuntu Server installation - Creating your first container - Lightweight Alpine Linux - Installing a useful service - Something you'll actually use! - Resource allocation - CPU, RAM, and storage management - Basic networking - Making services accessible - Seeing those IP tags in action! - Your containers will automatically show their addresses
The foundation is laid. Now we build!
Troubleshooting
Can't See Additional Disk
Problem: Extra disk doesn't appear in Disks view
Solutions:
1. Verify disk is physically connected
2. Check BIOS/UEFI detects the disk
3. Reboot Proxmox
4. Check lsblk command in shell
Post-Install Script Failed
Problem: Script encountered errors
Solutions:
1. Check internet connectivity: ping 8.8.8.8
2. Verify DNS works: ping google.com
3. Try running script again (usually safe)
4. Check Proxmox forums for specific errors
LXC Scripts Not Working
Problem: Update or tag scripts don't seem to work
Solutions:
1. Verify scripts installed successfully
2. Check system logs: journalctl -xe
3. For IP tags: Wait until you create a container to see them work
4. For updates: Verify containers have correct tags applied
Backup Job Not Running
Problem: Scheduled backup doesn't execute
Solutions: 1. Verify job is enabled (checkbox) 2. Check system time is correct 3. Look in task logs for errors 4. Ensure enough storage space available
ISO Download Failed
Problem: Download interrupted or failed
Solutions: 1. Check internet connection 2. Verify URL is still valid 3. Try downloading directly and uploading via web interface 4. Check storage has enough space
Conclusion
Your Proxmox server is now a properly configured, optimized platform ready for serious work. You've gone from a bare installation to a production-ready homelab foundation with professional-grade management tools.
Key achievements: - Storage expanded and optimized - System updated and tuned - Automatic container updates configured - IP address tracking enabled (#handig!) - Backup protection in place - Ready for VM and container deployment
Take pride in what you've built. This is the invisible infrastructure that makes everything else possible. And those IP tags? You'll love them once you start creating containers - being able to see every container's IP address at a glance is one of those small quality-of-life improvements that makes managing your homelab so much more pleasant.
Next week, we finally get to the fun part - creating VMs, spinning up containers, and deploying actual services you can use!
— Locuz
P.S. That backup job you just configured? You'll thank yourself for it someday. Trust me on this one. And those IP tags? You'll wonder how you ever lived without them.