When using PCIe SATA expansion cards on Linux or Ubuntu, users often run into disks not being detected, disks dropping after some runtime, system freezes, or boot problems around PCIe link training. Common examples include JMB585 and ASM1166 SATA cards, especially in NAS boxes, mini PCs, industrial PCs, modified motherboards, or cheap adapter setups.
pci=nomsi and pcie_aspm=off are two Linux kernel parameters often used when troubleshooting this class of problem. They both involve PCIe, but they address different layers:
pci=nomsimainly targets interrupt signaling problems, meaning the way the device notifies the CPU is unreliable.pcie_aspm=offmainly targets PCIe power management problems, meaning the link fails to wake reliably after entering a low-power state.
If you treat these two options as the same kind of fix, troubleshooting becomes guesswork. A better approach is to look at the symptoms and decide whether interrupts, link power management, or the hardware itself is the more likely suspect.
pci=nomsi: disable message-signaled interrupts
pci=nomsi can be read as:
PCI: PCI-related devices.no: disable.MSI: Message Signaled Interrupts.
It tells the Linux kernel not to use MSI / MSI-X interrupt mechanisms for PCI devices, and to fall back to the older INTx interrupt mode.
What is MSI?
Traditionally, hardware devices notify the CPU through physical interrupt pins, known as legacy IRQs. This works, but sharing and scaling are limited.
MSI / MSI-X came later. Instead of pulling a physical interrupt pin, the device writes a message to a specific memory address. When the CPU receives that message, it knows which device raised the interrupt. On modern systems, MSI / MSI-X is usually more flexible and better suited for high-concurrency devices.
The problem is that not every PCIe expansion card implements MSI reliably. Some cheap cards, retired enterprise cards, bridge-chip designs, or SATA controllers with poor firmware may produce abnormal MSI messages, lost interrupts, or interrupt storms under Linux drivers.
Common symptoms include:
- The machine hangs while detecting the PCIe expansion card during boot.
- The SATA expansion card does not detect disks at all.
- Random system freezes.
dmesgshows errors such asirq xx: nobody cared.- The card appears to work under Windows but is unstable under Linux.
The core problem is not the hard disk or filesystem. It is the interrupt communication path between the device and CPU.
What happens after adding pci=nomsi?
Enable:
|
|
This tells the Linux kernel not to let PCI devices use advanced MSI message interrupts, and to fall back to legacy INTx interrupts.
This may slightly reduce performance and interrupt handling efficiency, especially on high-throughput or high-interrupt devices. For home NAS setups, SATA expansion cards, and ordinary hard-drive arrays, the practical impact is usually small. The value is that it bypasses MSI compatibility bugs in some device firmware or bridge chips, allowing the system to identify the device and handle I/O reliably.
In short, pci=nomsi addresses “the device’s way of notifying the CPU is unreliable.”
pcie_aspm=off: disable PCIe Active State Power Management
pcie_aspm=off can be read as:
PCIe: PCI Express.ASPM: Active State Power Management.off: disable.
It disables PCIe link power-saving mechanisms, preventing PCIe links from entering low-power states.
What is ASPM?
ASPM is a PCIe power-saving mechanism. When the system sees that a PCIe link is idle, it can move the link into a lower-power state such as L0s or L1. When the device needs to transfer data again, the link wakes back up to normal operation.
On well-designed hardware, this saves power and is almost invisible to users. On some consumer motherboards, mini PCs, industrial systems, cheap SATA cards, adapters, or systems with weaker signal quality, the problem is “it goes to sleep and does not wake cleanly.”
A typical case is a JMB585 or ASM1166 PCIe SATA card entering a low-power state after being idle. The next disk access requires the link to wake from L1. If the controller, motherboard, riser, power, or firmware quality is not good enough, wake-up may be too slow or the physical signal may glitch. The Linux kernel may then think the device briefly disappeared.
Typical dmesg messages include:
|
|
This may be followed by:
- Disk dropout.
- Degraded arrays.
- Filesystem remounted read-only.
- NAS services failing.
- System I/O hangs.
- Disk temporarily returns after reboot.
The frustrating part is that the problem may not appear at boot. It often happens after the system has been running, after an idle period, or during a load transition.
What happens after adding pcie_aspm=off?
Enable:
|
|
This tells the kernel to disable system-wide PCIe ASPM. PCIe links should remain in normal connected states as much as possible, whether idle or busy, instead of entering low-power sleep.
The side effect is slightly higher power use. For desktops, NAS boxes, and mini PCs, this is often only hundreds of milliwatts to one or two watts. For laptops, it may affect battery life. The benefit is fewer disk drops, link-training errors, and physical-layer errors caused by PCIe link sleep and wake.
In short, pcie_aspm=off addresses “the PCIe link does not wake reliably after sleeping.”
The difference between the two parameters
They solve two different classes of problems:
| Parameter | Core problem | Common symptoms | Main side effect |
|---|---|---|---|
pci=nomsi |
Interrupt signaling conflicts, poor MSI / MSI-X compatibility | Boot hangs, no disk detection, irq xx: nobody cared, system freeze |
Slightly lower interrupt efficiency under very high concurrency |
pcie_aspm=off |
PCIe power-save wake failure, unstable link signal | Works at boot, drops disks later, PCIe Bus Error, COMRESET failed |
Slightly higher power use, slightly lower laptop battery life |
They do not replace each other. One controls interrupts, the other controls link power management.
If the system hangs during boot or the device is never detected, suspect pci=nomsi first. If it boots normally but drops disks later, or dmesg shows Physical Layer, COMRESET, or “link is slow to respond” messages, suspect pcie_aspm=off first.
Should you add both?
Many NAS users add both at once:
|
|
This is a quick troubleshooting method, especially with JMB585, ASM1166, mini PCs, adapter cards, uncertain power, and uncertain cabling. It can bypass MSI compatibility issues and ASPM wake problems at the same time.
From a troubleshooting perspective, it is better to record symptoms and logs first:
- If you see interrupt errors or boot hangs, try
pci=nomsifirst. - If you see disk drops, PCIe Bus Error, or COMRESET after runtime, try
pcie_aspm=offfirst. - If the system is unstable and you need to restore service quickly, add both, then test them separately later.
This helps you identify the actual class of problem, which is useful when changing cards, slots, motherboards, or BIOS settings later.
How to make it permanent on Ubuntu / Debian
Edit the Grub configuration file:
|
|
Find this line:
|
|
Append the parameters inside the quotes, separated by spaces. For example:
|
|
Save and exit. In Nano, press Ctrl+O, confirm with Enter, then press Ctrl+X.
Update Grub and reboot:
|
|
After reboot, check whether the kernel command line is active:
|
|
If the output contains pci=nomsi and pcie_aspm=off, the parameters are active for the current boot.
What else should you check?
These two parameters are useful, but they are not universal fixes for every disk-drop problem. When troubleshooting SATA expansion cards and NAS disk drops, also check:
- Loose or poor-quality SATA data cables.
- Stable disk power, especially when many disks spin up at once.
- Poor PCIe slot contact.
- Expansion card overheating.
- BIOS options related to PCIe ASPM, Above 4G Decoding, and PCIe speed.
- Known firmware issues in the SATA expansion card.
- Disk SMART warnings, bad sectors, or I/O errors in system logs.
If disk SMART is already reporting errors, or power delivery is unstable, kernel parameters alone will not solve the underlying problem.
Summary
pci=nomsi and pcie_aspm=off are both common troubleshooting parameters for unstable PCIe SATA expansion cards on Linux, but they work at different layers:
pci=nomsi: disables MSI / MSI-X to bypass interrupt compatibility issues.pcie_aspm=off: disables PCIe ASPM to avoid wake failures after link power saving.
For JMB585, ASM1166, NAS systems, mini PCs, and cheap PCIe cards, these two parameters often help. The safer approach is to inspect dmesg, decide whether the problem looks like interrupts or link power management, then choose one or both.
They are troubleshooting tools, not a replacement for good hardware. If the system becomes stable after adding them, the problem is likely in interrupt compatibility or PCIe power management. If disks still drop, continue checking power, cables, cooling, disk health, and the expansion card itself.