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.

DiskSpeed, hdd/ssd benchmarking (unRAID 6+), version 2.10.10

Featured Replies

  • Author

Version 2.10.10: USB & SSD Pool Benchmarking

  • Catch rare error fetching platter info

  • Allow benchmarking of SSD pools

  • Allow benchmarking of USB devices

  • Allow editing of USB devices

  • Correct scaling of left side axis of SSD benchmarks

Version 3 is taking awhile due to life stuff so I added into the version 2 branch the ability to benchmark SSD pools and USB devices.

On fresh installs or reset, it'll try to identify images for any USB drives. You can now edit the image on existing USB devices.

When benchmarking pools, select the first drive in the pool to see the benchmark button. If you click the "Benchmark" button on the home page, you can set the checkbox for the first drive in a pool but not for any other drives in the pool.

Benchmark of three Samsung 990 EVO nvme's on the motherboard in a ZFS ZRAID1 pool with the default 4 GB test file size

image.png

With ZFS pools, try a larger test file to see if it steadies out the benchmark.

image.png

Edited by jbartlett

  • jbartlett changed the title to DiskSpeed, hdd/ssd benchmarking (unRAID 6+), version 2.10.10
  • 2 weeks later...
  • Replies 1.1k
  • Views 409.9k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • jbartlett
    jbartlett

    When I tested this utility against my production server, I noticed that I had a drive going wonky on me. I couldn't even test it at first because it kept tripping the SpeedGap detection in which the m

  • jbartlett
    jbartlett

    I'm taking this application out of BETA status. Version 2.0 has been released.   Release 2.0 Added progress bars to the drive benchmarking Rewrote the Controller Benchmark to be

  • Right Proper SSD benchmarking has been added. To perform a benchmark, a configurable number of test files of a given size (defaults to 10 2GB files) are written to the drive and then read back. The ov

Posted Images

I just installed this docker, but when I click on Benchmark Drives or if I try to benchmark a single drive I’m receiving the error below. I tried removing the docker, the data folder and reinstalling, but that didn’t resolve the issue. I forced the docker to use 2.10.9 and I am able to benchmark the drives now, so this looks like an issue with 2.10.10.

Lucee 6.1.1.75-SNAPSHOT Error (expression)
Message	key [ISSSD] doesn't exist
Stacktrace	The Error Occurred in
/var/www/Benchmark.cfm: line 106
104:       <CFSET PortNo=Ref.DriveID[DriveID].PortNo>
105:       <!--- Check to see if the drive is the first in the pool (no number at end of unraid slot src), and leave in if so --->
106:       <CFIF HW[Key].Ports[PortNo].IsSSD EQ 1 AND IsNumeric(Right(HW[Key].Ports[PortNo].UnraidSlotSrc,1))>
107:          <CFSET PoolSSDChildren=ListAppend(PoolSSDChildren,DriveID)>
108:       </CFIF>

Java Stacktrace	lucee.runtime.exp.ExpressionException: key [ISSSD] doesn't exist
  at lucee.runtime.type.util.StructSupport.invalidKey(StructSupport.java:70)
  at lucee.runtime.type.StructImpl.get(StructImpl.java:179)
  at lucee.runtime.util.VariableUtilImpl.get(VariableUtilImpl.java:279)
  at lucee.runtime.PageContextImpl.us(PageContextImpl.java:1253)
  at benchmark_cfm$cf.call(/Benchmark.cfm:106)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1046)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:940)
  at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:63)
  at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
  at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2725)
  at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2712)
  at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2683)
  at lucee.runtime.engine.Request.exe(Request.java:45)
  at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1160)
  at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1117)
  at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
  at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:42)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
  at java.base/java.lang.Thread.run(Unknown Source)

Edited by bisk

12 hours ago, bisk said:

I just installed this docker, but when I click on Benchmark Drives or if I try to benchmark a single drive I’m receiving the error below. I tried removing the docker, the data folder and reinstalling, but that didn’t resolve the issue. I forced the docker to use 2.10.9 and I am able to benchmark the drives now, so this looks like an issue with 2.10.10.

