データ破損とは、書き込み、読み取り、保存、送信、処理の過程で発生する、コンピュータデータの意図しない改変のことです。コンピュータシステムは、エンドツーエンドのデータ整合性、つまりエラーのない状態を確保するために、さまざまな対策を講じています。
一般的に、データ破損が発生すると、そのデータを含むファイルにアクセスした際に、システムまたは関連アプリケーションによって予期しない結果が生じます。結果は、軽微なデータ損失からシステムクラッシュまで多岐にわたります。例えば、文書ファイルが破損している場合、文書エディタでそのファイルを開こうとするとエラーメッセージが表示され、ファイルが開けなかったり、一部のデータが破損した状態で開いたりする可能性があります(場合によっては、完全に破損して文書が判読不能になることもあります)。隣の画像は、ほとんどの情報が失われた破損した画像ファイルです。
マルウェアの中には、ペイロードの一部として意図的にファイルを破損させるものがあり、通常は動作しないコードやゴミコードでファイルを上書きすることで破損させます。一方、悪意のないウイルスでも、ファイルにアクセスする際に意図せず破損させてしまうことがあります。このようなペイロード方式を採用したウイルスやトロイの木馬が、コンピュータのオペレーティングシステムソフトウェアや物理ハードウェアの動作に不可欠なファイルを改変してしまうと、システム全体が使用不能になる可能性があります。
一部のプログラムは(エラー発生後に)ファイルの自動修復を提案できますが、修復できないプログラムもあります。これは、破損の程度や、アプリケーションに組み込まれているエラー処理機能によって異なります。破損の原因は様々です。

