少し調べてみたところ、SD カードの寿命が尽きると、SD カードと microSD カードがデータ損失を避けるために読み取り専用になる (他に何と呼べばいいのかよくわからない) という現象が起こると聞きました。初めて聞いたときは、とても賢い方法だと思いました。でも今はそうでもない気がします。
背景情報: 書き込み禁止モードになるまで、ラズベリーパイで 2 年間酷使した microSD を持っていました。dd を使用して、OS とファイルシステム全体を交換用カードに移動しました。使用開始から数日で、このカードも書き込み禁止になっていることに気付きました。運が悪いと思いましたが、2 つ目のバックアップ カードもすぐに同じ状態になりました。
これは困ったので、それ以来、ラズベリーパイは放置しています。しかし、SD カードが書き込み禁止をどうやって認識するのか疑問に思い始めました。書き込みサイクルをカウントしていて、dd を使用してディスク全体のイメージを作成した場合、SD カードが古いと誤認して機能しなくなる可能性があります。しかし、寿命終了時の処理の実装がどこにも見つかりません。仕組みを知っている人はいますか? 元に戻したいのですが、書き込み禁止は非常に低いレベルで実装されているようです。sudo を使用しても /dev/sdX にアクセスできません。
もし私の考えが正しく、何らかの書き込みサイクルの記録が残っているのなら、これはかなりイライラさせられる。つまり、SD カードが実際に壊れているわけではなく、単なる予防措置にすぎないということだ。これはいいことだが、定期的にバックアップを取っているので、実際に壊れるまで使い続けたい。
長々と説明しましたが、寿命終了時の動作がどのように実装されているか知っている人はいますか? また、誤って動作をトリガーした場合、元に戻す方法はあるのでしょうか?
答え1
ほとんどのメーカーはウェアレベリングのメカニズムを公開していないため、最良および最悪の寿命シナリオを判断することは不可能です (おそらく、その知識があれば、そのようなカードをすぐに破壊できるためです)。
SanDiskはかなり前にいくつかの洞察を提供したが(https://web.archive.org/web/20150326122100/http://ugweb.cs.ualberta.ca/~c274/resources/hardware/SDcards/WPaperWearLevelv1.0.pdf)。これはおそらく変更または改良されているかもしれませんが、基本は依然として適用されるはずです。
各メモリ チップはブロックに分割されています。ブロックは、セクタとして編成されたメモリ セルの配列です。(...) 書き込みまたは読み取り操作の最小単位はページ (またはセクタ) です。消去操作の最小単位はブロックです。物理ブロックは論理的にゾーンにグループ化されます。(...) ウェア レベリングはゾーン内で行われます。現在のファームウェアでは、カードの容量全体にウェアを分散しません。各ゾーンには、フラッシュ カードの論理容量を満たすために割り当てられたものに加えて、約 3% の追加の「スペア ブロック」があります。このブロックのグループは、一般に「消去プール」と呼ばれます。
摩耗がカード全体に広がったとしても、原理は同じです。
カードは、ブロックの耐用年数が終了していることを検出すると、書き込み操作に使用できるブロックからそのブロックを削除します。その結果、消去プールのサイズが縮小されます。これは、ホストから見たカードの容量には影響しません。摩耗により書き込み操作に使用できるブロックのプールが使い果たされると、カードの書き込み操作の耐用年数が終了します。
カードの容量は減らず、コンシューマー カードのウェア レベリングでは保存されたデータを書き換えないため (SSD の場合のように)、書き込みの種類によってはカードが急速に消耗する場合があります。1 つの種類は、ブロック全体の書き込みを必要とするセクターのみへの書き込みです。オペレーティング システムによっては、カードのブロック サイズよりもはるかに小さいdd
デフォルトのブロック サイズが使用される場合があり512
、その結果、書き込みの増幅が大きくなります。例: SD カードのブロック サイズが 16kB で、1 つのセクターが 512 バイトの場合、この場合、消耗量は最大 31 倍に増加する可能性があります。これが、2 枚目のカードが早期に故障した理由である可能性があります。
摩耗情報は SD カード ハードウェアの一部であるためコピーされず、通常の方法では読み取り/復元できません。同じことが書き込み保護にも当てはまり、SD カード コントローラー自体がこれを防ぎます。したがって、ハードウェア (SD カードの機械式スイッチ) またはソフトウェア (読み取り専用のマウント) の書き込み保護について話しているのではない場合は、このプロセスは元に戻せません。
答え2
カードにはウェアレベリング用に余分なスペースがあるはずですが、お持ちのカードはダムで予備ブロックがなく、ドライブ上のすべてのブロックに書き込んだために読み取り専用になっているようです。 を使用する代わりにファイルをコピーするかdd
、を使用してe2image -ar
ext[234] ファイルシステムをコピーすると、ディスク上の未使用ブロックへの不要な書き込みを回避できるため、役立つ可能性があります。