2009-12-08 1 views
11

特定のブロックを読み込んだときに読み込みエラーが発生する誤ったブロックデバイスに対してアプリケーションをテストする簡単な方法を探しています。既知の不良ブロックを持つ物理ハードドライブを使用しようとするのは苦痛であり、もしあればソフトウェアソリューションを探したいと思う。読み込みエラーのある不良ブロックデバイスをシミュレートしますか?

特定の範囲のブロックが読み込まれたときにエラーを生成するように設定できるインターフェイスを作成することができますが、2.4 Linuxカーネル用で、2.6用に更新されていないインターフェイスを作成できました。

losetupとloopドライバは、特定のブロックセットからの読み取りを試みるときに読み取りエラーを返すように構成することを可能にします。

+0

は上の上に[Linuxのディスク障害注入メカニズムのリスト](https://unix.stackexchange.com/a/144200/61610)を参照してください[UnixとLinuxに関するI/Oエラーの原因となる特殊ファイル](https://unix.stackexchange.com/questions/77492/sp​​ecial-file-that-c​​auses-io-error/144200#144200) – Anon

答えて

19

あなたが探しているループバックデバイスではなく、デバイスマッパーです。

dmsetupを使用して、 "error"ターゲットの付いたデバイスを作成します。 /dev/mapper/<name>に表示されます。 Device mapper presentation (PDF)

ページ7は、あなたが探している正確に何があります

dmsetup create bad_disk << EOF 
    0 8  linear /dev/sdb1 0 
    8 1  error 
    9 204791 linear /dev/sdb1 9 
EOF 

それともsdb1部品へを除外し、ブロック0のためのデバイスとして、「エラー」の目標を置く - 8(代わりにsdb1)を使用して、純粋なエラーディスクを作成します。

「RHEL 5 論理ボリュームマネージャの管理」の付録「The Device Mapper」も参照してください。

+0

完全に働いた - 私が必要としたもの。ありがとう! – SteveG

+0

上記のPDFは「dmsetup create」のコマンドライン構文を説明していません(少なくとも私は理解できませんでした)。 manページには、dmsetup create dev_name dev_mapper_tableの説明があります。 2番目のarg(dev_mapper_table)は、ブロックのマッピング方法を記述したテキストファイルです。 dmsetupのマニュアルページは簡潔であり、この表の構文については説明しません。ここにそれを説明するリンクがあります... [link](https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/device_mapper.html#dm-mappings) – technicalbloke

4

ブロックデバイスで再生する最も簡単な方法は、nbdです。

git://github.com/yoe/nbd.gitからユーザーランドソースをダウンロードし、nbd-server.cを変更して、失敗したい領域を読み書きするか、制御不能なパターンで失敗するか、基本的に何かを失敗させてください。

5

Linuxに組み込まれている障害インジェクション機能のように思えます。

ブログ:http://blog.wpkg.org/2007/11/08/using-fault-injection/
参考:答えに加えてhttps://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt

+0

リンク中あなたが明示的にここに具体的な答えを提示する必要があります。 –

+0

また、使用しているカーネルによって異なります。たとえば、SLES11 SP4カーネルの場合、機能はコンパイルされません。 –