重要なSQLite DBファイルを読み取れない場合(I / Oエラーが発生した場合)、ソフトウェアが期待どおりに反応するかどうかを自動的にテストしたいと思います。これは、数日前の顧客から起こったことです。手動で問題を解決しましたが、問題を解決するための自動コードを作成してテストするには、破損したファイルにアクセスする必要があります。
Unixのすべてはファイルなので、人々が読もうとすると常にI / Oエラーを引き起こす特別なファイル(/ devなど)があると思います。
いくつかの類似ファイル(imo)は次のとおりです。
/dev/full
書き込もうとすると、常に「デバイスに残りのスペースがありません」というメッセージが表示されます。/dev/null
そして/dev/zero
だから私の考えにはこのようなファイルがあればいいようです(まだ見つかりませんでした)。
目的の結果を得るためのファイルや他の方法を知っている人はいますか(open()の周りにLD_PRELOADラッパーを使用して意図的に誤ったパーティションイメージ...)?
ここに行く最良の方法は何ですか?
ベストアンサー1
スタックオーバーフローとサーバーエラーに関するこの質問に対する答えはすでにたくさんありますが、いくつかの技術が欠けています。人生を容易にするために、VM/Linux ブロックデバイス/Linux ファイルシステム/Linux ユーザー空間ライブラリ I/O エラー注入メカニズムのリストは次のとおりです。
- 使用デバイスマッパーエラー/シート/遅延/DMダスト 合成ブロックデバイスから合成ブロックデバイス(カーネル、デバイスマッパーサポートで構築されたカーネルが必要、適切な追加のデバイスマッパーモジュール(dm-dustはカーネル> = 5.2でのみ使用可能)としてエラー/損傷または遅延/分割IOを返すデバイス)デバイスマッパーユーザースペースビット)。
- 使用MDの性格が変です。合成ブロック装置に定期的に誤差注入を行う。より
--layout
mdadm のマニュアルページオプション設定方法(カーネルとmdadmユーザースペースビット)を学びます。 - 使用libfiu は POSIX API 呼び出しにエラー注入を実行します。 (ユーザースペースはと共に使用できます
LD_PRELOAD
)。 - 使用Linuxカーネルのエラーインジェクタは、基本ブロックデバイスにエラーを注入します。 (カーネルはカーネルがでビルドされなければなりません
FAIL_MAKE_REQUEST=y
)。 - 使用SystemTap はエラー注入を実行します。(カーネル、カーネルビルドが必要多くのこと)。
- CharybdeFSを使用したファイルシステムエラーの注入またはペタドFS(FUSEによるユーザースペース)。
- 次のコマンドを使用して合成ブロックデバイスを作成します。エラー注入を実行するLinux scsi_debugドライバ(核心)。
- QEMUでシステムを実行して使用します。QEMUはblkdebugドライバを使用してブロックデバイスエラーを挿入します。(仮想機器)。
- 次のようにして合成ブロックデバイスを作成します。欠陥を注入するデバイスのnull_blkオプション(カーネル> = 4.14ですが、次のオプションはタイムアウト確率4.17までは表示されず、カーネルをビルドする必要があります
BLK_DEV_NULL_BLK_FAULT_INJECTION=y
。 - を介してホストにサービスを提供する包括的なネットワークブロックデバイスを作成します。NBDkitフィルタ例えば
delay
またはerror
nbd-client
次に、カーネル+ NBDユーザースペースビット、カーネル> = 4.18に組み込まれたNBDサポート、nbdclient> = 3.18、およびnbdkit> = 1.8.1を推奨し、ブロックデバイスを接続します。 - 参照NBDKitデモビデオ約20分)。
追加の事実:SQLiteには、エラーシミュレーション用のVFSドライバがあります。これは良いテストの適用範囲につながります。
関連: