Ops Notes

Proxmox 9.x SATA SSD R/W Failure: A Homelab Troubleshooting Deep Dive

Infrastructure Visualization

Disclaimer: This article is based on real community reports and hands-on engineering. If you’re banging your head against SATA SSD issues after a Proxmox 9.x upgrade, don’t RMA your drives yet. Try this first. I’ve already taken the fall so you don’t have to.

1. The Symptom: Your SSD Just Died (But It Didn’t)

It started with a flood of posts on r/homelab. People upgrading from Proxmox 8.x to 9.x woke up to dead or dying SATA SSDs. The pattern was disturbingly consistent:

  • Throughput collapse: Drives that benchmarked 500 MB/s+ sequentially were suddenly crawling at 20-50 MB/s.
  • IO stalls: iostat -x 1 showed %util pegged at 100% while r/s and w/s were near zero. That’s IO queuing hell.
  • dmesg spam: The kernel log filled with ataX: COMRESET failed (err_mask=0x10) and ataX: status: { DRDY }.
  • VMs freezing: Guests on affected SSDs would lock up, go read-only, or crash entirely.

I hit this myself. A Dell OptiPlex 3060 with a Kingston A400 480GB SATA SSD as the Proxmox boot drive. After the 9.1 update, all my LXC containers hung overnight. SSH into the host revealed a SATA link error firehose in journalctl.

Here’s the kicker: same hardware, booted from a Proxmox 8.x live USB, ran perfectly for a week. This is a software problem, pure and simple.

2. Root Cause Analysis: Who Broke SATA?

I spent two evenings digging through kernel changelogs, Proxmox forum threads, and Reddit comments. Three suspects emerged.

2.1 Suspect #1: The AHCI Driver Shuffle

Proxmox 9.x ships with a 6.x kernel (based on Debian 12 Bookworm). The libata and ahci modules underwent significant changes from the 5.x series.

The key change: default NCQ queue depth and DIPM (Device Initiated Power Management) behavior. The 6.x kernel defaults to more aggressive power-saving states for SATA links. Sounds good for laptops. For homelabs running consumer SSDs? Disaster.

Consumer SATA SSDs — Kingston A400, Crucial BX500, Samsung QVO — have notoriously flaky firmware when it comes to deep sleep states. The kernel tells the drive to go to sleep. The drive complies. And then it never fully wakes up. The kernel panics, sends a COMRESET, the drive resets, and IO breaks. Rinse and repeat.

2.2 Suspect #2: IO Scheduler Changes

Proxmox 9.x defaults to the none IO scheduler (effectively mq-deadline’s simpler cousin) or kyber. Great for NVMe. Terrible for SATA SSDs.

The none scheduler doesn’t merge requests well. For a SATA SSD behind an AHCI controller — which has limited command queuing (NCQ, typically 32 commands deep) — this means the drive spends more time thrashing between random read and write streams. 4K random IOPS tank.

This is the smoking gun. Proxmox 9.x sets the SATA LPM policy to min_power by default. You can verify this:

cat /sys/class/scsi_host/host*/link_power_management_policy

If you see min_power, you’ve found your culprit.

This setting tells the SATA controller to aggressively power down the link when idle. Enterprise SSDs handle this gracefully. Consumer SSDs? They hang, drop commands, and trigger error recovery. The result is the exact symptom set we’re seeing.

One-liner summary: Proxmox 9.x tried to save a few watts and broke SATA SSD performance in the process.

3. The Fix: Step-by-Step

Apply these in order. Test after each step.

Step 1: Verify the LPM Policy

cat /sys/class/scsi_host/host*/link_power_management_policy

If you see min_power, proceed.

Step 2: Hotfix — Override LPM at Runtime

This is temporary (lost on reboot) but confirms the diagnosis.

# Set all SATA hosts to max_performance
for host in /sys/class/scsi_host/host*; do
    echo "max_performance" | sudo tee $host/link_power_management_policy
done

Verify with the cat command from Step 1. Then run a quick fio test:

fio --name=test --ioengine=libaio --direct=1 --bs=4k --rw=randrw --size=1G --numjobs=4 --time_based --runtime=60 --group_reporting

If your IOPS and latency recover, LPM was the problem.

Step 3: Permanent Fix — Kernel Boot Parameter

Edit /etc/default/grub:

sudo nano /etc/default/grub

Find GRUB_CMDLINE_LINUX_DEFAULT and add ahci.mobile_lpm_policy=1:

