1

I just bought a 6TB external seagate HDD (STKP6000400) to use for storing media, but I have noticed it is spinning at full speed, all the time. Even after leaving the PC idle overnight the next morning it is still spinning.

I've searched for this issue and tried all the common fixes I can see such as repsonses here: How can I control HDD spin down time?

If I run hdparm -I on the disk this is the output:

ATA device, with non-removable media
Standards:
        Likely used: 1
Configuration:
        Logical         max     current
        cylinders       0       0
        heads           0       0
        sectors/track   0       0
        --
        Logical/Physical Sector size:           512 bytes
        device size with M = 1024*1024:           0 MBytes
        device size with M = 1000*1000:           0 MBytes
        cache/buffer size  = unknown
Capabilities:
        IORDY not likely
        Cannot perform double-word IO
        R/W multiple sector transfer: not supported
        DMA: not supported
        PIO: pio0

I can see it doesn't even know the device size so it seems something is not right?

Trying to set the sleep timer with hdparm -S gives the response:

/dev/sdb:
 setting standby to 10 (50 seconds)
SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

In the disk utility I cannot choose "Standby Now" or try to configure drive settings as these options are disabled: enter image description here

Even if I unmount the drive and leave it for a while it never spins down. It is formatted as NTFS if that matters.

I am new to Ubuntu/Linux so I may be doing something very basically wrong, any help is appreciated.

QTom
  • 153

3 Answers3

1

I was able to get the behaviour I wanted using hd-idle: https://github.com/adelolmo/hd-idle

I just installed via the precompiled amd64.deb binary and configured /etc/default/hd-idle and set launch options to -i 0 -a sdb -i 600 to ensure it's only active for the drive I wanted (sdb). Running the commands systemctl start hd-idle and systemctl enable hd-idle seems to get the behaviour to work correctly and it persists after reboot.

I'm still not sure why I have to brute force it but this seems to be working as I wanted, the drive spins down after the configured time (I'm using the default 10 minutes) and it spins back up if something attempts to access the files on it.

QTom
  • 153
1

As Alexei Shcherbakov notes, it's possible to use hdparm to force a spin down. Windows is probably calling an equivalant API when its power settings are configured for energy savings.

I have not found a definitve list of which drives use which settings for Seagate's PowerChoice (energy-saving) system. My IronWolf drives arrived from the factory with these disabled.

According to Seagate, the power savings and recovery time on a Constellation SAS 2.5-inch hard drive are:

Power (W) Power Savings (%) Recovery time (sec)
Idle 2.82 0 0
Idle_A 2.82 0 0
Idle_B 2.18 23 0.5
Idle_C 1.82 35 1
Standby_Z 1.89 54 8

The modes explained:

Idle_A disables most of the servo system, reduces processor and channel power consumption and keeps discs rotating at full speed

Idle_B is the same as A but the heads are unloaded to drive ramp

Idle_C/Standby_Y (SAS Only) is the same as Idle_B but the drive speed is reduced to a lower RPM

Standby_Z has the heads are unloaded to drive ramp, and the drive motor is spun down. The drive will still respond to non-media access host commands.

To set the timeout for when these states are invoked, follow Spinning down Seagate Hard Drives in Ubuntu 20.04 by André Jacobs:

  1. Install Seagate's openSeaChest
  2. Run openSeaChest_PowerControl -d /dev/___ --showEPCSettings to view the current settings (where ___ is replaced with the drive such as sda or sdb):
==========================================================================================
 openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2025 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_PowerControl Version: 3.7.0 X86_64
 Build Date: Jun  9 2025
 Today: 20250609T063139 User: root
==========================================================================================

/dev/sg0 - ST8000VN004-00 - WWZABCDE - SC60 - 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 42 Y Y Standby Z 0 9000 9000 120 Y Y

  • Note that on this drive, the Idle C and Standby Z timers are not enabled, and have no time defined
  1. Run openSeaChest_PowerControl -d /dev/___ --idle_c 600000 --standby_z 1800000 to adjust the timer values: the times are specified in milliseconds so 600000 is 10 minutes and 1800000 is 30 minutes

If the drives still aren't spinning down after changing the above settings it probably means a process is writing to them before the timeout occurs. As noted in the aforementioned blog post some possibilities include:

  • fsck
  • smartd

To determine which processes are accessing the drive:

  1. Install fatrace: sudo apt install fatrace
  2. cd into a directory that is mounted to the drive
    • lsblk -f can be used to list filesystems mounted to block devices
  3. Run fatrace --current-mount --timestamp
  4. For long-term logging try: fatrace --current-mount --timestamp --seconds=86400 --output=~/fatrace.log & which will run the command in the background for 24 hours and output all accesses to a log file in your home directory. Note: make sure to output the log file to a different physical drive than the command is monitoring to avoid infinite loops
0

I have exactly same problem in Linux with Seagate HDD (On Windows it goes to stand-by automatically) I use this command to put drive to stand by when it is not needed

hdparm -y /dev/sda

But behaivor differs with Windows - LED is on, while in Windows LED is off