I'm having the same exact issue with 2.10.10.

How did you force Docker to use 2.10.9?

1 hour ago, classified said:

I'm having the same exact issue with 2.10.10.

How did you force Docker to use 2.10.9?

In the Docker configuration, change the Repository setting from jbartlett777/diskspeed to jbartlett777/diskspeed:2.10.9

2 hours ago, bisk said:

In the Docker configuration, change the Repository setting from jbartlett777/diskspeed to jbartlett777/diskspeed:2.10.9

Got it, thank you, that worked.

  • Author
On 2/3/2026 at 7:44 PM, bisk said:

I just installed this docker, but when I click on Benchmark Drives or if I try to benchmark a single drive I’m receiving the error below. I tried removing the docker, the data folder and reinstalling, but that didn’t resolve the issue. I forced the docker to use 2.10.9 and I am able to benchmark the drives now, so this looks like an issue with 2.10.10.

First, thank you for reporting this issue. I can't fix issues I don't know about. I'm not able to duplicate with my two setups but I added code to try to ensure the IsSSD flag exists. Please remove the version off the repo to download 2.10.10.1.

Issues fixed:

  • Catch rare spin up error

  • Check for missing "IsSSD" flag during benchmarking

  • Abort benchmarks on drives that work enough to be detected but fails to read

Hi John

This app looks to be great, however I cant get it to run on my server. (

[1000:00c4] 01:00.0 Serial Attached SCSI controller: Broadcom / LSI SAS3224 PCI-Express Fusion-MPT SAS-3 (rev 01)

[6:0:0:0] disk ATA WDC WD201KFGX-68 0A83 /dev/sdc 20.0TB

[6:0:1:0] disk ATA ST18000NM000J-2T SN04 /dev/sdd 18.0TB

[6:0:2:0] disk ATA ST10000DM0004-2G DN01 /dev/sde 10.0TB

[6:0:3:0] disk ATA ST8000DM005-2EH1 DN02 /dev/sdf 8.00TB

[6:0:4:0] disk ATA ST16000NM001G-2K SN03 /dev/sdg 16.0TB

[6:0:5:0] disk ATA ST8000DM004-2CX1 0001 /dev/sdh 8.00TB

[6:0:6:0] disk ATA ST18000NM000J-2T SCA1 /dev/sdi 18.0TB

[6:0:7:0] disk ATA WDC WD201KFGX-68 0A83 /dev/sdj 20.0TB

[6:0:8:0] disk ATA M4-CT256M4SSD2 070H /dev/sdk 256GB

[6:0:9:0] disk ATA ST8000DM005-2EH1 DN04 /dev/sdl 8.00TB

I have attached the debug log file, in the hopes you can see something obvious what with my controller it does not like - it is a 16 port card also known as SAS 9305-16i


DiskSpeed - Disk Diagnostics & Reporting tool
Version: 2.10.10.1

Scanning Hardware
16:13:17 Spinning up hard drives
16:13:17 Scanning system storage
16:13:17 Scanning USB Bus
16:13:17 Scanning hard drives

DiskSpeed - Disk Diagnostics & Reporting tool

Version: 2.10.10.1

Scanning Hardware

16:13:17 Spinning up hard drives

16:13:17 Scanning system storage

16:13:17 Scanning USB Bus

16:13:17 Scanning hard drives

Lucee 6.1.1.75-SNAPSHOT Error (expression)

Message can not set Element at position [0]

Detail Index -1 out of bounds for length 2

Stacktrace The Error Occurred in

/var/www/ScanControllers.cfm: line 818

816: <CFLOOP index="i" from="1" to="#ArrayLen(HW[Key].Ports)#">

817: <CFFILE action="append" file="#PersistDir#/findports.txt" output="Moving row [#i#] to row [#HW[Key].Ports[i].PortNo#]">

818: <CFSET NewPorts[HW[Key].Ports[i].PortNo]=Duplicate(HW[Key].Ports[i])>

819: </CFLOOP>

820: <!--- Replace --->

called from /var/www/ScanControllers.cfm: line 799

797: </CFLOOP>

798: </CFIF>

799: </CFLOOP>

800:

801: <!--- Assign drives to correct port number and fill in blanks --->

_20260211_161213.tar.gz

Edited by hwextreme

  • Author
On 2/11/2026 at 12:23 PM, hwextreme said:

This app looks to be great, however I cant get it to run on my server

From what I can tell so far, it may be related to a USB device that's detected as SDB with the description of "File-Stor Gadget". Do you have a phone or Quest or other USB device connected? If so, try disconnecting and restart the Docker app.

i can add an exclusion for this like i have for an empty card reader but want to verify the cause first.

Edited by jbartlett

Hey is there a timeframe when NVME's with ZFS Filesystem will be supported? Is it planned?

  • Author
9 hours ago, ApfelBirneKreis said:

Hey is there a timeframe when NVME's with ZFS Filesystem will be supported? Is it planned?

Do you mean with benchmarking? I've had some success with kicking off a Benchmark from the main page on version 2.10.10 and then manually selecting a much larger test file size.

On 2/13/2026 at 2:11 AM, jbartlett said:

From what I can tell so far, it may be related to a USB device that's detected as SDB with the description of "File-Stor Gadget". Do you have a phone or Quest or other USB device connected? If so, try disconnecting and restart the Docker app.

i can add an exclusion for this like i have for an empty card reader but want to verify the cause first.

Ok I found out that this was my Nano KVM, It was the mountable (Virtual U device) USB drive it can emulate. I disabled that and the app is now working. Thank you.
Probably safer to leave this disabled until I need it anyways )

  • Author
