Truenas SCALE Seagate Exos X16 Load Cycling, Heads Parking. Change of Idle_b and Idle_c values

Hello,
Like many users of Seagate Exos drives, I have found that they park their heads very aggressively, approximately every 2 minutes. Due to this behavior, the Load Cycle Count increases rapidly.
For example, one of my drives:

ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
193 Load_Cycle_Count 0x0032 098 098 000 Old_age Always - 5659
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 337

I have already found many topics about this issue, but all of them rely on using camcontrol (which is not available on SCALE) or SeaChest/OpenSeaChest.
The official SeaChest tool from Seagate is not compatible with SCALE.
OpenSeaChest needs to be compiled for BSD, but SCALE does not include the tools required to compile it.

Has anyone found a tool that can use EPC to change the Idle_b and Idle_c values for Exos drives?

SeaChest works for me on SCALE – https://www.seagate.com/content/dam/seagate/migrated-assets/old-support-files/seachest/SeaChestUtilities.zip

In the archive, look for /SeaChestUtilities/Linux/Non-RAID/x_86_64

Obligatory word of warning - mucking with low-level drive settings like this can cause issues. If you do it on a live pool, I’d back up your data first.

1 Like

Agree, I have used SeaChest with good results for this same issue on scale plus drive cache.

Thanks, guys! I spent almost half the day solving this.

Here’s a quick tutorial for Linux newbies (like me :slight_smile: ):

  1. Download the Utilities:
    Download the SeaChest utilities from jro post

  2. Extract the Binaries:
    Extract all binaries from:
    /SeaChestUtilities/Linux/Non-RAID/x_86_64/

  3. Copy them to your network share.

  4. Log in to Your TrueNAS Instance:

  • Navigate to System > Shell in the TrueNAS web interface.
  1. Switch to the Root User:
    Run the following command to switch to the root user:
    sudo -i

  2. Open Midnight Commander:
    mc
    Navigate to your network share where you copied the binaries. Copy them to /root/ and then close Midnight Commander.

  3. Navigate to the Folder with Binaries:
    Navigate to the folder where you copied the binaries, e.g., /root/exos_tools/.

  4. Change premissions and make binaries executable:
    chmod 777 ./*

  5. Scan for Device Handles:
    Run this command to obtain device handles (e.g., /dev/sg2):
    ./SeaChest_Basics --scan

  6. Check Idle State Timers:
    Use this command to check the idle state timers:
    ./SeaChest_PowerControl -d /dev/sg2 --showEPCSettings

For example mine:
/dev/sg2 - OOS14000G - 00023Y4K - OOS1 - ATA

===EPC Settings===
* = timer is enabled
C column = Changeable
S column = Savable
All times are in 100 milliseconds

Name Current Timer Default Timer Saved Timer Recovery Time C S
Idle A *1 *1 *1 1 Y Y
Idle B *1200 *1200 *1200 4 Y Y
Idle C 0 6000 6000 30 Y Y
Standby Z 0 9000 9000 210 Y Y

Explanation of Idle States:

Power Condition Name Description Manufacturer Default Timer Values
Idle_a Reduced electronics 100ms
Idle_b Heads unloaded. Disks spinning at full RPM 2 min
Idle_c Heads unloaded. Disks spinning at reduced RPM 4 min
Standby_z Heads unloaded. Motor stopped (disks not spinning) 15 min
  1. Set a Reasonable Idle_B Timer:
    For example, set Idle_b to 6 minutes:
    ./SeaChest_PowerControl -d /dev/sg2 --idle_b 360000

  2. Verify Changes:
    Use this command to verify the changes were applied:
    ./SeaChest_PowerControl -d /dev/sg2 --showEPCSettings

  3. Repeat the above steps for all drives you want to modify.

  4. Clean Up:
    After making the changes, open Midnight Commander and delete the folder containing the binaries to clean up the system.

I couldn’t include the original link or credit the authors due to publication restrictions :frowning: sorry . However, I hope this guide helps others facing the same issue!