「Hdparm」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
7行目: 7行目:
 
{{Related|ディスクの完全消去#hdparm}}
 
{{Related|ディスクの完全消去#hdparm}}
 
{{Related articles end}}
 
{{Related articles end}}
hdparm は HDD (SATA/IDE) のパフォーマンスと[[ベンチマーク]]ツールです
+
hdparm はハードディスクドライブハードウェアラメタを設定・表示することができるコマンドラインユーティリティです。シンプルな[[ベンチマーク]]ツールとして使うこともきま
  +
{{Warning|デフォルトパラメータを変更するとドライブにダメージを与えたりシステムがフリーズする可能性があるので注意してください。}}
{{Warning|注意してください!hdparm はあなたのコンピューターをたやすく壊してしまいます!}}
 
  +
 
== インストール ==
 
== インストール ==
   
[[公式リポジトリ]]より {{Pkg|hdparm}} をインストールします。SCSI デバイスを使っているなら {{Pkg|sdparm}} をインストールしてください。
+
[[公式リポジトリ]]から {{Pkg|hdparm}} をインストールします。SCSI デバイスを使っている場合は {{Pkg|sdparm}} をインストールしてください。
  +
== 使い方 ==
 
  +
== 使用方法 ==
 
=== ディスク情報 ===
 
=== ディスク情報 ===
 
HDD の情報を得るには、以下のコマンドを実行します:
 
HDD の情報を得るには、以下のコマンドを実行します:
 
# hdparm -I /dev/sda
 
# hdparm -I /dev/sda
   
=== 読み込み速度 (MB/s) ===
+
=== ベンチマーク ===
  +
あなたの HDD (SATA/IDE) の読み込み速度を測るには、以下のコマンドを実行します:
 
  +
[[ベンチマーク/データストレージデバイス]]を見てください。
# hdparm -t --direct /dev/sda
 
  +
  +
=== 電源管理の設定 ===
  +
  +
近代的なハードドライブは様々な電源管理機能をサポートしています。以下の表には最もよく使われている機能を載せています。完全なリストは {{ic|hdparm(8)}} を見てください。
  +
  +
{{Warning|電源管理の設定をアグレッシブにしすぎるとスピンダウンやパーキングが頻繁に発生してハードドライブが昇天しやすくなる可能性があります。}}
  +
  +
{| class="wikitable"
  +
! パラメータ !! 説明
  +
|-
  +
| {{ic|-B}} || [[wikipedia:Advanced Power Management|Advanced Power Management]] 機能を設定します。利用可能な値は1から255です。値を低くすると積極的に消費電力を下げて、値を高くすると性能が上昇します。1から127までの値ではスピンダウンを行いますが、128から254までの値ではスピンダウンを行いません。255にすると APM 機能が完全に無効化されます。
  +
|-
  +
| {{ic|-S}} || ドライブのスタンバイ (スピンダウン) タイムアウトを設定します。電力を抑えるためにモーターを切るまでのタイムアウト (ディスクが使われないアイドル時間) を指定します。0にするとスピンダウンが無効化され、1から240までは5秒間隔で、241から251までは30分間隔で指定します。
  +
|-
  +
| {{ic|-M}} || [[wikipedia:Automatic Acoustic Management|Automatic Acoustic Management]] 機能を設定します。最新のハードディスクドライブに搭載されている機能でヘッドの動きを遅くして騒音を減らします。設定できる値はディスクによって異なり、一部のディスクでは機能が使えません。
  +
|}
  +
  +
現在の値を確認するには、何も値を設定せずにパラメータを指定してください。例:
  +
  +
# hdparm -B /dev/sda
  +
  +
値を適用したい場合、例えば APM を 127 に設定するには:
  +
  +
# hdparm -B 127 /dev/sda
  +
  +
== Tips and tricks ==
  +
  +
=== udev ルールによる永続的な設定 ===
  +
  +
設定を永続化させるには、以下の [[udev]] ルールを作成してください (値は適当に変えてください):
  +
  +
{{hc|/etc/udev/rules.d/50-hdparm.rules|<nowiki>
  +
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 -S 0 /dev/sda"
  +
</nowiki>}}
  +
  +
ハードドライブが複数ある場合はもっと柔軟にルールを設定できます。例えば、全ての外付けドライブに省電力設定を適用するには (内蔵ドライブが {{ic|/dev/sda}} だけの場合):
  +
  +
{{hc|/etc/udev/rules.d/50-hdparm.rules|<nowiki>
  +
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"
  +
</nowiki>}}
   
  +
=== 起動後にドライブをスリープ状態にさせる ===
=== 書き込み速度 (MB/s) ===
 
あなたの HDD (SATA/IDE) の書き込み速度を測るには、以下のコマンドを実行します:
 
$ sync;time bash -c "(dd if=/dev/zero of=bf bs=8k count=500000; sync)"
 
   
  +
滅多に使用しないデバイスであれば起動時に直接スリープ状態にすると良いでしょう。上記の udev ルールでは設定できません。起動が完了したときにコマンドを実行するには、[[systemd]] サービスを作成します:
このコマンドの実行後 {{ic|Ctrl+c}} と {{ic|rm bf}} を実行するのを忘れないでください。
 
   
  +
{{hc|/etc/systemd/system/hdparm.service|<nowiki>
{{Note|{{ic|bf}} は {{ic|dd}} によって書き込まれるファイルの名前です。}}
 
  +
[Unit]
=== HDD を小休止する ===
 
  +
Description=hdparm sleep
   
  +
[Service]
もしあなたの HDD がカチカチ音を何度も立てているなら、カーネルは HDD の(読み込み/書き込みヘッドを動かす)作動アームを小休止させようとしています。これはラップトップなどの場合よく起こります。あまりにも多すぎる場合、あなたの HDD を逆に傷つけてしまうかもしれません。
 
  +
Type=oneshot
  +
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb
   
  +
[Install]
これはコンピュータのシャットダウン時に読み込みヘッドを小休止させます:
 
  +
WantedBy=multi-user.target
  +
</nowiki>}}
   
  +
サービスを作成したら[[有効化]]してください。
# hdparm -B254 /dev/sda
 
   
  +
== トラブルシューティング ==
デフォルトの値は {{ic|-B128}} です。小休止が多発する時の平均値は {{ic|-B199}} です。
 
   
  +
=== サスペンド後に APM のレベルがリセットされる ===
この設定を永続的にするには <code>/etc/udev/rules.d/11-sda-apm-fix.rules</code> のような [[udev]] ファイルを作成します:
 
   
  +
サスペンドで APM のレベルがリセットされる場合、復帰後にコマンドを再実行する必要があります。以下の [[systemd]] ユニットを使うことで自動的に実行させることができます ([https://bbs.archlinux.org/viewtopic.php?id=151640] を参照):
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 /dev/sda"
 
   
  +
{{hc|/etc/systemd/system/apm.service|2=
もしくは、あなたが多数の HDD を有している場合、より柔軟にルールを定義することが可能です:
 
  +
[Unit]
  +
Description=Local system resume actions
  +
After=suspend.target hybrid-sleep.target hibernate.target
   
  +
[Service]
ACTION=="add|change", KERNEL=="[hs]d[a-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 254 /dev/$kernel"
 
  +
Type=simple
  +
ExecStart=/usr/bin/hdparm -B 254 /dev/sda
   
  +
[Install]
APM レベルはサスペンド後リセットされることを忘れないでください。よって、復帰時に再度コマンドを実行する必要があります。 以下のように [[systemd]] ユニットを作成すれば自動的に実行されます ([https://bbs.archlinux.org/viewtopic.php?id=151640 フォーラムスレッド]より):
 
  +
WantedBy=sleep.target
[Unit]
 
  +
}}
Description=Local system resume actions
 
After=suspend.target
 
After=hibernate.target
 
After=hybrid-sleep.target
 
 
[Service]
 
Type=simple
 
ExecStart=/usr/bin/hdparm -B 254 /dev/sda
 
 
[Install]
 
WantedBy=suspend.target
 
WantedBy=hibernate.target
 
WantedBy=hybrid-sleep.target
 
   
  +
{{Note|1={{ic|sleep.target}} は {{ic|suspend}}, {{ic|hybrid-sleep}}, {{ic|hibernate}} ターゲットから実行されますが、システムがサスペンドする前に起動が完了してしまうため、3つのターゲットを明示的に指定する必要があります。[https://wiki.archlinux.org/index.php?title=Talk:Hdparm&oldid=440457#Troubleshooting_APM_settings_after_suspend.2C_hibernate_or_hybrid-sleep] を見てください。}}
または <code>/usr/lib/systemd/system-sleep/hdparm_set</code> を作成します: [https://bbs.archlinux.org/viewtopic.php?id=159233 ここにあります]
 
#!/bin/sh
 
hdparm -B254 /dev/sda
 
   
  +
もしくは[[電源管理#/usr/lib/systemd/system-sleep のフック|/usr/lib/systemd/system-sleep にフックを作成]]する方法もあります。
そしてこれを実行可能にします:
 
chmod +x /usr/lib/systemd/system-sleep/hdparm_set
 
   
  +
=== ドライブがサポートされていない ===
==Tips and tricks==
 
=== KDE 4.4.41 以上と hdparm ===
 
   
  +
別の方法を使うか [http://hd-idle.sourceforge.net/ hd-idle] ツールを使用してください。
[[KDE]] バージョン 4.4.4 以降で、(手動で)設定した hdparm の値を変更されないようにするには、以下を入力してください:
 
# touch /etc/pm/power.d/harddrive
 

2016年11月28日 (月) 22:51時点における版

関連記事

hdparm はハードディスクドライブのハードウェアパラメータを設定・表示することができるコマンドラインユーティリティです。シンプルなベンチマークツールとして使うこともできます。

警告: デフォルトパラメータを変更するとドライブにダメージを与えたりシステムがフリーズする可能性があるので注意してください。

インストール

公式リポジトリから hdparm をインストールします。SCSI デバイスを使っている場合は sdparm をインストールしてください。

使用方法

ディスク情報

HDD の情報を得るには、以下のコマンドを実行します:

# hdparm -I /dev/sda

ベンチマーク

ベンチマーク/データストレージデバイスを見てください。

電源管理の設定

近代的なハードドライブは様々な電源管理機能をサポートしています。以下の表には最もよく使われている機能を載せています。完全なリストは hdparm(8) を見てください。

警告: 電源管理の設定をアグレッシブにしすぎるとスピンダウンやパーキングが頻繁に発生してハードドライブが昇天しやすくなる可能性があります。
パラメータ 説明
-B Advanced Power Management 機能を設定します。利用可能な値は1から255です。値を低くすると積極的に消費電力を下げて、値を高くすると性能が上昇します。1から127までの値ではスピンダウンを行いますが、128から254までの値ではスピンダウンを行いません。255にすると APM 機能が完全に無効化されます。
-S ドライブのスタンバイ (スピンダウン) タイムアウトを設定します。電力を抑えるためにモーターを切るまでのタイムアウト (ディスクが使われないアイドル時間) を指定します。0にするとスピンダウンが無効化され、1から240までは5秒間隔で、241から251までは30分間隔で指定します。
-M Automatic Acoustic Management 機能を設定します。最新のハードディスクドライブに搭載されている機能でヘッドの動きを遅くして騒音を減らします。設定できる値はディスクによって異なり、一部のディスクでは機能が使えません。

現在の値を確認するには、何も値を設定せずにパラメータを指定してください。例:

# hdparm -B /dev/sda

値を適用したい場合、例えば APM を 127 に設定するには:

# hdparm -B 127 /dev/sda

Tips and tricks

udev ルールによる永続的な設定

設定を永続化させるには、以下の udev ルールを作成してください (値は適当に変えてください):

/etc/udev/rules.d/50-hdparm.rules
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", RUN+="/usr/bin/hdparm -B 254 -S 0 /dev/sda"

ハードドライブが複数ある場合はもっと柔軟にルールを設定できます。例えば、全ての外付けドライブに省電力設定を適用するには (内蔵ドライブが /dev/sda だけの場合):

/etc/udev/rules.d/50-hdparm.rules
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"

起動後にドライブをスリープ状態にさせる

滅多に使用しないデバイスであれば起動時に直接スリープ状態にすると良いでしょう。上記の udev ルールでは設定できません。起動が完了したときにコマンドを実行するには、systemd サービスを作成します:

/etc/systemd/system/hdparm.service
[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb

[Install]
WantedBy=multi-user.target

サービスを作成したら有効化してください。

トラブルシューティング

サスペンド後に APM のレベルがリセットされる

サスペンドで APM のレベルがリセットされる場合、復帰後にコマンドを再実行する必要があります。以下の systemd ユニットを使うことで自動的に実行させることができます ([1] を参照):

/etc/systemd/system/apm.service
[Unit]
Description=Local system resume actions
After=suspend.target hybrid-sleep.target hibernate.target

[Service]
Type=simple
ExecStart=/usr/bin/hdparm -B 254 /dev/sda

[Install]
WantedBy=sleep.target
ノート: sleep.targetsuspend, hybrid-sleep, hibernate ターゲットから実行されますが、システムがサスペンドする前に起動が完了してしまうため、3つのターゲットを明示的に指定する必要があります。[2] を見てください。

もしくは/usr/lib/systemd/system-sleep にフックを作成する方法もあります。

ドライブがサポートされていない

別の方法を使うか hd-idle ツールを使用してください。