I recently bought SAS disks for my homelab and I discovered that they are not supported by smartmontools. While I am not concerned too much with their remaining life I would like to spin them down when not used because they can be noisy. I would have used normal tools such as hd-idle, hdparm but they also do not work with these disks.

The solution is to use the vendor’s tools which you can find at openSeaChest.

The disks are also exposed by the kernel twice; first as storage using the /dev/sd? prefix and once more as /dev/sg?. The vendor tools take the second device name. You can list the available devices using the Basics tool.

[root@professor openseachest]# ./openSeaChest_Basics --scan -F scsi
==========================================================================================
 openSeaChest_Basics - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2022 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_Basics Version: 3.3.1-3_2_1 X86_64
 Build Date: Jul 26 2022
 Today: Sun Nov 20 10:59:46 2022	User: root
==========================================================================================
Vendor   Handle       Model Number            Serial Number          FwRev     
SEAGATE  /dev/sg1     ST4000NM0025            ZC15SBHY               N003      
SEAGATE  /dev/sg2     ST4000NM0025            ZC15BXVZ               N003      
SEAGATE  /dev/sg3     ST4000NM0025            ZC15XLCB               N003      
SEAGATE  /dev/sg4     ST4000NM0025            ZC15XLGA               N003      

PowerControl

You can configure the disks’ power control values using the openSeaChest_PowerControl binary. Let’s see what the Extended Power Control makes available.

[root@professor openseachest]# ./openSeaChest_PowerControl -d /dev/sg1 --showEPCSettings
==========================================================================================
 openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2022 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_PowerControl Version: 3.1.10-3_2_1 X86_64
 Build Date: Jul 26 2022
 Today: Sun Nov 20 10:53:25 2022	User: root
==========================================================================================

/dev/sg1 - ST4000NM0025 - ZC15SBHY - N003 - SCSI

===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            70            Y N
Idle B     *1200         *1200         *1200         310           Y N
Idle C      6000          6000          6000         7000          Y N
Standby Y   6000          6000          6000         7000          N N
Standby Z   9000          9000          9000         15000         N N

EPC is a proprietary implemantation of the TP10 Approved Standard and is described in this white paper from Seagate.

EPC describes more power states available to the disk and allow us to change the power level interactively and automatically. The power states described are for my Exos 7E8 are the following (ordered from more power to less power).

Idle A

This is the first power level after active, no RPM reduction means it’s useless for my use case.

Idle B

This is the second power level after active, no RPM reduction means it’s useless for my use case.

Idle C (AKA Standby Y)

This is the third power level after active. The drive speed is reduced to a lower RPM which is exactly my use case.

Standby Z

This it the fourth power level after active. The drive motor is spun down.

Power transition

The immediate solution is to use the PowerControl tool to transition the disks to the idle_c power mode.

[root@professor openseachest]# ./openSeaChest_PowerControl -d /dev/sg1 -F scsi --transitionPower idle_c
==========================================================================================
 openSeaChest_PowerControl - openSeaChest drive utilities - NVMe Enabled
 Copyright (c) 2014-2022 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
 openSeaChest_PowerControl Version: 3.1.10-3_2_1 X86_64
 Build Date: Jul 26 2022
 Today: Tue Nov 22 10:12:17 2022	User: root
==========================================================================================

/dev/sg4 - ST4000NM0025 -  - N003 - SCSI

Power Mode Transition Successful.
Please give device a few seconds to transition.

Hint:Use --checkPowerMode option to check the new Power Mode.

After issuing the command to all disks the noise is reduced to a minimum and the disks are still available in a reasonable time.

Timers

Eventually the long term solution is to setup the disks to transition to the idle_c state using a timer. This will make sure that if they are not used the transition will happen automatically.

[root@professor openseachest]# ./openSeaChest_PowerControl -d /dev/sg1 -F scsi --idle_c enable

You can also set a timer value by specifying it in place of enable

[root@professor openseachest]# ./openSeaChest_PowerControl -d /dev/sg1 -F scsi --idle_c 12000

The timer unit is 100 milliseconds so the value 12000 means 20 minutes. Unfortunately for me the disk comes with default values from the factory which are also the minimum values. If we take a look at the table describing the disks Extended Power Control we can see that these minimum value for the idle_c transition is 6000 which means 10 minutes.

Name       Current Timer Default Timer Saved Timer   Recovery Time C S
Idle A     *1            *1            *1            70            Y N
Idle B     *1200         *1200         *1200         310           Y N
Idle C      6000          6000          6000         7000          Y N
Standby Y   6000          6000          6000         7000          N N
Standby Z   9000          9000          9000         15000         N N

As we cannot reduce this timer value then the last thing left to do is enabling it. The table report enabled timers with a * in front of their value so next time we show the table there will be a * in front of our Current Timer and Saved Timer columns’ value.

The last two columns in the table describe which timer values can be changed and saved. On my drives I can only change the timer values for the transitions to idle_a, idle_b and idle_c.

Energy saving

If you have taken a peek at the Seagate white paper I linked you may have noticed the title: “Reducing Storage Energy Consumption by up to 75%”. The EPC feature will also save you money if enabled correctly! While the white paper describes the idea behind the technology there are no hard numbers there.

For those you have to look into your product manual. For my disks it’s on page 26 under the PowerChoice power management section.

state Watts
Idle A 6.52
Idle B 5.96
Idle C 4.23
Standby Z 1.64