2013年12月24日火曜日

リムーバブルではないUSBメモリへの対応

 Flash Drive Levelingは、もちろん自分でも利用しています。用途は主に開発用です。ソースコードを格納し、ビルド・ディレクトリとして利用しています。自画自賛になってしまいますが、なかなか快適に使えています。他にVMWAREの仮想マシン用途にも使用しています。こちらもランダム・アクセスが多いせいか、HDDに比べてストレスなく利用できています。


 ところで、USBメモリをパソコンに挿した姿は、かなり不格好と思います。マウスのケーブルなど、いろんなものにひっかかったりもします。挿しっぱなしで使うには、ちょっと問題アリなのです。



 そこで、超小型のUSBメモリを導入してみました(左の写真)。出っ張りが小さいのが最大の特徴です。隣のUSBポートへの物理的干渉もありません。ただし、出っ張りが小さいため、指先でかなり強くつまんで引っ張りださないと抜けません。これは挿しっぱなしで使うのに適した商品ですね。


 使ってみて驚いたのは、ハードディスクドライブとして認識されるということです。冷静に考えてみれば、外付けのUSB-HDDも同じように表示されるので、驚くほどのことでもないのですが、USBメモリ=リムーバブルと勝手に思い込んでいました。

 ここで困ったことに、Flash Drive Levelingはリムーバブルなドライブしか対象としないため、この超小型USBメモリ(SanDisk Cruzer Fit)は未対応ということになってしまいました。そこで、V1.1.0ではリムーバブルでないドライブにも対応することができるように改良しました。前置きが長くなりましたが、以下に設定方法等を説明します。

対応の方針
  • リムーバブルでないドライブは対象としない原則は変えない。
  • 指定されたドライブについては、リムーバブルでなくても対象とする。
  • ドライブの指定は、ハードウェアIDのパターンマッチによって行う。
  • 「取り出し」メニューがないので、シャットダウンしてからUSBメモリを抜く。
設定方法

レジストリにハードウェアIDを登録することによって設定します。
警告 : レジストリ エディタの使い方を誤ると、深刻な問題が発生することがあります。
レジストリエディタで以下のキーを開きます。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\fdlvling\Parameters
HardwareIdAllowAlwaysに、指定するドライブのハードウェアIDを追加します。ハードウェアIDの一部を省略するにはアスタリスク(*)をワイルドカードとして使用します。なお、SanDisk Cruzerについては設定済みです。
設定後に新たに接続したドライブに対して、変更が有効になります。

ハードウェアIDの確認方法

対象として指定するドライブのハードウェアIDを確認するには、デバイスのプロパティを開き、詳細タブのハードウェアIDを選択して、ハードウェアIDの一覧を表示します。この一覧のうちGenDisk等のハードウェアIDは他のデバイスと区別できませんので適しません。そのデバイスを十分に特定できる文字列を使って指定してください。


なお、デバイスのプロパティは、ドライブを右クリック→プロパティ→ハードウェアタブ→対象のドライブをダブルクリックで開くことができます。

仕様の詳細

