;) ;)

;) ;)

私は昨日、誰かと次の論理と真実についていくつかの議論をしました。私の答えはここにあります比較的言えば、適切な(GB +)サイズのSDカードにファイルシステムのメタデータを記録して維持することは、合理的な時間(年と年)以内にカードを磨くのに十分重要ではありません。オンライン上ではSDカードが足りないという話が多いので、私が間違っていたことが反論のようです。

年中無休に保たれる rw ルートファイルシステムを含む SD カードを備えたデバイスがあるため、満足するほど以前にこの前提をテストしました。私はこのテストを少し調整して繰り返し(実際には同じカードを使って)ここに示します。私の2つの重要な質問は次のとおりです。

  1. カードを破壊するために使用した方法は可能ですか?その目的は、継続的な書き換え効果を再現することです。小さいデータ量?
  2. カードの確認に使用した方法は引き続き機能しますか?

SOやスーパーユーザーではなく、ここに質問を投げます。最初の部分への異議は、私のテストが私が確信している方法でカードに実際に記録されていないと主張する必要があるかもしれません。 Linuxの知識。

[SDカードは、ある種のスマートバッファリングまたはキャッシュを使用して、同じ場所に繰り返し書き込みが磨耗したり破損する可能性が低い場所にバッファリング/キャッシュすることもできます。どこにも何の兆候もなかったが、それについて尋ねる数から]

テストの基本的なアイデアは、カードの同じ小さなブロックに何百万回書き込むことです。これは、デバイスがどれだけの書き込みサイクルを維持できるかについての説明をはるかに超えています。ウェアレベリングカードが正しいサイズであれば、「同じブロック」は実際には同じ物理ブロックではないので、何百万もの書き込みは依然として重要ではありません。これを行うには、各書き込みが実際にハードウェアと同じハードウェアにフラッシュされていることを確認する必要があります。確かに場所。

ハードウェアにフラッシュするには、POSIXライブラリ呼び出しを使用します。fdatasync():

#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>

// Compile std=gnu99

#define BLOCK 1 << 16

int main (void) {
    int in = open ("/dev/urandom", O_RDONLY);
    if (in < 0) {
        fprintf(stderr,"open in %s", strerror(errno));
        exit(0);
    }

    int out = open("/dev/sdb1", O_WRONLY);
    if (out < 0) {
        fprintf(stderr,"open out %s", strerror(errno));
        exit(0);
    }

    fprintf(stderr,"BEGIN\n");

    char buffer[BLOCK];
    unsigned int count = 0;
    int thousands = 0;
    for (unsigned int i = 1; i !=0; i++) {
        ssize_t r = read(in, buffer, BLOCK);
        ssize_t w = write(out, buffer, BLOCK);
        if (r != w) {
            fprintf(stderr, "r %d w %d\n", r, w);
            if (errno) {
                fprintf(stderr,"%s\n", strerror(errno));
                break;
            }
        }
        if (fdatasync(out) != 0) {
            fprintf(stderr,"Sync failed: %s\n", strerror(errno));
            break;
        }
        count++;
        if (!(count % 1000)) {
            thousands++;
            fprintf(stderr,"%d000...\n", thousands);
        }
        lseek(out, 0, SEEK_SET);
    }
    fprintf(stderr,"TOTAL %lu\n", count);
    close(in);
    close(out);

    return 0;
}                                 

積もるまで8時間ほど走った200万以上の書き込みパーティションの先頭に/dev/sdb11パーティションではなくRAWデバイスを簡単に使用できますが、どのような/dev/sdb違いがあるのか​​わかりません。

その後、ファイルシステムを作成してマウントしてカードを確認しました/dev/sdb1。これは機能し、私が一晩作成した特定のブロックが実行可能であることを示します。ただし、これは摩耗レベリングによって摩耗または移動されずにカードの特定の領域にアクセスできるという意味ではありません。

これをテストするためにbadblocks -v -wパーティションで使用しました。これは破壊的なこれは読み取り/書き込みテストですが、ウェアレベリングの有無にかかわらず、すべてのローリング書き込み用のスペースを提供する必要があるため、カードの実行可能性を強く示します。つまり、これはカードを完全に作成し、すべてが正常であることを確認するのと同じです。複数のモードで動作する不良ブロックが何度もありました。

[下のJason Cの意見とは異なり、この方法で不良ブロックを使用することには問題はありません。 SDカードの性質上、不良ブロックを実際に識別するのには有用ではありませんが、スイッチを使用して-bすべてのサイズの破壊的な読み書きテストを実行することをお勧めします。-c修正されたテストが入る場所です(私の答えを参照)。 )))。カードコントローラにどのような魔法やキャッシュを使用しても、テストでハードウェアに数メガバイトのデータを書き込んで、正しく読み取るように欺くことはできません。 Jasonの他のコメントは誤解に基づいているようです。故意にまず、そのため、あえて議論をすることはできません。これを念頭に置いて、何が意味し、何が意味するのかを決定することは、読者の分け前のままです。確かに.]

1カードは、私がほとんど使用していない古い4GB Sandiskカードです(「カテゴリ」番号なし)。繰り返しますが、これは同じ物理位置に対する200万の書き込みではなく、同じ物理位置に対する200万の書き込みです。摩耗の平準化により、「第1のブロック」は試験中にコントローラによって連続的に移動される。摩耗を取り除きます。

ベストアンサー1

SDカードストレステストには一般的に2つの問題があると思います。

  1. ウェアレベリングは、次の書き込みが実際にSDの同じ物理的な場所を使用することを保証しません。ほとんどの既存のSDシステムは、私たちが知っているブロックを積極的に取得し、各位置が経験する認識された「摩耗」に基づいて、そのブロックをサポートする物理的な位置を移動することに注意してください。

  2. 異なる技術(MLC vs. SLC)私が見るもう1つの問題は技術の違いです。 SLCタイプ SSDはMLCタイプよりもずっと長く続くと予想されます。さらに、MLCの許容誤差ははるかに厳しく、SLCではこれらの問題に対処する必要はなく、少なくともそのようなエラーに対してはるかに寛大です。

    • MLC - マルチレベルデバイス
    • SLC - シングルレベルデバイス

MLCの問題は、所与のセルが複数の値を格納することができ、ビットが本質的に物理的な+5Vまたは0V以外の電圧を使用して積み重ねられるため、同じ量の場合、SLCよりも潜在的な故障率がはるかに高くなる可能性があることです。

期待寿命

ハードウェアの持続時間に関するいくつかの問題を議論するこのリンクを見つけました。タイトルは次のとおりです。SSDについて – SLCとMLC

SLC

最善の推定によると、SLC SSDの平均寿命はほとんどの場合49〜149年です。 Memorightテストにより、128Gb SSDの書き込み寿命が200年以上であり、1日平均100Gbを使用できることを確認できます。

多層コンデンサ

これがMLCデザインが欠けている部分です。まだ何も出版されていません。 MLCがどのような期待寿命を保証するかを実際に研究した人は誰もいません。いくつかの異なる意見を受けましたが、SLCデザインの寿命は平均10対1です。保守的に推測すると、各メーカーのコントローラ内の「ウェアレベリングアルゴリズム」の発展に伴い、ほとんどの寿命推定値は7~10年の間になるでしょう。

比較する

書き込みサイクルごとに比較すると、SLCの寿命は100,000回の全書き込みサイクルですが、MLCの寿命は10,000回の書き込みサイクルです。これは、使用される「ウェアレベリング」の設計によって大幅に増加する可能性があります。

おすすめ記事