Raspberry Pi 5 + Argon V5 + NVMe + Home Assistant: troubleshooting NVMe I/O errors and a stable workaround
I recently spent quite a bit of time debugging a Raspberry Pi 5 setup using an Argon V5 case, NVMe storage, Zigbee, and Home Assistant.
The final result is stable, but the path there exposed a few useful failure markers that may help anyone running into similar issues.
Hardware / setup
- Raspberry Pi 5
- Official Raspberry Pi 27 W USB-C PSU
- Argon V5 case with NVMe support and Zigbee module
- Kingston NV3 1 TB NVMe (
SNV3S1000G) - Home Assistant OS 18.2
- Home Assistant Core 2026.8.0
The NVMe was initially flashed directly with HAOS using an external USB NVMe enclosure.
Initial symptoms
HAOS would sometimes boot, sometimes fail during boot, and sometimes run briefly before storage errors started appearing.
Typical kernel errors included:
Buffer I/O error on dev nvme0n1p5
nvme0n1: I/O Cmd(0x1) ... I/O Error
followed by large amounts of:
could not locate request for tag 0xffff
Once the NVMe errors started, filesystem errors followed naturally:
EXT4-fs error (device nvme0n1p8):
__ext4_find_entry:... reading directory lblock 0
and on HAOS system partitions:
erofs (device nvme0n1p5): readahead error ...
Eventually even shutdown could fail because HAOS was no longer able to read some of its own files.
At first this looked like:
- bad NVMe
- bad PCIe ribbon cable/contact
- insufficient PSU
- filesystem corruption
- PCIe Gen 3 instability
- or an HAOS-specific issue
1. Check the physical PCIe connection
The Argon PCIe ribbon cable is easy to insert slightly incorrectly while still looking mechanically secure.
I removed and reseated the ribbon carefully.
This is worth doing before anything else, but in my case the HAOS errors remained.
2. Boot Raspberry Pi OS from microSD
I installed Raspberry Pi OS Lite 64-bit on a microSD and booted from it while leaving the NVMe connected.
This gave me a known-good Linux environment independent of HAOS.
First checks:
lsblk -o NAME,SIZE,MODEL,FSTYPE,MOUNTPOINTS
The NVMe was detected correctly:
KINGSTON SNV3S1000G
Then:
dmesg | grep -Ei 'nvme|pcie|i/o error|timeout|reset'
No NVMe errors appeared.
3. Update the Raspberry Pi EEPROM / bootloader
The Pi bootloader was slightly behind:
CURRENT: 11 May 2026
LATEST: 26 May 2026
I updated it with:
sudo rpi-eeprom-update -a
sudo reboot
After reboot:
sudo rpi-eeprom-update
showed:
BOOTLOADER: up to date
CURRENT: Tue 26 May 2026
LATEST: Tue 26 May 2026
4. Verify PCIe link speed
I wanted to rule out a forced PCIe Gen 3 configuration.
On Raspberry Pi OS:
grep -nE 'pcie|pciex1' /boot/firmware/config.txt
No Gen 3 override was present.
Then:
sudo lspci -vv -s 0001:01:00.0 | grep -E 'LnkCap|LnkSta'
Result:
LnkCap: Speed 16GT/s, Width x4
LnkSta: Speed 5 GT/s (downgraded), Width x1 (downgraded)
So the link was operating at:
PCIe Gen 2 x1
which is exactly what I wanted for stability testing.
The HAOS boot partition also contained no pciex1_gen=3 setting. It only had ASPM disabled:
pcie_aspm=off
dtparam=pciex1_aspm=off
5. Stress-test the NVMe under Raspberry Pi OS
This was the key comparison.
With the NVMe unmounted:
sudo dd if=/dev/nvme0n1 of=/dev/null bs=16M status=progress
The disk sustained roughly:
~472 MB/s
for tens of GB, then well beyond 100 GB, with:
sudo dmesg -w
showing no:
I/O error
timeout
reset controller
could not locate request for tag
PCIe Bus Error
This strongly suggested that:
- the SSD itself was functional
- the PCIe link could sustain heavy reads
- the ribbon cable was at least capable of stable operation
- the PSU was not obviously the problem
6. Repair filesystem damage left by the previous crashes
The HAOS partitions had suffered from unclean shutdowns and I/O failures.
For example, mounting the HAOS FAT boot partition showed:
FAT-fs (nvme0n1p1):
Volume was not properly unmounted.
Some data may be corrupt.
Please run fsck.
The writable HAOS partitions were:
nvme0n1p1—hassos-boot, VFATnvme0n1p7—hassos-overlay, ext4nvme0n1p8— HA data, ext4
I checked them from Raspberry Pi OS.
Boot partition:
sudo fsck.fat -a /dev/nvme0n1p1
This automatically removed the dirty bit.
Overlay:
sudo fsck.ext4 -f /dev/nvme0n1p7
No errors.
Data partition:
sudo fsck.ext4 -f /dev/nvme0n1p8
This initially found and fixed two:
free blocks count wrong
errors.
A second fsck completed cleanly.
I did not try to repair the EROFS partitions, since those are read-only HAOS system images and the EROFS messages were a consequence of lower-level NVMe read failures.
7. Re-test HAOS
After:
- carefully reseating the PCIe ribbon
- updating the EEPROM
- confirming PCIe Gen 2 x1
- stress-testing the SSD successfully under Raspberry Pi OS
- repairing the writable HAOS filesystems
I booted HAOS 18.2 again without touching the hardware.
HAOS reached the console, but shortly afterwards the same errors returned:
could not locate request for tag 0xffff
followed by:
nvme0n1: I/O Cmd(...) ... I/O Error
and then EXT4 / EROFS failures.
At that point I stopped treating this as a normal SSD or cable failure.
The important A/B comparison was:
Same Raspberry Pi
Same Argon board
Same ribbon cable
Same Kingston NV3
Same PCIe Gen 2 x1 link
Raspberry Pi OS:
sustained NVMe reads at ~472 MB/s, no kernel errors
HAOS 18.2:
NVMe I/O failures shortly after boot
8. Final workaround: Raspberry Pi OS + Docker + Home Assistant Container
Instead of continuing to fight HAOS, I decided to keep Raspberry Pi OS Lite on the microSD and use the NVMe as application/data storage.
I wiped the HAOS partition layout and created one ext4 partition:
sudo wipefs -a /dev/nvme0n1
sudo parted /dev/nvme0n1 --script mklabel gpt
sudo parted /dev/nvme0n1 --script mkpart primary ext4 0% 100%
sudo mkfs.ext4 -L data /dev/nvme0n1p1
Mounted it under:
/srv
and added it to /etc/fstab using its UUID.
For example:
UUID=$(blkid -s UUID -o value /dev/nvme0n1p1) \
&& echo "UUID=$UUID /srv ext4 defaults,noatime 0 2" \
| sudo tee -a /etc/fstab
Then I installed Docker Engine and configured:
{
"data-root": "/srv/docker"
}
in:
/etc/docker/daemon.json
Home Assistant Container now runs with its config stored on the NVMe.
Example Compose configuration:
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:stable
volumes:
- /srv/homeassistant/config:/config
- /etc/localtime:/etc/localtime:ro
- /run/dbus:/run/dbus:ro
restart: unless-stopped
privileged: true
network_mode: host
This has been stable for hours with Home Assistant actively reading and writing to the NVMe.
A current kernel check shows no NVMe I/O failures:
dmesg | grep -Ei 'nvme|i/o error|timeout|reset|tag 0xffff|ext4'
9. Argon V5 USB / Zigbee gotcha
There was another completely separate issue worth documenting.
Initially:
- the Raspberry Pi’s native USB ports worked
- the USB ports exposed by the Argon board did not
- the Argon Zigbee coordinator did not appear
/dev/serial/by-id/did not exist
Installing the official Argon V5 scripts fixed this:
curl https://download.argon40.com/argon1v5.sh | bash
sudo reboot
After installation, /boot/firmware/config.txt contained:
otg_mode=1
dtoverlay=dwc2,dr_mode=host
usb_max_current_enable=1
After reboot:
lsusb
showed:
1a86:8091 QinHeng Electronics USB HUB
10c4:ea60 Silicon Labs CP210x UART Bridge
and:
ls -l /dev/serial/by-id/
returned:
usb-Silicon_Labs_CP2102N_USB_to_UART_Bridge_Controller_... -> ../../ttyUSB0
So if the Argon USB ports and Zigbee module appear completely dead under Raspberry Pi OS, do not immediately assume a hardware fault: the Argon setup scripts may simply not have been installed yet.
Current result
The final setup is:
Raspberry Pi 5
├── microSD
│ └── Raspberry Pi OS Lite
│
├── Argon V5
│ ├── PCIe NVMe
│ ├── USB hub
│ └── Zigbee coordinator
│
└── NVMe 1 TB mounted at /srv
├── Docker data
├── Home Assistant config/data
└── future NAS / services / backups
Home Assistant Container is currently controlling:
- Zigbee lights via ZHA
- Somfy / TaHoma shutters
- Viessmann ViCare boiler
- MCZ pellet stove through HACS
- temperature sensors and other automation inputs
The system is stable and the NVMe continues to behave normally under Raspberry Pi OS.
Main takeaway
If you see this combination on Raspberry Pi 5 + NVMe:
could not locate request for tag 0xffff
nvme0n1: I/O Cmd(...) ... I/O Error
EXT4-fs errors
EROFS readahead errors
do not immediately conclude that the SSD is dead.
Booting Raspberry Pi OS from microSD and stress-testing the same NVMe is a very useful discriminator.
If the NVMe survives sustained reads under Pi OS but consistently fails under HAOS with the same physical setup, testing a Raspberry Pi OS + Home Assistant Container architecture may save a lot of time.
It also gives you a regular Linux host, which can be useful if you want to run other Docker services, NAS storage, reverse proxies, VPNs, monitoring, or small self-hosted applications alongside Home Assistant.