ドライバ・パラメータのHardwareIdで始まる名前の値の仕様について説明します。
  • HardwareIdAllowAlways
    強制的に対象とするドライブを指定します。ここで指定されたドライブはリムーバブルでなくても対象となります。HardwareIdDenyの指定よりも優先します。
  • HardwareIdDeny
    除外するドライブを指定します。デフォルトでIDEとSCSIバスに接続されるデバイスを指定してあります。これは内蔵ディスクを除外することを目的としたものです。通常はデフォルトの設定を削除しないでください。
    • HardwareIdAllow
      対象とするドライブを指定します。ここで指定されても、リムーバブルでないと対象となりません。またHardwareIdDenyで指定されている場合も対象となりません。
    • HardwareIdToBeFixed
      リムーバブルなドライブを強制的にリムーバブルでないドライブにします。
    • HardwareIdToBeRemovable
      リムーバブルでないドライブを強制的にリムーバブルなドライブにします。

    2013年12月23日月曜日

    V1.1.0の新設定画面の説明

    V1.1.0で設定画面が変更になりました。

    キャッシュ関連の設定項目が2つ増えました。



    キャッシュは、まとめ書きのために一時的にメモリ上に蓄えているデータです。最大で256Kバイトのデータがバッファに蓄えられます。バッファが一杯になると、まとめ書きがデバイスに対して行われます。

    パソコンをシャットダウンしたときや、「取り外し」を実行した場合には、自動的にキャッシュはデバイスに書き出されます。しかし、うっかり「取り外し」を実行せずにUSBメモリを抜いてしまった場合には、キャッシュはデバイスに書き出されずに消失します。このデータ消失を少なくするためには、キャッシュをこまめにデバイスに書き出しておく必要があります。ただし、バッファが一杯になる前に書き出すことになるため、まとめ書きの効果が小さくなります。

    性能を優先するか、データの安全性を優先するかは、キャッシュの設定を変更することによって選択することができます。キャッシュ タイムアウトを長く設定すると性能が優先され、短く設定すると安全性が優先されます。フラッシュを忠実に実行するを有効にすると、安全性がより優先されますが、書き込みのパターンによっては性能が大幅に劣化する可能性があります。

    キャッシュ タイムアウト

    キャッシュがメモリ上に滞留できる最大時間を設定します。1秒から120秒の間を1秒単位で設定できます。特別な設定として∞が設定できます。∞を設定するには、0を入力してください。

    フラッシュを忠実に実行する

    Windowsの内部で呼ばれるフラッシュ動作(SRB_FUNCTION_FLUSH,SCSIOP_SYNCHRONIZE_CACHE等)に連動して、キャッシュを書き出します。

    補足

    「取り外し」を実行せずにUSBメモリを抜いた場合には、Flash Drive Levelingが抱えているキャッシュの他に、Windowsがファイルシステム内に抱えているキャッシュの消失の可能性もあります。したがって、「取り外し」を実行することが確実に安全な方法です。

    リリースノート(V1.1.0)

    V1.1.0をリリースします。

    対象OSは、WindowsXP以降の32bit版です。

    ソフトウェアをダウンロードするには、下記のリンクをクリックしてください。

    ダウンロード (MD5チェックサム:8abade2dd812b7560e16e08bfb4782b8)

    ダウンロード後、zipファイルを解凍してreadme.txtをご確認ください。

    Vectorのページからもダウンロードできます)

    アップグレードインストール時の注意点

    • アップグレードインストールに際しては、いったん対象デバイスをすべて取り外してから、インストーラを実行してください。
    • アップグレードインストール後にデバイスがうまく認識できない場合は、もういちどインストーラを実行して、「修復」を実行してみてください。


    ドキュメントは、ブログ形式でアップしています。右側のブログの履歴からもアクセスできますが、念のためリンクを以下に掲示しておきます。

    はじめに
    基本的な流れ
    レベリングのしくみ
    FAQ(インストール関連)
    FAQ(設定関連)
    FAQ(動作関連)
    リムーバブルではないUSBメモリへの対応


    V1.0.0からの変更点

    機能面
    • リムーバブルではないUSBメモリへの対応
    • データ保持したまま、ポリシーのみ変更ができる
    • 英語環境対応(experimental)

    データ保全性
    • 「取り外し」を実行しなかったときのデータロスを削減
    • ライトバックキャッシュのタイムアウトによるフラッシュを実装
    • フラッシュ動作(SRB_FUNCTION_FLUSH, SCSIOP_SYNCHRONIZE_CACHE等)に対応

    性能面
    • リードの並行実行に対応
    • デバイス接続直後にプチフリがおきる可能性があったのを改善 
    • 複数デバイスの同時接続時のマップ読み込み動作の並列化
    • フォーマットの高速化(Verifyコマンド)