レッツノート・CF-R4に搭載したSSDの寿命とパフォーマンスに対する対策の一環として、RAMディスクを確保している話は以前紹介しています。ここにWebのキャッシュファイルを保存し、これをシャットダウンのときにバックアップしようと考えていたわけですが、一時的に保留にしてありました。
OSをWindows 7公開β版からWindows XPに戻したところで、バックアップの検討を再開しました。最初は、VBScriptで記述するWindows Scripting Host、あるいはMicrosoft社が新たに開発した「オブジェクトベースのスクリプト環境」・PowerShellを使ってみるつもりで、いろいろ手を付けてはいましたが、どうもうまくいきませんでした。最大の問題はパフォーマンス。実行時に逐次解釈していくスクリプト言語では、どうしても実行速度で不利です。
いろいろと調べていく中で、ROBOCOPYというコマンドラインツールがあることを知りました。従来からコマンドプロンプトに用意されていたXCOPYを大幅に強化したコマンドで、フォルダツリー単位でのファイルコピーを、サイズや更新日時、属性などいろいろな条件で制御しながら行うことができます。単なるコピーだけでなく、移動元と移動先のファイル内容を同期するミラーリングも簡単なオプションだけでこなします。スクリプトではなく最初からバイナリになったプログラムですから、実行速度でも有利です。これを使ってみることにしました。
ちなみに、ROBOCOPYの名前は「Robust(堅牢な)なファイルコピー」という意味らしいです。いろんな動作が自動化できるから「Robotコピー」の意味かと思っていたんですが…。
このROBOCOPYコマンドは、Windows Vistaには標準で含まれていますが、CF-R4にインストールされているWindows XPには含まれていません。しかし、Windows XP環境でもちゃんとROBOCOPYが使えるようになる方法は用意されています。
Microsoft社では、Windowsのマニアックなユーザーやシステム管理者などに向けて、「Windowsリソースキット」と呼ばれるドキュメントやツール群を提供しています。ROBOCOPYはこの中に含まれていて、英語版ではありますがMicrosoft社のWebサイト経由で無償ダウンロードできます。「Windows XP用」と書かれたものは見つかりませんが、心配ご無用。「Windows Server 2003用」の対応OSに、ちゃんとWindows XPがリストアップされています。ダウンロードしたWindows Server 2003 Resource Kit Toolsをインストールすれば、ROBOCOPYツールもコマンドラインから利用できるようになります。
「ROBOCOPY /?
」でオプション等のヘルプドキュメントが表示できますが、残念ながらこれは英語版。Vistaのコマンドラインから実行できるROBOCOPYでは日本語化されているので、これを見ながら設定をしていきました。
シャットダウンするときには、RAMディスクの中身をSSDにバックアップします。このときに、単にコピーするだけではSSD側のファイルが増えるばかりで困ってしまいます。私の場合は、キャッシュの管理はそれぞれのブラウザに任せて、RAMディスクの内容をミラーリングすることにしました。これなら、
ROBOCOPY Z:\Cache C:\ramdisk\Cache /MIR
(Z:はRAMディスクのドライブ、/MIRは「ミラーリング」のオプション;新しく作られたファイルや日付の新しいファイルをコピーし、コピー元で削除されたファイルをコピー先で削除する)
↑たったこれだけでできてしまいます。
一方、スタートアップのときにはもう一ひねり必要でした。スタートアップ処理の中ではRAMディスクの組み込みとROBOCOPYの実行順序が確定できないので、RAMディスクのドライブが確保できていない段階でROBOCOPYが実行されてしまうと、SSDからRAMディスクへのファイルのコピーに失敗してしまいます。そこで、次のようにオプションを追加してみたらコピーに失敗しなくなりました。
ROBOCOPY C:\ramdisk\Cache Z:\Cache /E /TBD
(/Eは「空のディレクトリも含めてサブディレクトリをコピーする」、/TBDは「共有名が定義されるのを待つ」)
実際にシャットダウンやスタートアップの時に実行されるコマンドを設定するときには、グループポリシーエディタを使います。通常ではスタートメニューには登録されていないので、スタートメニューの「ファイル名を指定して実行…」から「gpedit.msc」と打ち込んで起動しましょう。
グループポリシーエディタでは、通常のコントロールパネルなどではできない様々な環境設定が可能になりますが、その中に、スタートアップおよびシャットダウンのときに自動実行するスクリプトを設定する項目があります。
本来は、Windows Scripting HostやPowerShellのスクリプトファイル、あるいはコマンドラインのバッチファイルなどを指定することになるのでしょうけど、今回は実行するのが単一のコマンドのみなので、実行ファイルのROBOCOPYを直接スクリプト名に入れてしまい、パラメータを指定してみました。これでもちゃんと動作してくれます。
ROBOCOPYでも、さすがにバックアップおよび復元の処理にはずいぶん待たされます。それでも、再起動の操作自体はそれほど頻繁に行われるものではありませんし、実質的にはたいした影響はないでしょう。普段のWebサイトの閲覧はずいぶん快適になりました。まあまあ合格点の解決策ではないかと思っています。
コメントを残す