How can I control HDD spin down time?

I have 2 HDDs in my PC. Ubuntu is turning off the secondary HDD very quickly after about 15 minutes, which is short for me. I need to control this time. How can I do it?

I tried GNOME power management but did not find it useful.


Solution 1:

Have a look at hdparm.

From the manual (man hdparm on the command line):

-S     Put the drive into idle (low-power) mode,  and  also  set  the  standby  (spindown)
       timeout  for  the  drive.  This timeout value is used by the drive to determine how
       long to wait (with no disk activity) before turning off the spindle motor  to  save
       power.   Under  such  circumstances,  the  drive  may take as long as 30 seconds to
       respond to a subsequent disk access, though most  drives  are  much  quicker.   The
       encoding  of  the  timeout  value  is  somewhat  peculiar.   A  value of zero means
       "timeouts are disabled": the device will  not  automatically  enter  standby  mode.
       Values  from  1  to  240  specify  multiples of 5 seconds, yielding timeouts from 5
       seconds to 20 minutes.  Values from 241 to 251 specify from 1 to  11  units  of  30
       minutes,  yielding timeouts from 30 minutes to 5.5 hours.  A value of 252 signifies
       a timeout of 21 minutes. A value  of  253  sets  a  vendor-defined  timeout  period
       between  8  and  12 hours, and the value 254 is reserved.  255 is interpreted as 21
       minutes plus 15 seconds.  Note that some  older  drives  may  have  very  different
       interpretations of these values.

So:

sudo hdparm -I /dev/sdb | grep level

will show the current spindown value, for example:

Advanced power management level: 254

From the manual, 254 is reserved, so I expect it to be Ubuntu's default (can anyone confirm/expand on this please?).

Example:

  • sudo hdparm -S 25 /dev/sdb = spindown after 25*5 seconds.

  • sudo hdparm -S 245 /dev/sdb = spindown after (245-240)*30 minutes.

Solution 2:

Disk Utility -> select HDD drive -> click on the "More actions..." icon on the top right corner -> Drive settings...

Mine is looks like this: screenshot

Solution 3:

If you're interested on do the hdparm's setting persistent between reboots, instead of adding it to the crontab, you can use the /etc/hdparm.conf. I have the following, note the use of capital S, not lowercase:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

Add that line replacing the UUID by yours, or also you may specify the device using /dev/sdX format. You can find out your disk's UUID with the command sudo blkid.

Solution 4:

  1. Find your disk's UUID.

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. Edit /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. Look for spindown-time or your disk settings section.

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. I prefer to refer to the disk by UUID which remains the same across different installations (unless you change it in the HW itself).

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. If the init script causes boot problems, you can pass nohdparm on the kernel command line, and the script will not be run.