23 hours ago, hwextreme said:

Ok I found out that this was my Nano KVM, It was the mountable (Virtual U device) USB drive it can emulate. I disabled that and the app is now working. Thank you.
Probably safer to leave this disabled until I need it anyways )

I just ordered one to try to duplicate the issue. Need one for my main NAS box at any rate....

  • 1 month later...

Hello. I can test all HDD on my HBA but my SSDs will not test, they all say this and the FAQ doesn't link to anything. Can anyone help please?

Unable to benchmark for the following reason

* Docker volume mount not detected

You will need to restart the DiskSpeed docker after making changes to mounted drives for changes to take effect.

For more information how the benchmarks work, view the FAQ

  • 4 weeks later...

Somehow unable to enter the mangement UI.

Scanning Hardware
23:26:13 Spinning up hard drives
23:26:21 Scanning system storage
23:26:35 Scanning USB Bus
23:26:35 Scanning hard drives

Lucee 6.1.1.75-SNAPSHOT Error (expression)

Message

can not set Element at position [0]

Detail

Index -1 out of bounds for length 1

Stacktrace

The Error Occurred in
/var/www/ScanControllers.cfm: line 818

816:       <CFLOOP index="i" from="1" to="#ArrayLen(HW[Key].Ports)#">
817:          <CFFILE action="append" file="#PersistDir#/findports.txt" output="Moving row [#i#] to row [#HW[Key].Ports[i].PortNo#]">
818:          <CFSET NewPorts[HW[Key].Ports[i].PortNo]=Duplicate(HW[Key].Ports[i])>
819:       </CFLOOP>
820:       <!--- Replace --->

called from /var/www/ScanControllers.cfm: line 799

797:       </CFLOOP>
798:    </CFIF>
799: </CFLOOP>
800:
801: <!--- Assign drives to correct port number and fill in blanks --->

Java Stacktrace

