Windowsでファイルの最終アクセス日時の更新を無効にしてディスクへの書き込みを抑える:Tech TIPS
NTFSファイルシステムでは、ファイルが最後にアクセスされた日時を記録している。Windows OSではファイルの内容をシステムが読み出すことが多いため、この情報はかなり頻繁に更新される。この機能を無効化してパフォーマンスを高める方法とは?
対象OS:Windows 2000 / Windows XP / Windows Vista / Windows Server 2003 / Windows Server 2008
解説
Windows OSのNTFSファイルシステムでは、作成したファイルの属性として、作成日時や更新日時(最後に書き込みが行われ、ファイルがクローズされた時間)の他にもう1つ、「最終アクセス日時(last access time)」という情報が記録されている。これはファイルを最後に読み出した時間を記録しておくものであり、例えば単にメモ帳で開いて、何も更新せずにそのままクローズしても、この最終アクセス日時がクローズ時の時刻に更新される。これにより、最後にいつアクセスされたかが分かる。
ファイルの日時情報の例
Windowsファイルシステムでは、ファイルが最後にアクセスされた日時の情報が記録されている。もっとも、ファイルの情報を詳しく調べようとプロパティ画面を開いただけでこの情報が更新されることもあり(例えば.docファイルなどでは、その情報が「概要」タブに反映される)、実際にはあまり有用な情報とはいえない。
(1)ファイルの作成日時。
(2)ファイルの書き込み日時。
(3)ファイルの読み出し(と書き込み)日時。ファイルがオープンされて、読み出されただけでこの情報が更新される。なおFAT32の場合は年月日はあるが時分秒情報はないし、長い名前が無効な場合はこの情報そのものが存在しない。
この情報を確認するには、この画面のように、エクスプローラのプロパティを開くか、エクスプローラの詳細表示に「アクセス日時」という項目を追加する。コマンドプロンプトの場合は、「dir /ta」のように、「/ta」オプションを付ければよい。
Windows OSではファイルデータの読み出しはかなり頻繁に行われるので、この最終アクセス日時情報が更新される頻度はかなり高い。例えばエクスプローラでフォルダをブラウズするだけでも、ファイルタイプによってはその内容の読み出しとタイプのチェックなどが行われるし(アイコンや縮小版表示などに反映するため)、検索機能でファイルの中に含まれる文字列を検索すると、対象フォルダ中のファイルが全て読み出され、その内容がスキャンされるので(あらかじめインデックスを作っていない場合)、最終アクセス日時が更新される。
最終アクセス日時が更新されると、その結果を最終的にはディスクに書き込む必要がある。ディスクの書き込みにはキャッシュ機能が働くので(OS側とディスク側の両方にキャッシュがある)、通常はシステムの負担になるようなことはない。だが、メモリが少ないシステムや低速なディスクの場合には、若干だがパフォーマンスの低下を招くことになる。
また最近普及しつつある半導体ディスク(SSD)の場合は、同じ場所を繰り返し使わないように、たとえデータの更新であっても、別の場所へ書き込み直すという高度な制御(ウェアレベリング)を行っている。つまり、ユーザーとしてはデータを書き込んでいるつもりはなくても、最終アクセス日時情報の更新に伴ってSSDへの書き込みが多数発生し、その結果、SSDのパフォーマンスが低下したり、寿命が短くなったりする可能性がある。
このような問題を避けるには、Windows OSの設定を変更して、最終アクセス日時を更新しないようにすればよい。ファイルシステムによっては利用できない機能だし(NTFSか、FAT32の長い名前が有効な場合にのみ利用可能)、この情報が必須のアプリケーションもほとんどないので、無効にしても問題になることはないだろう。ただし、厳格な監査(アクセス記録の取得)などでこの情報を利用しているようなケースでは、無効にしない方がよい。
操作方法
ファイルの最終アクセス日時を記録しないようにするには、管理者としてコマンドプロンプトを開き、以下のコマンドを実行する。「fsutil behavior set disablelastaccess 1」とすると最終アクセス日付の記録が無効化され、「fsutil behavior set disablelastaccess 0」とすると有効化される。
C:\>fsutil behavior set disablelastaccess /? ……ヘルプの表示
使用法 : fsutil behavior set <オプション> <値>
<オプション> <値>
disable8dot3 1 | 0
allowextchar 1 | 0
disablelastaccess 1 | 0
quotanotify 1 秒から 4294967295 秒
mftzone 1 から 4
C:\>fsutil behavior set disablelastaccess 1 ……最終アクセス日付の記録の無効化
C:\>
以上のコマンドを実行後、システムを再起動する。なおコマンドからも分かるように、ディスクやボリュームごとにこの設定を変えることはできない。システム全体で有効にするか、無効にするかしか選択できない。
現在の設定状態を確認するには、「fsutil behavior query disablelastaccess」というコマンドを実行する。
※未設定の場合(デフォルト状態)は次のように表示される
C:\>fsutil behavior query disablelastaccess
disablelastaccess は現在設定されていません ……未設定の場合
※1か0に設定済みの場合
C:\>fsutil behavior query disablelastaccess
disablelastaccess = 1 ……1に設定されている場合(最終アクセス日時を記録しない)
この値が存在しないか0の場合は最終アクセス日時が記録され、1の場合は記録されない。
■この記事と関連性の高い別の記事
- レジストリキーの最終更新日時を調べる(TIPS)
- 最近更新されたファイルを特定する方法(TIPS)
- エクスプローラの[詳細]表示をカスタマイズする(TIPS)
- グループポリシーの最終適用日時をレジストリから取得する(TIPS)
- 有効なファイルアクセス権を調査する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.