Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[7.1.2] SSD Trim Being Added Regardless of Settings

  • Solved
  • Minor

I am using an old HP Blade Server to host one of my UnRaid servers, however there are two drives in a pool which are enterprise SSD's that do not support TRIM. (Mostly due to the HBA in IT Mode not supporting Trim). I have Trim disabled on the pool "Autotrim off" and disabled in the scheduler.

image.png

image.png

When running grep on the btrfs pool, I can confirm "discard=async" is provided in the mount point.

root@DreamRuby:~# mount | grep btrfs
/dev/sdb1 on /mnt/data type btrfs (rw,noatime,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)


Because of this my console is spammed with a bunch of trim errors that are causing an I/O issue with my system:

May 28 19:30:30 DreamRuby kernel: I/O error, dev sdf, sector 2365448 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#159 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=DRIVER_OK cmd_age=0s
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#159 Sense Key : 0xb [current] 
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#159 ASC=0x4b ASCQ=0x6 
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#159 CDB: opcode=0x42 42 00 00 00 00 00 00 00 18 00
May 28 19:30:32 DreamRuby kernel: I/O error, dev sdf, sector 132780032 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#165 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=DRIVER_OK cmd_age=0s
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#165 Sense Key : 0xb [current] 
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#165 ASC=0x4b ASCQ=0x6 
May 28 19:30:32 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#165 CDB: opcode=0x42 42 00 00 00 00 00 00 00 18 00
May 28 19:30:32 DreamRuby kernel: I/O error, dev sdf, sector 134352896 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#171 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=DRIVER_OK cmd_age=0s
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#171 Sense Key : 0xb [current] 
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#171 ASC=0x4b ASCQ=0x6 
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#171 CDB: opcode=0x42 42 00 00 00 00 00 00 00 18 00
May 28 19:30:33 DreamRuby kernel: I/O error, dev sdf, sector 136450048 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#177 UNKNOWN(0x2003) Result: hostbyte=0x0b driverbyte=DRIVER_OK cmd_age=0s
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#177 Sense Key : 0xb [current] 
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#177 ASC=0x4b ASCQ=0x6 
May 28 19:30:33 DreamRuby kernel: sd 1:0:5:0: [sdf] tag#177 CDB: opcode=0x42 42 00 00 00 00 00 00 00 18 00
May 28 19:30:33 DreamRuby kernel: I/O error, dev sdf, sector 138547200 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0


To suppress these messages, once the system is booted, I have to run the following command after stopping Docker:

umount /mnt/data
mount -o noatime,ssd,nodiscard,space_cache=v2,subvolid=5,subvol=/ UUID=88ed66b2-0ecd-4092-87e2-1cfd597d8f30 /mnt/data

This suppresses the kernel messages and prevents my I/O from locking up due to hundreds of messages being fired in a row; These enterprise drives do not need to be trimmed as per the manufacturer specifications as they are designed for write intensive environments and have robust internal garbage collection and over-provisioning; In most cases, a lot of environments choose to disable trimming due to compatibility issues anyways.

As a work around, I've modified my /boot/config/go file to do the following on boot:

#!/bin/bash
# Start the Management Utility
/usr/local/sbin/emhttp &

# Wait for array to mount completely
echo "Waiting for array to start..."
sleep 20
while ! mountpoint -q /mnt/data; do
  sleep 1
done

# Stop Docker (if auto-start triggered it early)
echo "Stopping Docker..."
/etc/rc.d/rc.docker stop

# Remount /mnt/data without discard=async
echo "Remounting /mnt/data without discard..."
umount /mnt/data
mount -o noatime,ssd,nodiscard,space_cache=v2,subvolid=5,subvol=/ UUID=88ed66b2-0ecd-4092-87e2-1cfd597d8f30 /mnt/data

# Start Docker again
echo "Starting Docker..."
/etc/rc.d/rc.docker start

This ensures my docker containers are stopped before the umount/mount are triggered, then starts docker after. I am targeting the pool UUID as this does not require me to define a /dev/sd*1 endpoint which will likely change between boots.

Hoping we can get a fix in place that allows the user to disable trim and prevent the discard flags being passed to the mount.

Attached Diagnostics as requested.

dreamruby-diagnostics-20250528-1948.zip

Unraid 7.1.2

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.