フラッシュ メモリの不良セクタをチェックするユーティリティを作成する必要があります。
私が持っている古いフラッシュドライブから始め、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 バイト
ディスク識別子: 0x6b3ee723Device 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>