lucee.runtime.exp.ExpressionException: can not set Element at position [0]
  at lucee.runtime.type.wrap.ListAsArray.setE(ListAsArray.java:268)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:413)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:418)
  at lucee.runtime.type.util.ArraySupport.set(ArraySupport.java:312)
  at lucee.runtime.util.VariableUtilImpl.set(VariableUtilImpl.java:433)
  at lucee.runtime.PageContextImpl.set(PageContextImpl.java:1724)
  at lucee.runtime.PageContextImpl.us(PageContextImpl.java:1291)
  at scancontrollers_cfm$cf.call_000077(/ScanControllers.cfm:818)
  at scancontrollers_cfm$cf.call(/ScanControllers.cfm:799)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1046)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:940)
  at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:63)
  at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
  at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2725)
  at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2712)
  at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2683)
  at lucee.runtime.engine.Request.exe(Request.java:45)
  at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1160)
  at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1117)
  at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
  at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:42)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
  at java.base/java.lang.Thread.run(Unknown Source)
 

Timestamp

4/15/26 11:26:36 PM PDT

  • 1 month later...
  • Author
On 4/15/2026 at 11:27 PM, StylishQuoter said:

Somehow unable to enter the mangement UI.

Scanning Hardware
23:26:13 Spinning up hard drives
23:26:21 Scanning system storage
23:26:35 Scanning USB Bus
23:26:35 Scanning hard drives

Lucee 6.1.1.75-SNAPSHOT Error (expression)

Message

can not set Element at position [0]

Detail

Index -1 out of bounds for length 1

Stacktrace

The Error Occurred in
/var/www/ScanControllers.cfm: line 818

called from /var/www/ScanControllers.cfm: line 799

Java Stacktrace

lucee.runtime.exp.ExpressionException: can not set Element at position [0]
  at lucee.runtime.type.wrap.ListAsArray.setE(ListAsArray.java:268)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:413)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:418)
  at lucee.runtime.type.util.ArraySupport.set(ArraySupport.java:312)
  at lucee.runtime.util.VariableUtilImpl.set(VariableUtilImpl.java:433)
  at lucee.runtime.PageContextImpl.set(PageContextImpl.java:1724)
  at lucee.runtime.PageContextImpl.us(PageContextImpl.java:1291)
  at scancontrollers_cfm$cf.call_000077(/ScanControllers.cfm:818)
  at scancontrollers_cfm$cf.call(/ScanControllers.cfm:799)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1046)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:940)
  at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:63)
  at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
  at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2725)
  at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2712)
  at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2683)
  at lucee.runtime.engine.Request.exe(Request.java:45)
  at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1160)
  at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1117)
  at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
  at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:42)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
  at java.base/java.lang.Thread.run(Unknown Source)
 

Timestamp

4/15/26 11:26:36 PM PDT

This is really odd. Historically, if the app server counts from one to zero, it just skips the loop entirely. I'll take a look....

Hello,

I'm getting the same issue. I'm on Unraid 7.3.1.

When I open the web UI I get the following error:


15:34:48 Scanning hard drives

Lucee 6.1.1.75-SNAPSHOT Error (expression)

Message

can not set Element at position [0]

Detail

Index -1 out of bounds for length 1

Stacktrace

The Error Occurred in
/var/www/ScanControllers.cfm: line 818

816:       <CFLOOP index="i" from="1" to="#ArrayLen(HW[Key].Ports)#">
817:          <CFFILE action="append" file="#PersistDir#/findports.txt" output="Moving row [#i#] to row [#HW[Key].Ports[i].PortNo#]">
818:          <CFSET NewPorts[HW[Key].Ports[i].PortNo]=Duplicate(HW[Key].Ports[i])>
819:       </CFLOOP>
820:       <!--- Replace --->

called from /var/www/ScanControllers.cfm: line 799

797:       </CFLOOP>
798:    </CFIF>
799: </CFLOOP>
800:
801: <!--- Assign drives to correct port number and fill in blanks --->

Java Stacktrace

lucee.runtime.exp.ExpressionException: can not set Element at position [0]
  at lucee.runtime.type.wrap.ListAsArray.setE(ListAsArray.java:268)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:413)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:418)
  at lucee.runtime.type.util.ArraySupport.set(ArraySupport.java:312)
  at lucee.runtime.util.VariableUtilImpl.set(VariableUtilImpl.java:433)
  at lucee.runtime.PageContextImpl.set(PageContextImpl.java:1724)
  at lucee.runtime.PageContextImpl.us(PageContextImpl.java:1291)
  at scancontrollers_cfm$cf.call_000077(/ScanControllers.cfm:818)
  at scancontrollers_cfm$cf.call(/ScanControllers.cfm:799)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1046)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:940)
  at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:63)
  at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
  at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2725)
  at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2712)
  at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2683)
  at lucee.runtime.engine.Request.exe(Request.java:45)
  at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1160)
  at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1117)
  at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
  at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:42)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
  at java.base/java.lang.Thread.run(Unknown Source)

  • 2 weeks later...

I get a similar error if I have a CH340 USB to Serial device plugged in, specifically this LCUS-1 USB Relay Module. The only way I can get DiskSpeed to run is with the device physically disconnected.

Error log

DiskSpeed - Disk Diagnostics & Reporting tool
Version: 2.10.10.1

Scanning Hardware
14:50:46 Spinning up hard drives
14:50:53 Scanning system storage
14:50:54 Scanning USB Bus
14:50:54 Scanning hard drives

Lucee 6.1.1.75-SNAPSHOT Error (expression)

Message

can not set Element at position [0]

Detail

Index -1 out of bounds for length 1

Stacktrace

The Error Occurred in
/var/www/ScanControllers.cfm: line 818

816:       <CFLOOP index="i" from="1" to="#ArrayLen(HW[Key].Ports)#">
817:          <CFFILE action="append" file="#PersistDir#/findports.txt" output="Moving row [#i#] to row [#HW[Key].Ports[i].PortNo#]">
818:          <CFSET NewPorts[HW[Key].Ports[i].PortNo]=Duplicate(HW[Key].Ports[i])>
819:       </CFLOOP>
820:       <!--- Replace --->

called from /var/www/ScanControllers.cfm: line 799

797:       </CFLOOP>
798:    </CFIF>
799: </CFLOOP>
800:
801: <!--- Assign drives to correct port number and fill in blanks --->

Java Stacktrace

lucee.runtime.exp.ExpressionException: can not set Element at position [0]
  at lucee.runtime.type.wrap.ListAsArray.setE(ListAsArray.java:268)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:413)
  at lucee.runtime.type.wrap.ListAsArray.set(ListAsArray.java:418)
  at lucee.runtime.type.util.ArraySupport.set(ArraySupport.java:312)
  at lucee.runtime.util.VariableUtilImpl.set(VariableUtilImpl.java:433)
  at lucee.runtime.PageContextImpl.set(PageContextImpl.java:1724)
  at lucee.runtime.PageContextImpl.us(PageContextImpl.java:1291)
  at scancontrollers_cfm$cf.call_000077(/ScanControllers.cfm:818)
  at scancontrollers_cfm$cf.call(/ScanControllers.cfm:799)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:1046)
  at lucee.runtime.PageContextImpl._doInclude(PageContextImpl.java:940)
  at lucee.runtime.listener.ClassicAppListener._onRequest(ClassicAppListener.java:63)
  at lucee.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:42)
  at lucee.runtime.PageContextImpl.execute(PageContextImpl.java:2725)
  at lucee.runtime.PageContextImpl._execute(PageContextImpl.java:2712)
  at lucee.runtime.PageContextImpl.executeCFML(PageContextImpl.java:2683)
  at lucee.runtime.engine.Request.exe(Request.java:45)
  at lucee.runtime.engine.CFMLEngineImpl._service(CFMLEngineImpl.java:1160)
  at lucee.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:1117)
  at lucee.loader.engine.CFMLEngineWrapper.serviceCFML(CFMLEngineWrapper.java:97)
  at lucee.loader.servlet.CFMLServlet.service(CFMLServlet.java:42)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:199)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:168)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
  at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
  at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:383)
  at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
  at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
  at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
  at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
  at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
  at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
  at java.base/java.lang.Thread.run(Unknown Source)
 

