mar*_*k4o 26
有几个层可以模拟磁盘错误.如果您正在测试单个用户空间程序,可能最简单的方法是插入适当的调用(例如write())并让它们有时返回错误.该libfiu故障注入图书馆可以做到这一点使用其fiu-run工具.
另一种方法是使用可以向/从另一个设备传递数据的内核驱动程序,但是沿途注入错误.然后,您可以挂载设备并在任何应用程序中使用它,就像它是一个有故障的磁盘一样.该fsdisk驱动程序是这样的一个例子.
还有一个故障注入基础结构已合并到Linux内核中,但您可能需要重新配置内核才能启用它.它记录在Documentation/fault-injection/fault-injection.txt中.这对于测试内核代码很有用.
也可以使用SystemTap在内核级别注入故障.请参阅使用SystemTap进行SCSI故障注入测试和内核故障注入.
要添加到mark4o的答案,您还可以使用Linux的Device Mapper生成失败的设备.
Device Mapper的延迟设备可用于将同一块的读写I/O发送到不同的底层设备(它也可以根据其名称延迟I/O).Device Mapper的错误设备可用于在访问特定块时生成永久性错误.通过组合这两者,您可以创建一个设备,其中写入始终失败但读取始终对给定区域成功.
以上是模拟具有读取错误的故障块设备的问题中描述的更复杂的示例?(有关简单的Device Mapper示例,请参阅/sf/answers/130972061/).
还有一个的Linux磁盘故障注入机制名单上,导致I/O错误的特殊文件的Unix和Linux的问题.
使 SCSI 磁盘在 2.6 内核中消失的一个简单方法是:
echo 1 > /sys/bus/scsi/devices/H:B:T:L/delete
(H:B:T:L 是主机、总线、目标、LUN)。不过,要模拟只读情况,您必须使用 mark4o 提到的错误注入方法。
| 归档时间: | 
 | 
| 查看次数: | 19677 次 | 
| 最近记录: |