Есть ли так или иначе, в Linux, чтобы преднамеренно заставить блочное устройство сообщать об ошибке ввода-вывода или, возможно, имитировать его для целей тестирования?
42
Есть ли так или иначе, в Linux, чтобы преднамеренно заставить блочное устройство сообщать об ошибке ввода-вывода или, возможно, имитировать его для целей тестирования?
modprobe
, ведущий себя как блочное устройство, а затем еще одну небольшую программу, которая отправлялаioctl()'s
бы драйверу, чтобы он возвращал желаемое значение.Ответы:
Да, есть очень вероятный способ сделать это с помощью устройства отображения.
Устройство сопоставления устройств может объединять блочные устройства в новое сопоставление / порядок по вашему выбору. LVM делает это. Он также поддерживает другие цели (некоторые из которых довольно новы), такие как «flakey» для имитации сбойного диска и «error» для имитации сбойных областей диска.
Можно построить устройство, которое намеренно имеет черные дыры ввода-вывода, которые будут сообщать об ошибках ввода-вывода при пересечении.
Сначала создайте виртуальный том для использования в качестве цели и сделайте его адресуемым как блочное устройство.
Итак, для начала создадим файл 512M, который является основой нашего виртуального блочного устройства, в который мы пробьем «дыру». Хотя дыры пока не существует. Если бы вы были,
mkfs.ext4 /dev/loop0
вы бы получили совершенно правильную файловую систему.Итак, давайте используем dmsetup, который, используя это блочное устройство, создаст новое устройство, в котором есть некоторые дыры. Вот пример первый
Это создаст устройство с именем 'errdev0' (обычно в / dev / mapper). Когда вы печатаете,
dmsetup create errdev0
он будет ждать ввода stdin и завершится вводом ^ D.В приведенном выше примере мы сделали отверстие в 5 секторов (2,5 КБ) в секторах 261144 петлевого устройства. Затем мы продолжаем через устройство петли, как обычно.
Этот скрипт попытается сгенерировать вам таблицу, в которой дырки будут размещаться в случайных местах примерно на 16 Мб (хотя это довольно случайно).
В сценарии предполагается, что вы также создали устройство объемом 512 МБ и ваше виртуальное блочное устройство включено
/dev/loop0
.Вы можете просто вывести эти данные в текстовый файл в виде таблицы и передать их в
dmsetup create errdev0
.После того как вы создали устройство, вы можете начать использовать его как обычное блочное устройство, сначала отформатировав его, а затем разместив на нем файлы. В какой-то момент вы столкнетесь с некоторыми проблемами ввода-вывода, когда вы сталкиваетесь с секторами, которые действительно являются дырами ввода-вывода в виртуальном устройстве.
Как только вы закончили использовать
dmsetup remove errdev0
для удаления устройства.Если вы хотите повысить вероятность ошибки ввода-вывода, вы можете чаще добавлять отверстия или изменять размер создаваемых отверстий. Обратите внимание, что размещение ошибок в определенных разделах, вероятно, вызовет проблемы с самого начала, т.е. IE на 32 МБ в устройстве, которое вы не можете написать суперблоком, который обычно пытается сделать ext, поэтому формат не будет работать.
Для дополнительного удовольствия - вы можете просто
losetup
тогдаmkfs.ext4 /dev/loop0
и заполнить его данными. Когда у вас есть хорошая рабочая файловая система, просто размонтируйте файловую систему и добавьте несколько дырок с помощью dmsetup и перемонтируйте это!источник
Для проверки надежности программы в случае сбоя их вывода вы можете использовать псевдоустройство
/dev/full
, которое всегда возвращает «ENOSPACE» при записи в.источник
Зависит от того, что вы хотите проверить. Используя
LD_PRELOAD
библиотеку ed, вы можете обмануть приложения, думая, например, что «все записи терпят неудачуENOSPC
илиEIO
».источник
Вы можете сделать это многими интересными способами. См. Https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt.
источник
fail_make_request
)? Также было бы здорово предотвратить гниение ссылок.Может быть, вы могли бы изменить таблицу разделов и сделать раздел больше, чем он есть на самом деле. Это, вероятно, приведет к ошибке ввода-вывода. Или, если ваши диски с возможностью горячей замены, вы можете просто извлечь их.
источник