Simular um dispositivo de bloco com defeito com erros de leitura?
-
18-09-2019 - |
Pergunta
Eu estou procurando uma maneira mais fácil de testar minha aplicação contra dispositivos de blocos defeituosos que geram i / o erros de leitura quando certos blocos são lidos. Tentando usar um disco rígido físico com blocos ruins conhecidos é uma dor e eu gostaria de encontrar uma solução de software, se houver.
Eu fiz encontrar os Linux disco falha Simulação driver que permite a criação de uma interface que pode ser configurado para gerar erros quando certos intervalos de blocos são lidos, mas é para o Linux Kernel 2.4 e não foi atualizado para 2.6.
O que seria perfeito seria uma losetup e motorista loop que também permitiu que você configurá-lo para retornar erros de leitura ao tentar ler a partir de um determinado conjunto de blocos.
Solução
Não é um dispositivo auto-retorno que você está procurando, mas sim device-mapper.
Use dmsetup
para criar um dispositivo apoiado pela " erro" alvo. Ela vai aparecer em /dev/mapper/<name>
.
Page 7 do href="http://mbroz.fedorapeople.org/talks/DeviceMapperBasics/dm.pdf" rel="noreferrer"> apresentação mapeador de dispositivos tem exatamente o que você 're procurando:
dmsetup create bad_disk << EOF
0 8 linear /dev/sdb1 0
8 1 error
9 204791 linear /dev/sdb1 9
EOF
Ou deixar de fora as partes sdb1
de e para colocar o alvo "erro" como o dispositivo para blocos 0 -. 8 (em vez de sdb1
) para fazer um erro de disco puro
Veja também O Dispositivo Mapper apêndice de "RHEL 5 Logical Volume Gerente de Administração".
Outras dicas
Parece que o Linux construído com recursos de injeção de falhas seria uma boa idéia para uso.
Blog: http://blog.wpkg.org/2007 / 11/08 / usando a falhas de injecção /
Referência: https://www.kernel.org/doc/Documentation /fault-injection/fault-injection.txt
A maneira mais fácil de jogar com dispositivos de bloco está usando nbd .
Faça o download das fontes userland de git: //github.com/yoe/nbd.git modificar nbd-server.c
a falhar em ler ou escrever sobre o que áreas você quer que ele falhar em, ou a falhar em um padrão controlada aleatória, ou basicamente qualquer coisa que você quiser.