スマートフォン(Motorola Atrix 4G)に32GBのMicroSDがあります。電話は私のWindowsXP(SP3)ラップトップに接続されており、micro sdは「マスストレージモード」でアクセスされます。つまり、ドライブ文字が割り当てられ、ラップトップからアクセスできます。MicroSDはFAT32でフォーマットされています。MicroSDには、12個のエクステント(サイズ2GB)で構成される仮想ハードディスク(vmdk)が含まれています。私のコードは、ローカルハードディスク上のREDOファイルをmicrosd上のvmdkエクステントとマージします。コードは、REDOファイル内のすべての「グレインテーブル」エントリをループし、グレインテーブルエントリがゼロ以外の場合、参照されている「グレイン」または連続するグレインのグループを読み取ります(vmware用語のグレインはREDOファイルの64kブロックです) REDOファイルから、vmdk内の対応する場所をシークし、その場所にグレインを書き込みます。
問題は、この「コミット」操作の途中でMicroSDが切断されることです(常に正確に同じ時点であるとは限りません)。「ディスクがありません」というエラーメッセージが表示されます。イベントログには、ID51の警告が記録されます-「ページング操作中にデバイス\Device \ Harddisk2\Dでエラーが検出されました」。このエラーの後、microsd上のファイルはWindowsシステムから「見えなくなります」。デバイスを再接続すると、すべてのファイルがラップトップから再び表示されます。
これまで私は以下を試しました:
さまざまなケーブルを試しましたが、そのうちの1つは13''->効果がありません
microsdカード(Samsung、クラス10 32GB)をカードリーダーを介してホストシステムに接続しました->問題は発生しませんでした
別のmicrosd(Lexar、クラス10 32GB)を試しました->同じ問題
直接接続されているカードリーダーでLexarmicrosdを試しました->問題は発生しませんでした
別の電話を試しました(Samsung Galaxy S2、Motorola Razr M)->同じ問題
XPの動作を示す同じシステムを含むWindows7を実行しているいくつかのシステムでコードを実行しました->問題は表示されませんでした(!!!!)
私は同じ2番目のXPシステムを持っています->同じ問題
'grain'がディスクに書き込まれた直後にSleep(500)を挿入して書き込み操作を抑制しました->問題は発生しませんでした
残念ながら、8はコミット操作の速度を低下させるため、優れた回避策ではありません。
誰かアイデアはありますか?
前もって感謝します