linux - 模拟有读取错误的故障 block 设备?

标签 linux device device-emulation

我正在寻找一种更简单的方法来针对在读取某些 block 时生成 i/o 读取错误的故障 block 设备测试我的应用程序。尝试使用具有已知坏 block 的物理硬盘驱动器是一种痛苦,如果存在的话,我想找到一种软件解决方案。

我确实找到了 Linux Disk Failure Simulation Driver它允许创建一个接口(interface),该接口(interface)可以配置为在读取特定范围的 block 时生成错误,但它适用于 2.4 Linux 内核并且尚未针对 2.6 进行更新。

完美的是一个 losetup 和循环驱动程序,它还允许您将其配置为在尝试从给定的一组 block 中读取时返回读取错误。

最佳答案

您要找的不是环回设备,而是设备映射器。

使用 dmsetup 创建一个由“错误”目标支持的设备。它将显示在 /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部分并将“错误”目标作为 block 0 - 8 的设备(而不是 sdb1 )以制作纯错误磁盘。

另见 The Device Mapper “RHEL 5 的附录 逻辑卷管理器管理”。


还有一个 flakey目标 - linear 的组合和 error有时会成功。还有一个delay故意延迟测试。

关于linux - 模拟有读取错误的故障 block 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870696/

相关文章:

linux - Chef 多行命令

android - 无法创建/添加帐户@模拟 Android 设备

macos - 适用于 Mac OSX 的串行端口模拟器

linux - 无法使用Java代码在Linux运行时创建文件

c++ - 32 位代码在 64 位 linux 机器上运行

linux - mongodb数据库恢复脚本

x86 - QEMU 是否模拟 TLB?

swift - 应用仅在设备上崩溃

Android - sdcard_rw的groupId总是1015吗?

redirect - 如何在第三个应用程序中将声音从某些应用程序重定向到某些设备?