5.5 KiB
Procedure: Proxmox VE Post-Install Optimization
Scope: Single-node PVE 9.2 (Debian Trixie) post-install cleanup — storage repartitioning, repository configuration, subscription-nag removal, and DNS fix. Author: F.R.I.D.A.Y. Date: 2026-05-31 Prerequisites: PVE 9.2 installed, node reachable via SSH as root, node has internet (or will after DNS fix).
1. Storage Repartitioning (Remove local-lvm, Expand Root)
Goal: Delete the default thin pool and give all disk space to the root volume for LXC/VM root disks.
1.1 Remove the LVM Thin Pool and LV
# Check current layout
lvs
vgs
pvs
# Remove the Proxmox data thin pool LV
lvremove pve/data
# Confirm with "y" when prompted
1.2 Expand pve/root to Fill Free Space
# Extend the root logical volume to 100% of free VG space
lvextend -l +100%FREE pve/root
# Resize the ext4 filesystem online (no reboot needed)
resize2fs /dev/mapper/pve-root
# Verify
lvs
df -h /
Expected: pve-root is now ~930G–945G depending on disk size.
1.3 Remove local-lvm from Proxmox Storage Config
Critical: Deleting the LV does NOT remove the storage definition. The web UI will still show local-lvm as missing/unavailable until you do this:
cfg="/etc/pve/storage.cfg"
# Backup
cp "$cfg" "$cfg.bak"
# Remove the lvmthin: local-lvm block (including all indented lines)
sed -i '/^lvmthin: local-lvm/,/^[^[:space:]]/ { /^lvmthin: local-lvm/d; /^[[:space:]]/d }' "$cfg"
# Trim leading blank lines
sed -i '/./,$!d' "$cfg"
# Restart services
cat "$cfg"
systemctl restart pvestatd pveproxy
1.4 Add Missing Content Types to local Storage
Critical: After removing local-lvm, the remaining dir: local storage may only have content iso,vztmpl,backup,import. You must add images,rootdir or you cannot create VMs/LXCs — there will be no default storage for disk images and containers.
cfg="/etc/pve/storage.cfg"
# Ensure local storage has ALL content types
cat > "$cfg" <<'STORAGE_EOF'
dir: local
path /var/lib/vz
content rootdir,images,iso,vztmpl,backup,import
STORAGE_EOF
# Restart to pick up changes
systemctl restart pvestatd pveproxy
Verify in web UI: Datacenter > Storage > local should show all content types enabled.
2. Repository Configuration
Goal: Disable enterprise/ceph repos (require subscription) and enable the no-subscription repo.
2.1 Disable Enterprise Repos
for f in /etc/apt/sources.list.d/pve-enterprise.list \
/etc/apt/sources.list.d/ceph.list; do
if [ -f "$f" ]; then
mv "$f" "$f.disabled"
echo "Disabled: $f"
fi
done
Important: Both
pve-enterprise.listANDceph.listmust be disabled. The PVE installer enables both by default.
2.2 Add No-Subscription Repo
cat > /etc/apt/sources.list.d/pve-no-subscription.list <<'REPO_EOF'
deb http://download.proxmox.com/debian/pve trixie pve-no-subscription
REPO_EOF
Note:
trixie= Debian 13. Adjust if on a different Debian base.
2.3 Update Package Lists
apt update
If DNS resolution fails (see Section 4), fix DNS first then re-run apt update.
3. Remove Subscription Nag Screen
Goal: Kill the "No valid subscription" warning popup in the web UI.
js="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
# Backup
cp "$js" "$js.bak"
# Patch: replace the status check with literal false
sed -i "s/data.status !== 'Active'/false/g" "$js"
# Restart web UI
systemctl restart pveproxy
Verify: Log into the web UI — no subscription warning should appear.
4. Fix DNS Resolution
Problem: PVE 9.2 PXE installs often get nameserver 127.0.0.1 in /etc/resolv.conf, but no local DNS server is running.
cat > /etc/resolv.conf <<'DNS_EOF'
search ai.home
nameserver 192.168.7.7
nameserver 192.168.18.1
nameserver 1.1.1.1
DNS_EOF
Adjust nameservers to match your network.
192.168.7.7is the Technitium DNS in the Iron Legion fleet.
After fixing DNS, re-run:
apt update
5. Verification Checklist
Run these on each node to confirm everything is clean:
echo "=== Storage ==="
df -h /
lvs
echo ""
echo "=== Repos ==="
cat /etc/apt/sources.list.d/*.list 2>/dev/null | grep -v disabled || echo "no active list files"
echo ""
echo "=== Nag Patch ==="
grep -c "false" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
echo ""
echo "=== DNS ==="
cat /etc/resolv.conf
echo ""
echo "=== Apt Test ==="
apt update
Expected results:
pve-rootis ~930G+ and onlyroot+swapLVs exist- No
local-lvmin/etc/pve/storage.cfg localstorage hascontent rootdir,images,iso,vztmpl,backup,import- No
.listfiles withenterpriseorcephin the name (onlypve-no-subscription.list) proxmoxlib.jscontainsfalsein the subscription check lineapt updatecompletes without "Temporary failure resolving" errors
6. Known Issues & Fixes
| Issue | Cause | Fix |
|---|---|---|
| local-lvm still shows in UI | LV removed but storage.cfg still has definition | Run Section 1.3 |
| Cannot create VM/LXC | local storage missing images,rootdir |
Run Section 1.4 |
| apt update fails with DNS errors | resolv.conf points to 127.0.0.1 | Run Section 4 |
| Enterprise repo still active | Only pve-enterprise disabled, ceph.list left behind | Run Section 2.1 (disable BOTH) |
| Subscription nag still appears | pveproxy not restarted after patch | Run Section 3 + restart pveproxy |
Last updated: 2026-05-31