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コマンド)

    2013年11月3日日曜日

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




    このページに掲載するバージョンは、旧バージョンです。
    新バージョンはこちらからダウンロードしてください。

    2013年11月2日土曜日

    FAQ(動作関連)

    動作関連のFAQ

    Q1. USBメモリを取り外すときの注意点は?
    A1. コンテキストメニューから「取り外し」を実行してください。方法は、基本的な流れを参照してください。

    Q2. 「ハードウェアの安全な取り外し」の通知アイコンを実行してもエラーとなってしまいます
    A2. 「取り外し」は、ドライブを右クリックしてでてくるコンテキストメニューにある方を使ってください。方法は、基本的な流れを参照してください。

    Q3. コンピュータの再起動前にも「取り外し」の操作は必要ですか?
    A3. いいえ。コンピュータのシャットダウンや再起動のときには特別な操作は必要ありません。

    Q4. 「取り外し」の操作をしないでUSBメモリを抜くとどうなりますか?
    A4. 最近の書き込みデータが消失します。消失するデータは最大で 128MB 256KBです。(V1.1.0で改善しました。設定方法はこちら)

    Q5. レベリングを設定したUSBメモリは、別のパソコンでも使用できますか?
    A5. はい。別のパソコンにFlash Drive Levelingをインストールしてください。

    Q6. USBメモリの容量が12KBしかない様に表示されます
    A6. Flash Drive Levelingをインストールしていないパソコンに、レベリングの設定をしてあるUSBメモリを接続すると、そのように表示されます。これは、間違って本来のデータを消去しないための保護策です。なお、12KBの領域に書き込んでも、本来のデータは壊れません。

    Q7.  SDカードは使えますか?
    A7. はい使えます。使い方はUSBメモリと同じです。

    Q8. NTFSの暗号化や圧縮はつかえますか?
    A8. はい使えます。

    Q9. シャットダウンした後に、USBメモリを抜いても大丈夫ですか?
    A9. はい大丈夫です。

    Q10. スリープ中に、USBメモリを抜いても大丈夫ですか?
    A10. いいえ。大丈夫ではありません。スリープを解除して「取り外し」を実行してから抜いてください。

    Q11. USBメモリのレベリングの設定を解除するには?
    A11. レベリングの設定画面で、「レベリングを有効にする」のチェックを外して適用します。

    Q12. Flash Drive Levelingを使わないで、USBメモリのレベリングの設定を解除するには?
    A12. MBR(マスターブートレコード)を初期化すれば解除できます。

    Q13. ランダムライトの性能が、ランダムリードの半分の性能しか出ません
    A13. 仮想サイズが小さすぎると、アライメントのずれが原因で性能が低下します。仮想サイズを大きくしてみてください。

    Q14. 2つ以上のUSBメモリを同時に扱うことはできますか?
    A14. はい、可能です。

    Q15. レベリングを有効にしたSDカードは、デジタルカメラで使用できますか?
    A15. いいえ、使用できません。

    Q16. USBメモリの制限サイズはありますか?
    A16. USBメモリは、少なくとも1ギガバイトの容量が必要です。また、最大で最初の64ギガバイトが使用されます。


    FAQ(設定関連)

    設定関連のFAQ

    Q1. 設定画面の開き方がわかりません
    A1. USBメモリをパソコンに接続します。スタートからコンピュータを開きます。ドライブのアイコンを選択して右クリックし、「レベリング」を選択します。

    Q2. 「このドライブは処理できません」が表示されます
    A2. HDD等はレベリングを有効にできません。USBメモリで試してみてください。また、インストールに失敗している可能性もあります。インストールのFAQもチェックしてください。

    Q3. 設定のやりかたがわかりません
    A3. 基本的な流れをチェックしてください。

    Q4. 仮想サイズとはなんですか?
    A4. レベリングを有効にした後のフラッシュメモリの使用可能容量です。

    Q5. 仮想サイズの設定値をどうすればよいかわかりません
    A5. 実容量の半分程度に設定すればよいでしょう。小さく設定すれば書き込み性能が向上し、大きく設定すれば使用可能容量が増えます。

    Q6. 仮想サイズを実容量と同じに設定できません
    A6. 実サイズの約8割までしか設定できません。

    Q7. 仮想サイズの確認の方法は?
    A7. 設定画面を開いたときに表示されている値が設定されている値です(レベリングが有効な場合)。また、エクスプローラー等で表示される「合計サイズ」でも確認できます。

    Q8. 再配置の方針とは何ですか?
    A8. レベリングを性能重視で行うか、寿命重視で行うかを設定します。目的に応じて設定してください。極端な設定にしても大きな違いはありません。いずれにせよ性能と寿命の両方に配慮した動作となります。

    Q9. レベリングを有効にした後、フォーマットを要求する画面が出てきます
    A9. それで正常です。レベリングを有効にする際にデータはすべて消去されるので、Windowsのファイルシステムのフォーマットが必要です。

    Q10. ファイルシステムのどれを選べばよいかわかりません
    A10. どのファイルシステムでも動作しますが、わからなければFAT32を選んでください。

    Q11. 仮想サイズを最大値に設定する方法は?
    A11. 設定画面で99999を入力すると自動的に最大値となります。

    Q12. USBメモリを使用する毎に設定を行わなければならないのですか?
    A12. いいえ。一度設定すれば、USBメモリを抜き差ししたり、別のパソコンに接続したりしても、再設定の必要はありません。

    Q13. コンピュータを再起動する毎に設定を行わなければならないのですか?
    A13. いいえ。

    FAQ(インストール関連)

    インストール関連のFAQ

    Q1. インストールの開始の方法がわかりません
    A1. zipファイルをダウンロードして、中にあるmsiファイルをダブルクリックして実行してください。

    Q2. 64ビット版のWindowsにはインストールできませんと表示されます
    A2. 現時点では、32ビット版のWindowsのみしかサポートしていません。

    Q3. インストール中に「ユーザーアカウント制御」の画面が表示されます
    A3. インストールには管理者権限が必要です。「はい」をクリックしてください。

    Q4. インストールが途中で止まって終わりません
    A4. メッセージウィンドウが隠れている場合があります。タスクバーを確認してみてください。

    Q5. インストーラを実行すると、「インストールの変更、修復、または削除」の画面が出てきて、インストールができません
    A5. すでにインストールされている場合に出てくる画面です。再インストールしたい場合は、いったん削除してからインストールしてください。

    Q6. インストールしても、スタートメニューにアプリケーションが見当たりません
    A6. それで正常です。レベリングの設定画面は、ドライブを右クリックして出てくるコンテキストメニューにあります。

    Q7. 「このドライブは処理できません」が表示されます
    A7. HDDはレベリングの設定ができません。USBメモリで試してみてください。

    Q8. USBメモリでも「このドライブは処理できません」が表示されます
    A8. ドライバが正しくインストールされていない可能性があります。インストーラを再度実行して、修復を行ってみてください。また、インストール後に再起動を行ってください。

    Q9. インストール後に再起動したら、Windowsが立ち上がらなくなりました
    A9. 起動時にF8を押して「詳細ブートオプション」の画面を出し、「前回正常起動時の構成」で起動してください。


    レベリングのしくみ

    レベリングのしくみをざっと説明します。

     Flash Drive Levelingの基本の動作は、さまざまなアドレスへのライトデータをまとめて、連続データとしてフラッシュメモリに書き込むというものです。要求のあった順番にまとめていくので、もともと指定されたアドレスとは異なる場所に書き込まれることになります。そこで、どのアドレスのデータをどこに書き込んだかをインデックスとして記憶しておきます。後に読み出し要求があったときには、このインデックスを参照して、正しいデータを読み出すことができます。

     フラッシュメモリは、小サイズのランダムライトが極端に遅いという特徴があるため、この動作によって最大で千倍近い大幅な性能向上が見込めます(実測データ)。また、同一アドレスへの繰り返しの書き込みでも、書き込みの順に異なる場所へマッピングされるため、素子の消耗が分散します(ウェアレベリング)。

     似たような管理手法として、ネット通販大手のアマゾンの在庫管理があります。アマゾンの倉庫では、商品を入荷した順に空いた棚に並べていくそうです。このとき、どの商品がどの棚に置かれたかはコンピュータで管理されるため、商品を棚の上に整理して配置する必要はありません。商品を書き込みデータに、倉庫をフラッシュメモリになぞらえてみると、これはFlash Drive Levelingの動作と類似しています。

     さて、どんどん倉庫に商品が保管されていって、空いている棚がなくなったときにはどうすればよいでしょうか。以前に入荷した商品の相当数はすでに出荷されているはずです。売れ残り商品がほとんど無く、ほぼ空いている棚もいくつかはあるでしょう。そこで、そのような棚から売れ残り商品を取り除き、新しい入荷商品を並べていけばよいでしょう(実際にアマゾンでそのようにしているかどうかは私は知りません)。

     レベリングにおいても、同様な処理を行っています。比較的空き領域の多いところをみつけ、そこからまだ有効なデータ(売れ残り)だけを他へ移動させて、新規のデータをまとめて書き込むための連続した空き領域を確保します。これを再配置と呼んでいます。なお、再配置データも新規の書き込みデータとあわせて連続データとしてまとめて書き込みます。ところで、以前に書き込んだ領域になぜ空き領域があるのでしょうか。アマゾンの場合は、商品が売れて出荷したからですが、レベリングの場合は、同じアドレスへの書き込みにより以前のデータが不要となるためです。

     レベリングを開始した直後では、空き領域が多く再配置は不要なので、最高の書き込み性能が得られます。ところが、使い込んでいくうちに空き領域が少なくなり、再配置が必要になってきます。再配置の量が多くなれば、新規に書き込むデータの割合がそれだけ減少し、性能が劣化することになります。これを低減するためには、仮想ドライブの容量(仮想サイズ)を、フラッシュメモリの容量よりも相当小さくします。例えば、仮想サイズをフラッシュメモリ容量の1/3に設定すると、フラッシュメモリ全体のうちで、有効なデータは1/3しかありません。比較的に空き領域の多いところで再配置を行えば、再配置の量が全書き込み量の1/3を超えません。つまり、再配置が全くないときの性能を1とすると、再配置の量が最大のときの性能は2/3です。式で表すと、以下のようになります。

     最低の書き込み性能 : 最高の書き込み性能
      =(フラッシュメモリ容量 − 仮想サイズ) : フラッシュメモリ容量

     この式からわかるように、仮想サイズをフラッシュメモリ容量に近づけると、最低の書き込み性能が悪化します。このような理由で、仮想サイズは約8割のサイズまでしか指定できないようになっています。8割で設定すると上記式の比の値は1/5です。なお、この計算式は、アクセスのパタンや、再配置のポリシー設定によって実際には変わってきます。

     最後に実装に関してすこしだけ。

     Flash Drive Levelingのドライバは、ファイルシステムとストレージドライバの間に挿入されます。アプリケーションから発行されたアクセス要求は、ファイルシステム→レベリングドライバ→ストレージドライバと渡っていき、最終的にフラッシュメモリに到達します。レベリングドライバのところでは、要求の分割とマッピングが行われます。なお、レベリングの設定をしていないフラッシュメモリの場合は、アクセス要求はレベリングドライバを素通りします。

     レベリングドライバは、ファイルシステムよりも下に位置しているため、どのようなファイルシステムでフォーマットしても使用可能です。また、NTFSの暗号化や圧縮なども使用可能です。なお、デフラグも実行可能ですが効果はありません。

    2013年10月31日木曜日

    基本的な流れ(レベリングの開始)

    レベリングを開始する手順の流れを紹介します。

    1. データを消去してもよい1Gバイト以上のUSBメモリをパソコンに接続します。

    2. エクスプローラー等でドライブを選択して、右クリックでメニューを表示し、「レベリング」を実行します。




    レベリングの設定パネルが現れます。



    3.「レベリングを有効にする」をチェックします。


    4. 仮想サイズと再配置の方針を設定して、適用をクリックします。


    5. データを消去する警告画面が現れます。[OK]をクリックするとデータが消去され、レベリングが有効になります。



    6. しばらくすると、自動的にWindowsのフォーマットの画面が現れます。好みのファイルシステムでフォーマットしてください。

    (現れない場合は、ドライブをダブルクリックするか、右クリックでフォーマットを選択してください)

    7. これで、レベリングが有効な状態で、通常のフラッシュメモリと同様に使用できるようになりました。ファイルの作成や、ベンチマークなどで、動作を確認してみてください。

    8. パソコンからフラッシュメモリを取り外すときは、取り外す前に、必ず右クリックメニューから「取り出し」を実行してください。


    9. いったんレベリングを有効にしたフラッシュメモリは、上記設定をもう一度行う必要はありません。パソコンに挿すと自動的にレベリングが認識されます。

    補足1: Flash Drive Levelingがインストールされていないパソコンや、その他の機器ではデータが読み出せません。

    補足2: フラッシュメモリのレベリングを解除するには、レベリングの設定パネルで「レベリングを有効にする」のチェックを外します。

    2013年10月30日水曜日

    はじめに

     フラッシュメモリの高速化と長寿命化を実現するソフトウェア、Flash Drive Levelingを紹介します。

     一般に、フラッシュメモリ(USBメモリやSDカードなど)の素子には寿命があります。また、安価なフラッシュメモリでは、ランダム書き込みがかなり低速です。Flash Drive Levelingは、フラッシュメモリへの書き込み時にデータ配置を最適化することにより、これらの欠点を緩和します。


     フラッシュメモリの低価格化が進んでいます。外付けディスクの代用としてフラッシュメモリを使っている方も多いと思います。そのような場合に、Flash Drive Levelingはお勧めです。


    使用前
     実際にUSBメモリを性能測定した結果を示します。ベンチマークソフトは、フラッシュメモリの測定によく使われているCrystalDiskMarkです。


    使用後
     比較対象として、Flash Drive Levelingをインストールする前の測定結果を左に示します。

     やはり、フラッシュメモリの特性上、ランダム・ライトが極端に遅いです。

     Flash Drive Levelingをインストールし、レベリングの設定をして、測定した結果を左に示します。

     ランダムライトが大幅に改善していることがよくわかります

     よく見ると、ドライブのサイズが小さくなっていますが、まちがいなく同一のUSBメモリです。ドライブ・サイズのからくりについては、後日に説明いたします。

     最後に、測定で使ったUSBメモリは、こちらです。