30

Linux VM (VMware ワークステーションなど) で、以前に動作していたディスクで障害をシミュレートするにはどうすればよいですか?

本番環境で、ディスクに障害が発生する状況が発生しています (おそらく、コントローラー、ケーブル、またはファームウェアの問題)。明らかに、これは予測可能または再現可能ではありません。監視をテストして、正しく警告することを確認したいと思います。

理想的には、書き込みは失敗するが読み取りは成功する状況や、完全な失敗、つまり scsi インターフェースがエラーをカーネルに報告する状況をシミュレートできるようにしたいと考えています。

4

7 に答える 7

27

ディスクエラーをシミュレートできるレイヤーがいくつかあります。単一のユーザースペースプログラムをテストしている場合、おそらく最も簡単なアプローチは、適切な呼び出し(たとえばwrite())を挿入し、エラーを返すようにすることです。libfiuフォールトインジェクションライブラリは、そのツールを使用してこれを行うことができます。fiu-run

別のアプローチは、別のデバイスとの間でデータを渡すことができるが、途中で障害を注入できるカーネルドライバーを使用することです。その後、デバイスをマウントして、障害のあるディスクであるかのように任意のアプリケーションから使用できます。fsdiskドライバーはその一例です。

Linuxカーネルにマージされたフォールトインジェクションインフラストラクチャもありますが、それを有効にするにはカーネルを再構成する必要があります。これは、Documentation / fault-injection/fault-injection.txtに記載されています。これは、カーネルコードのテストに役立ちます。

SystemTapを使用して、カーネルレベルで障害を注入することもできます。SystemTapを使用したSCSIフォールトインジェクションテストおよびカーネルフォールトインジェクションを参照してください。

于 2009-09-01T17:40:17.777 に答える
5

2.6 カーネルで SCSI ディスクをなくす簡単な方法は次のとおりです。

echo 1 > /sys/bus/scsi/devices/H:B:T:L/delete

(H:B:T:L は、ホスト、バス、ターゲット、LUN です)。ただし、読み取り専用のケースをシミュレートするには、mark4o が言及した障害挿入メソッドを使用する必要があります。

于 2009-09-01T23:28:55.717 に答える
1

ディスクによって提供されるメソッドを使用して、メディア エラー テストを実行することもできます。SCSI には、無効な ECC でデータを書き込むことによってブロックを破損するために使用できる WRITE LONG コマンドがあります。SATA と NVMe にも同様のコマンドがあります。

最も一般的なケース (SATA) では、 hdparm を --make-bad-sector と共に使用してそのコマンドを使用できます。SCSI には sg_write_long を使用でき、NVMe には write-uncor オプションで nvme-cli を使用できます。

これらのコマンドが他のインジェクション方法よりも優れている大きな利点は、ドライブと同じように動作し、完全なレイテンシーの影響と、再割り当てによるそのセクターへの書き込み時の回復があることです。これには、ドライブ内で上昇するエラー カウンターも含まれます。

欠点は、同じドライブに対してこれをやりすぎると、エラー カウンターが上がり、SMART がディスクに不良のフラグを立てたり、再割り当てテーブルを使い果たしたりする可能性があることです。したがって、手動テストには使用しますが、自動テストで実行している場合は、あまり頻繁に使用しないでください。

于 2017-10-25T08:29:54.587 に答える