2

フラッシュ メモリの不良セクタをチェックするユーティリティを作成する必要があります。

私が持っている古いフラッシュドライブから始め、Ubuntuラップトップに貼り付けて、dmesgそれがマウントされていることを確認し/dev/sdb、実行fdiskしてセクターの数/サイズを確認しました。

mike@mike-Qosmio-X770:~$ sudo fdisk -l [sudo] マイクのパスワード:

ディスク /dev/sdb: 127 MB、127926272 バイト 16 ヘッド、32 セクター/トラック、488 シリンダー、合計 249856 セクター
単位 = 1 のセクター * 512 = 512 バイト
セクター サイズ (論理/物理): 512 バイト / 512 バイト
I/ O サイズ (最小/最適): 512 バイト/512 バイト
ディスク識別子: 0x6b3ee723

Device Boot      Start         End      Blocks   Id  System 
/dev/sdb1   *     32         249854     124911+   b  W95 FAT32

セクターは 512 バイトであり、合計で 249,856 バイトあるはずです。それに基づいて、この小さなテスト プログラムを作成して再確認しました。

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {
    FILE * fp = NULL;
    char buffer[512] = {0};  // size of a sector, 512 bytes
    long sector_count = 0;

     fp = fopen("/dev/sdb", "rb");  // open the flash device as binary

    if(fp == NULL) {
        printf("Can't open the flash drive!\n");
        return -1;
    }
    while(!feof(fp) && (fread(buffer, sizeof(buffer), 1, fp) > 0)){
         sector_count++;
    }

    fclose(fp);
    printf("Sectors: %ld\n", sector_count);
    return 0;
}

249856 と報告されています。一連の0xFF's をドライブ (512x2498561ビット) に書き込み、それを読み戻して 1 に設定されていることを確認しますか? 次に、同じ数の s を書き込んで、0クリアできることを確認しますか?

それはすべてが機能していることを確認しますか? FTL (Flash 変換レイヤー) コードを上書きできる可能性はありますか、それとも、このようにドライブをいじっても保護されていますか?

<background for interested parties>
これは、奇妙な動作をする uCLinux 2.4 カーネルを使用しているプロジェクト用です。ハードウェア (特にフラッシュ) が悪いと思われますが、フラッシュ fs をテストするために 2.4 で動作する優れたツールが見つからないので、試してみようと思いました自分で書くこと。
</background>

4

2 に答える 2

2

デバイスがマウントされ/dev/sdb1ているので、USB スティックやメディア カードなどのある種のリムーバブル フラッシュ メディア デバイスを扱っていると思います。SATA 接続の SSD を扱っている場合、同様の考慮事項が適用されます。

これらのデバイスでは、ブロック インターフェイスは、フラッシュの上にある複雑なデバイス コントローラーの抽象化です。

通常、フラッシュ デバイスには非常に大きなブロック (消去単位と呼ばれます。サイズとして 128kB は珍しくありません) があり、非常に遅い消去が行われる前に 1 回書き込むことができます。デバイスのコントローラーは、ホストから見たブロック インターフェイスと物理デバイス上の消去ユニットとの間の論理 <-> 物理マッピングを実装します。管理プロセスの一部として、コントローラーはエラー検出と訂正を実装し、欠陥のある消去ユニットを管理します。このプロセス全体は、ブロック インターフェイスでは見えません。

その結果、論理ブロックは物理消去単位への永続的なマッピングを持たないため、ブロック インターフェイスから意味のある不良ブロック スキャンを実行することは不可能です。

mtdレイヤーによって管理されている直接接続されたフラッシュ アレイがmtd-toolsある場合は、対応するカーネル モジュールと共に必要です。ドキュメントはここにあります

于 2013-01-10T01:24:44.147 に答える
0

最新のハードウェアは通常、データの破損を認識することができます。つまり、実際にデバイスから不正なデータを読み取るよりも、I/O エラーが発生する可能性が高くなります。さらに、通常、デバイスにはある程度の冗長性が含まれているため、不良ブロックが検出されて正常なブロックに置き換えられます。最新のハードディスクの場合、SMARTは不良ブロック数に関する情報を提供します。これが一般的なフラッシュ デバイスでも機能するかどうかはわかりませんが、私はそう思います。

于 2013-01-10T10:39:04.397 に答える