コンピュータシステムにおけるデータ破損には、検出されないものと検出されるものの2種類があります。検出されないデータ破損(サイレントデータ破損とも呼ばれる)は、データが誤っているという兆候がないため、最も危険なエラーを引き起こします。検出されるデータ破損は、データの損失を伴う永続的なものになる場合もあれば、システムの一部がエラーを検出して修正できる一時的なものになる場合もあります。後者の場合、データ破損は発生しません。
データ破損は、ホストからストレージ媒体に至るまで、システムのあらゆるレベルで発生する可能性があります。最新のシステムは、多くのレイヤーで破損を検出し、その後、破損を回復または修正しようとします。これはほとんどの場合成功しますが、ごくまれにシステムメモリに到着する情報が破損し、予期せぬ結果を引き起こすことがあります。
データ伝送中のデータ破損には様々な原因があります。データ伝送の中断は情報損失につながります。環境条件はデータ伝送に影響を与える可能性があり、特に無線伝送方式ではその傾向が顕著です。厚い雲は衛星通信を遮断することがあります。無線ネットワークは電子レンジなどの機器からの干渉を受けやすいです。
データ損失の主な原因は、ハードウェア障害とソフトウェア障害の2つです。 背景放射線、ヘッドクラッシュ、ストレージデバイスの経年劣化や摩耗は前者のカテゴリーに分類され、ソフトウェア障害は通常、コードの バグによって発生します。宇宙線は、 DRAMのソフトエラーのほとんどを引き起こします。[ 1 ]
一部のエラーは、ディスクファームウェアやホストオペレーティングシステムによって検出されず、気づかれないままになります。これらのエラーは、サイレントデータ破損として知られています。[ 2 ]
ディスクストレージサブシステム自体以外にも、多くのエラーの原因があります。たとえば、ケーブルがわずかに緩んでいる、電源が不安定である、[ 3 ]大きな音などの外部振動、[ 4 ]ネットワークが未検出の破損を引き起こす可能性がある、[ 5 ]宇宙放射線、その他多くのソフトメモリエラーの原因などがあります。分析された 39,000 のストレージシステムでは、ファームウェアのバグがストレージ障害の 5〜10% を占めていました。[ 6 ]サイレント破損に関するCERN の研究で観察されたエラー率は、 10 16ビットに 1 つよりもはるかに高いです。[ 7 ] Amazon Web Services は、 2008 年にAmazon S3ストレージネットワークの広範囲にわたる停止の原因がデータ破損であったことを認めました。[ 8 ] 2021 年に、Google と Facebook の出版物で、プロセッサ コアの欠陥が追加の原因として特定されました。コアの欠陥率は数千のコアのうち数個であることがわかりました。[ 9 ] [ 10 ]
一つの問題は、ハードディスクドライブの容量が大幅に増加したにもかかわらず、エラー率が変わっていないことです。データ破損率は時間とともにほぼ一定であり、つまり、最新のディスクは古いディスクと比べてそれほど安全ではないということです。古いディスクでは、保存するデータ量が非常に少なかったため、データ破損の確率は非常に小さかったのです。最新のディスクでは、保存するデータ量が大幅に増えたため、その確率ははるかに大きくなりましたが、安全性は向上していません。このように、ストレージデバイスが比較的小型で低速だった間は、サイレントデータ破損は深刻な問題ではありませんでした。現代では、より大容量のドライブと非常に高速なRAID構成の登場により、ユーザーは比較的短い時間で10¹⁶ビットを転送できるようになり、データ破損の閾値に容易に達するようになりました。[ 11 ]
例えば、ZFS の開発者である Jeff Bonwick 氏は、大規模データウェアハウジングと分析に特化したデータベースソフトウェア会社であるGreenplumの高速データベースが 15 分ごとにサイレント破損に直面していると述べています。 [ 12 ]また別の例として、 NetApp が 41 か月にわたって 150 万台以上の HDD で実施した実際の調査では、 40 万件以上のサイレントデータ破損が見つかり、そのうち 3 万件以上はハードウェア RAID コントローラによって検出されず (スクラビング中にのみ検出) いました。[ 13 ] CERNが6 か月にわたって約 97ペタバイトのデータを対象に 実施した別の調査では、約 128メガバイトのデータがネットワークからディスクへの経路のどこかでサイレントに永久的に破損したことがわかりました。[ 14 ]
サイレントデータ破損は連鎖的な障害を引き起こす可能性があり、システムは一定期間、検出されない初期エラーで動作し、最終的に検出されるまでますます多くの問題を引き起こす可能性があります。[ 15 ] 例えば、ファイルシステムメタデータに影響を与える障害は、ファイルシステムが破損した状態で使用されるため、複数のファイルが部分的に破損したり、完全にアクセスできなくなったりする可能性があります。
データ破損がポアソン過程のように振る舞い、各データビットが変更される確率がそれぞれ独立して低い場合、データ破損は一般的にチェックサムの使用によって検出でき、多くの場合、誤り訂正符号(ECC)の使用によって修正できます。
修復不可能なデータ破損が検出された場合、自動再送信やバックアップからの復元などの手順を適用できます。特定のレベルのRAIDディスクアレイは、一連のハードディスクにわたるデータのパリティビットを保存および評価する機能を備えており、実装されているRAIDレベルに応じて、1つまたは複数のディスクの障害時に破損したデータを再構築できます。一部のCPUアーキテクチャは、 CPUキャッシュ、CPUバッファ、および命令パイプラインでのデータ破損を検出および軽減するために、さまざまな透過的なチェックを採用しています。例として、Intel Itaniumプロセッサで利用可能なIntel Instruction Replayテクノロジーがあります。[ 16 ]
多くのエラーは、ハードディスクドライブが各セクターごとにディスクに保存されているECCコード[ 17 ]を使用して検出および修正します。ディスクドライブがセクターで複数の読み取りエラーを検出した場合、オペレーティングシステムの関与なしに、ディスクの障害セクターを予備セクターに再マッピングすることで、障害セクターのコピーをディスクの別の場所に作成することがあります(ただし、これはセクターへの次の書き込みまで遅れる場合があります)。この「サイレント修正」は、SMARTを使用して監視でき、ほとんどのオペレーティングシステムで利用可能なツールを使用して、SMARTパラメータの悪化を監視することで、ディスクドライブの差し迫った障害を自動的にチェックできます。
Btrfs、HAMMER、ReFS、ZFSなどの一部のファイルシステムは、内部データおよびメタデータのチェックサムを使用して、サイレントなデータ破損を検出します。さらに、破損が検出され、ファイルシステムがデータ冗長性を提供する統合RAIDメカニズムを使用している場合、これらのファイルシステムは、破損したデータを透過的に再構築することもできます。[ 18 ] このアプローチにより、ストレージスタックの異なるレイヤーにまたがらず、データが異なるレイヤー間の境界を通過する際にデータ破損が発生することを許容する他のデータ整合性アプローチと比較して、データパス全体をカバーするデータ整合性保護が向上します。これは通常、エンドツーエンドのデータ保護として知られています。[ 19 ]
データスクラビングは、ディスクエラーが複数蓄積してパリティビットの数が限界を超える前に検出され、回復されるため、データ破損の可能性を低減するもう1つの方法です。読み取りごとにパリティチェックを行う代わりに、ディスクの定期的なスキャン中にパリティチェックが行われます。このスキャンは、多くの場合、優先度の低いバックグラウンドプロセスとして実行されます。「データスクラビング」操作によってパリティチェックがアクティブ化されます。ユーザーが単にディスクからデータを読み取る通常のプログラムを実行する場合、ディスクサブシステムで読み取り時のパリティチェックがサポートされ、かつ有効になっていない限り、パリティチェックは行われません。
適切なメカニズムを用いてデータ破損を検出し修復すれば、データの整合性を維持できる。これは、検出されないエラーがデータベースのインデックスを破損させたり、データを変更して口座残高に重大な影響を与えたりする可能性がある商用アプリケーション(銀行など)や、小さなエラーで大規模なデータセットが使用不能になる可能性がある暗号化または圧縮データの使用において特に重要である。[ 7 ]
サイレントデータ破損(SDC)は、サイレントデータエラー(SDE)とも呼ばれ、業界全体に影響を及ぼす問題であり、長期間保護されているメモリ、ストレージ、ネットワークだけでなく、コンピュータのCPUにも影響を及ぼします。