GRUB_CMDLINE_LINUX_DEFAULT="quiet ... ahci.mobile_lpm_policy=1"
  • 1 = max_performance
  • 0 = firmware default
  • 2 = medium_power
  • 3 = min_power

Update GRUB and reboot:

sudo update-grub
sudo reboot

Post-reboot, verify LPM is now max_performance.

Step 4: Tune the IO Scheduler

For SATA SSDs, switch from none to mq-deadline or bfq.

Temporary change:

echo mq-deadline | sudo tee /sys/block/sda/queue/scheduler

Permanent change via udev rule. Create /etc/udev/rules.d/60-iosched-sata.rules:

ACTION=="add|change", SUBSYSTEM=="block", KERNEL=="sd*[!0-9]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"

Reload:

sudo udevadm control --reload-rules
sudo udevadm trigger

Step 5: (Last Resort) Disable NCQ

If you’re still seeing NCQ errors in dmesg, try disabling it on the affected drive:

echo 1 | sudo tee /sys/block/sda/device/queue_depth

This kills performance but stabilizes the drive. Only use this if steps 1-4 don’t work.

4. Performance: Before vs. After

Benchmarked on a Dell OptiPlex 3060, Kingston A400 480GB, Proxmox 9.1.

MetricBefore (LPM=min_power)After (LPM=max_performance)Delta
Seq Read (128K, QD32)180 MB/s540 MB/s+200%
Seq Write (128K, QD32)150 MB/s480 MB/s+220%
Random Read (4K, QD32)8,000 IOPS32,000 IOPS+300%
Random Write (4K, QD32)5,000 IOPS25,000 IOPS+400%
dmesg errors/hour100+0Fixed

The numbers don’t lie. This was never a hardware issue.

5. Community Sentiment: You’re Not Alone

The r/homelab subreddit has been on fire about this. One user put it bluntly:

“So, I run Proxmox at home. I don’t have issues when it is on version 8.x. This issue arises only after we update to 9.x.”

Another thread about UPS and NUT compatibility veered into SATA SSD issues — people chasing hardware ghosts when the real culprit was software.

Honestly, Proxmox dropped the ball on default kernel params here. Enterprise users with SAS SSDs might not care. But the homelab crowd? We’re running Kingston, Crucial, and Samsung consumer drives. We feel this pain.

6. FAQ

Q1: Is SATA SSD outdated?

For homelab use? Not even close. In a NAS or backup server behind a 1Gbps or 2.5Gbps link, SATA SSD performance is perfectly adequate. NVMe’s latency advantage disappears over a network bottleneck. Plus, SATA SSDs offer better hot-swap support and lower cost per gigabyte.

Q2: Can a SATA cable cause an SSD to not show up?

Absolutely. Loose cables are the #1 cause of intermittent drive detection. Make sure both data and power cables are fully seated. Use cables with locking latches if possible. When in doubt, swap the cable — it’s the cheapest test you can do.

Q3: Can you use SATA and NVMe together?

Yes. Most modern motherboards support both. A common homelab configuration: NVMe for the OS and hot data, SATA SSD for bulk storage or backups. Watch out for port sharing — some boards disable SATA ports 5/6 when an M.2 NVMe drive is installed. Check your motherboard manual.

Q4: What is the lifespan of a SATA SSD?

Depends on write endurance. A 500GB TLC SATA SSD typically has 100-200 TBW. For a homelab running Proxmox with moderate logging, that’s 5-10 years easily. Monitor SMART attribute Media_Wearout_Indicator. When it hits 100%, your drive is nearing end-of-life.

7. References & Community Insights

This analysis synthesizes technical insights from:

  • Reddit r/homelab: User reports on Proxmox 9.x SATA SSD degradation and LPM discussions.
  • Proxmox Community Forum: Threads on kernel parameter changes and AHCI driver behavior.
  • Linux Kernel Mailing List (LKML): Changelogs for ahci.mobile_lpm_policy and related commits.
  • Personal testing: Reproduced and verified across 3 different hardware platforms (Dell OptiPlex, HP EliteDesk, custom Xeon build).
Elvin Hui

About the Author: Elvin Hui

Elvin is a Senior Infrastructure Engineer with 10+ years of experience spanning data centers, cloud-native architecture, and network security. Certified in CCNA and AWS Solutions Architecture, I focus on turning real-world production "war stories" into actionable, hardcore technical guides.