Help us understand the problem. What is going on with this article?

[Linux][tips] 一定時間アクセスのないハードディスクをスリープさせるには

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が確認できます

例)/dev/disk/by-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の設定は反映されません

suzutsuki0220
C言語の組み込み開発ばかりだった危機感から、NodeJS、electron、KotlinのAndroidアプリ開発など色々チャレンジ中、最近はTypeScriptを少しだけ触り始めた。エディタはvimからVS Codeに乗り換え中。今一番欲しいものRaspberry Pi。将来の夢は子供と一緒にログハウスを建てること
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away