2009-12-08 88 views
11

我正在尋找一種更簡單的方法來測試我的應用程序,以防止發生某些塊讀取時產生I/O讀取錯誤的錯誤塊設備。試圖使用具有已知壞塊的物理硬盤很痛苦,如果存在軟件解決方案,我希望找到一個軟件解決方案。模擬有讀取錯誤的故障塊設備?

我找到了Linux Disk Failure Simulation Driver,它允許創建一個接口,可以配置爲在讀取特定範圍的塊時生成錯誤,但它適用於2.4 Linux內核並且尚未針對2.6進行更新。

什麼是完美的將是一個losetup和循環驅動程序,也允許您配置它嘗試從給定的一組塊讀取時返回讀取錯誤。

+0

除了答案參見[的Linux磁盤故障注入機制列表](https://unix.stackexchange.com/a/144200/61610)超過上[導致I/O錯誤的特殊文件Unix和Linux問題](https://unix.stackexchange.com/questions/77492/sp​​ecial-file-that-c​​auses-io-error/144200#144200)。 – Anon 2017-10-24 20:07:15

回答

19

這不是您正在尋找的回送設備,而是設備映射程序。使用dmsetup創建一個由「錯誤」目標支持的設備。它將顯示在/dev/mapper/<name>

第7頁的Device mapper presentation (PDF)已經你在尋找什麼:

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)製作一個純粹的錯誤磁盤。

另請參見0123「邏輯卷管理器管理」中的「RHEL 5 」的附錄。

+0

完美工作 - 正是我需要的。謝謝! – SteveG 2009-12-10 01:03:02

+0

上面的PDF沒有解釋(至少我不明白)「dmsetup create」的命令行語法。手冊頁解釋它是:dmsetup create dev_name dev_mapper_table。第二個參數(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 2012-08-25 18:52:59

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

雖然鏈接對於進一步閱讀是有好處的,我想你應該在這裏明確地提出具體的答案。 – 2017-05-05 11:12:50

+0

它也取決於您正在使用的內核:例如,在SLES11 SP4內核中,未編譯該功能。 – 2017-05-08 12:59:55