用读取错误模拟出错的块设备?

我正在寻找一种更简单的方法来testing我的应用程序对错误的块设备,当某些块被读取时产生I / O读取错误。 尝试使用已知坏块的物理硬盘是一件痛苦的事情,如果存在软件解决scheme,我希望find它。

我find了Linux磁盘故障模拟驱动程序 ,它允许创build一个接口,可以configuration为在读取特定范围的块时生成错误,但它是针对2.4 Linux内核的,并且尚未针对2.6进行更新。

什么是完美的将是一个losetup和循环驱动程序,也允许您configuration它尝试读取给定的一组块时返回读取错误。

这不是你正在寻找的回环设备,而是设备映射器。

使用dmsetup创建一个由“错误”目标支持的设备。 它将显示在/dev/mapper/<name>

设备映射程序演示文稿(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逻辑卷管理器管理”中的“ 设备映射程序”附录。

看起来Linux内置故障注入功能是一个好主意。

博客: http : //blog.wpkg.org/2007/11/08/using-fault-injection/
参考: https : //www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt

使用块设备最简单的方法是使用nbd 。

从git://github.com/yoe/nbd.git下载用户空间源,并修改nbd-server.c在阅读或写入任何你希望失败的区域时失败,或以可控制的随机模式失败,或基本上任何你想要的。