Имитировать неисправное блочное устройство с ошибками чтения?
Я ищу более простой способ протестировать мое приложение на неисправных блочных устройствах, которые генерируют ошибки чтения ввода-вывода при чтении некоторых блоков. Попытка использовать физический жесткий диск с известными плохими блоками - это боль, и я бы хотел найти программное решение, если оно существует.
Я нашел Linux Simulation Driver, который позволяет создавать интерфейс, который можно настроить для генерации ошибок, когда определенные диапазоны блоков но он предназначен для ядра Linux 2.4 и не обновлен для версии 2.6.
Что было бы идеально, это был бы драйвер losetup и loop, который также позволил бы вам настроить его для возврата ошибок чтения при попытке чтения из заданного набора блоков.
Ответы
Ответ 1
Это не устройство петли, которое вы ищете, а скорее устройство-картограф.
Используйте dmsetup
для создания устройства, поддерживаемого целью "ошибка". Он появится в /dev/mapper/<name>
.
Страница 7 Представление устройства (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
), чтобы создать чистый диск с ошибкой.
См. также Приложение Device Mapper от" RHEL 5
Администрирование диспетчера логических томов ".
Ответ 2
Похоже, что использование встроенных возможностей впрыска для Linux было бы неплохо использовать.
Блог: http://blog.wpkg.org/2007/11/08/using-fault-injection/
Ссылка: https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt
Ответ 3
Самый простой способ играть с блочными устройствами - nbd.
Загрузите источники userland из git://github.com/yoe/nbd.git и измените nbd-server.c
на провал при чтении или записи в тех областях, в которых вы хотите, чтобы они терпели неудачу, или сбой в управляемом случайном шаблоне или в основном все, что вы хотите.