システム以外のディスクがウェイクアップした時間をログに記録できる小さなスクリプトまたはアプリケーションを探しています。
どのアプリケーションまたはスクリプトがシステム以外のドライブをウェイクアップするかを特定できません(システムドライブを操作するまでスリープ状態にする必要があります)。私はすでにnoatimeフラグを設定し、powertopとiotopを使用して、どのアプリケーションがスリープ状態になるのを防ぐことができるかを判断しようとしましたが、結果はありませんでした。
したがって、私の計画では、このドライブをスリープ状態(hdparm -Y)にして、定期的にウェイクアップする時刻を確認することです。
アドバイスありがとうございます。
アクセスされているファイルを見つけるために(責任のあるプロセスを絞り込むのに役立つ場合があります)、ディレクトリの下のディレクトリを再帰的に監視するように設定できる inotifywatch
を使用してみてください。選んで。大きなツリーでの--recursive
の使用に関するマニュアルページの警告を必ずお読みください。
そのツリー内のディレクトリでファイルシステムイベントが発生すると、それが記録され、テーブルに出力されます。 --timeout
を使用して、時計がアクティブである時間を制限できます。
結果に一貫性がある場合は、そのディレクトリ内のファイルに対して非再帰的な監視を実行して、特定のファイルを絞り込むことができます。
それを追跡する方法(および考えられる原因)については、このubuntu バグレポート を参照してください。
短い答え: auditctl -w /dev/sdX -p rwa
およびudisks
hdparm -C
を使用して、いつでもディスクの電源モードステータスを取得できます。時間を与えるスクリプトは次のとおりです。
while true; do
state=`hdparm -C /dev/sda|grep "^ drive"|cut -c 19-`
echo `date` $state
sleep 1
done
Sudo
にはroot権限が必要なため、hdparm
を指定してスクリプトを実行します。エコーをいくつかのファイルにリダイレクトできます。例:
echo `date` $state >> /tmp/sda_state
もちろん、監視しているディスク(私は/dev/sda
を使用)を必要なものに変更し、sleep 120
などのsleep
間隔で2分ごとにクエリを実行します。
ただし、これではドライブをウェイクアップするプロセスは提供されません。
いくつかのバグが原因で、上記の問題が発生する可能性があります。
hdparm -C
がドライブをウェイクアップする際に問題が発生した場合は、代わりに次のことを試してください。
smartctl -i -n standby /dev/sda|grep "^Power mode"
man smartctl
に従って、-n standby
で実行する場合、smartctl
はドライブをウェイクアップしないでください。これにはバグもあることに注意してください:
だからそれが機能するかどうかを確認してみてください。
Linuxを使用している場合は、新しいfatrace
ユーティリティを使用できます。このユーティリティは、すべてのファイルアクセスをログに記録し、どのプロセスが原因であるかを示します。
詳細はこちら:
http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/
これは、Linuxカーネル2.6.37以降で使用可能な linux fanotify API ( 詳細 )を利用します。
fatrace
は、2014年7月の時点でほとんどのディストリビューションにパッケージ化されていません(最近debianテストに入ったので、「jessie」で出荷する必要があります)が、ソースから簡単にインストールできます。
私はあなたの質問に答えることはできませんが、興味深いかもしれない詳細を指摘したいと思います:いくつかのsata hddには、デフォルトでスリープ状態に設定するためのジャンパーがあります(コントローラーはディスクをウェイクアップするためにsataコマンドを送信する必要があります。 [すべてのコントローラーがそれを実行できるわけではありません])。
ジャンパーはすでに設定されていますか?
ダム