Timestamp

6/10/26 2:50:58 PM MDT

  • Author
On 6/10/2026 at 1:56 PM, rerror said:

I get a similar error if I have a CH340 USB to Serial device plugged in, specifically this LCUS-1 USB Relay Module. The only way I can get DiskSpeed to run is with the device physically disconnected.

I've ordered one of these, should be here a couple days. Hopefully I'll be able to duplicate.

  • Author

Attention:

If you are getting errors scanning hardware or submitting benchmarks, please update the DiskSpeed docker app, it should reflect version 2.10.10.3.

I updated the URL for the public site to strangejourney.net, removing the www prefix. I moved the domain to a new server and currently the www prefix is returning another one of my domains and as of this posting, it was quicker to update the Docker app than to figure out why the domains are serving incorrectly even though the config looks correct.

Database Errors

Moving from a Windows server to a Unix server and switching from MySQL to MariaDB also introduced forced lower case table names. I believe I caught them all but please let me know if you get any table not found errors.

Edited by jbartlett

  • 2 months later...
  • Author

Added the initial Backblaze statistics to the HDDB site.

https://strangejourney.net/hddb/BackblazeData.cfm

After loading the Backblaze smart data files, I was able to duplicate their results but discovered that they had excluded data from several models which was broken down in a dialog window that you can view for yourself if you click on the "[hear]" link on the site. The right graph shows the same stats including all drives they collected smart data from which appears that they don't exclude any.

image.png

I've also discovered that it seems some serial numbers have been repeated with newer drives, at least it appears that way with the smart data itself looking like it is from a new drive but using the same serial number as a much older drive. I plan on adding logic to treat the repeated serial numbers as a new drive but haven't done so yet.

The "Failure Rate by Brand" tab lists every drive model ever hosted by Backblaze with detailed information. One note about the average age of drives is that it's the difference between the first date the drive was reported on and the date it was removed - it doesn't yet take into consideration if a drive was pulled and then added back at a later date. I only found a few drives impacted but fractions count. I plan on adding a new column representing the average active days.

image.png

I plan on adding additional charts soon'ish detailing the data on each model showing it's activity and failure trends.

  • 2 weeks later...
  • Author

Updated the Backblaze data with 2026 Q2 data: https://strangejourney.net/hddb/BackblazeData.cfm

After reading one of the Backblaze articles talking about how certain brands have increased in reliability over the years, it got me thinking of a way to come up with a percentage reliability score for a given model taking into account that all drives become less reliable over time but having less impact to the overall score if a drive fails at 8 years vs 2 years. Gonna call it the "Age-Weighted Reliability Score (AWRS)".

The percentage of failures in the 1st year for a given model would count a full 100% towards the score but the drive percentage that fail in the 2nd year only counts 90% of that percentage and so on until drives that fail in the 9th year only counts 10% of the failure percentage and drives that last 10+ years before failing don't impact the score.

ChatGPT came up with this formula after I described the process.

image.pngN = total number of distinct drives in the fully observed population
Fi = number of drives that failed during their i-th year
Wi = (11- i) / 10 = weighting factor for that year.

hypothetical scoring of 3 models of 10,000 drives

Model

History

Failures

Raw failure rate

AWRS

A

2 years

1,000 in year 1

10%

90%

B

10 years

1,000 in year 8

10%

97%

C

5 years

500 in year 2

5%

95.5%

Then a AWRS percentage could be computed for a brand and then brands could be examined to see how their AWRS changes over time to account for different manufacturing processes / technologies. This would also allow different brands to be compared over time.

Demo chart of AWRS scores over different time periods

image.png

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

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.