Linuxマシンで一定時間アクセスが無い時にハードディスクをスリープさせて必要な時だけ動作させる方法を紹介します
手順
hdparmコマンドに"-S"オプションと時間、ハードディスクのデバイスを指定します
※ root権限が必要ですので、必要に応じて sudo
コマンドを付けて実行してください
# hdparm -S %時間% %ハードディスク%
時間について
- 0~251 の数字を指定します
- 0 はスリープを無効にします
- 1~240 を設定すると、
指定した数字 × 5秒
がスリープまでの時間になります - 241~251 を設定すると、
(指定した数字 - 240) × 30分
がスリープまでの時間になります
時間の指定例
| パラメータ | 計算 | スリープまでの時間 |
|-----+-----+-----|
| 1 | 1 × 5秒 | 5秒 |
| 240 | 240 × 5秒 | 1200秒 = 20分 |
| 241 | (241 - 240) × 30分 | 30分 |
| 242 | (242 - 240) × 30分 | 1時間 |
| 251 | (251 - 240) × 30分 | 11 × 30分 = 5時間30分 |
ハードディスクの指定について
/dev/sda
など、ハードディスクを示すデバイスファイルのパスを指定します。複数のディスクを装着したマシンでは、認識のタイミングなどで sda, sdb, sdc...
の割り振りが変わってしまうことがあるので、ディスク毎に固有なIDを使うと良いかもしれません
/dev/disk/by-id
を見ると、システムで認識されているハードディスクの型番やシリアルNo.が含まれたIDが確認できます
# ls -l /dev/disk/by-id
合計 0
lrwxrwxrwx 1 root root 9 2月 16 11:50 ata-CT500MX500SSD1_xxxxxxxxxxxx -> ../../sda
lrwxrwxrwx 1 root root 10 2月 16 11:50 ata-CT500MX500SSD1_xxxxxxxxxxxx-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 2月 16 11:50 ata-CT500MX500SSD1_xxxxxxxxxxxx-part2 -> ../../sda2
lrwxrwxrwx 1 root root 9 4月 29 13:17 ata-ST2000DL003-9VT166_xxxxxxxx -> ../../sdd
lrwxrwxrwx 1 root root 10 4月 29 13:17 ata-ST2000DL003-9VT166_xxxxxxxx-part1 -> ../../sdd1
:
※シリアルNo.部は変更しています
hdparm を実行する
/dev/sda
のハードディスクを最終アクセスから1時間後にスリープするようにします
# hdparm -S 242 /dev/sda
/dev/sda:
setting standby to 242 (1 hours)
ディスクIDでスリープ時間を指定する場合は、 -part
が付いていないIDを指定してください
# hdparm -S 242 /dev/disk/by-id/ata-ST2000DL003-9VT166_xxxxxxxx
/dev/disk/by-id/ata-ST2000DL003-9VT166_xxxxxxxx:
setting standby to 242 (1 hours)
設定したスリープ時間を解除するには時間を"0"にします
# hdparm -S 0 /dev/sda
/dev/sda:
setting standby to 0 (off)
確認方法
ハードディスクがスリープしているか確認するには、hdparmコマンドで"-C"オプションを指定します
# hdparm -C %ハードディスク%
実行例
# hdparm -C /dev/sda
/dev/sda:
drive state is: active/idle
# hdparm -C /dev/sdb
/dev/sdb:
drive state is: standby
稼働時には"active/idle"、スリープ中には"standby"または"sleeping"(より低電力な時)と表示されます
ハードディスクによっては、状態の確認をすることもアクセスしたことと同じ扱いになり、スリープまでの時間が伸びてしまったり、スリープ中の状態確認からactive状態になることがあります
注意点
hdparmの設定はハードディスクを取り外したり、電源OFFにすると設定前の状態に戻りますので、起動時や接続時に再度設定しなおす必要があります
スリープをすることで、ハードディスクの節電や温度上昇を防ぐ効果もありますが、頻繁にスリープ/復帰を繰り返すと逆にそれが負担となり、寿命を縮めてしまう可能性もあるので、スリープの時間はアクセス状況を見て決めるのが良いでしょう
ハードディスクや、外付けケース、マザーボードなどの環境によってはこの設定が効かない物もあるようです。アクセスが全くないはずなのにスリープ状態にならない場合は、環境を変えてみてください
USBハードディスクケースの節電機能で、この設定に限らずケース内のコントローラーでスリープさせてしまう場合がありますが、この場合はhdparmの設定は反映されません