2009-12-08 11 views
11

Estoy buscando una forma más fácil de probar mi aplicación contra dispositivos defectuosos que generan errores de lectura de E/S cuando se leen ciertos bloques. Tratar de usar un disco duro físico con bloques defectuosos conocidos es un problema y me gustaría encontrar una solución de software, si existe.¿Simula un dispositivo de bloque defectuoso con errores de lectura?

Encontré el Linux Disk Failure Simulation Driver que permite crear una interfaz que se puede configurar para generar errores cuando se leen ciertos rangos de bloques, pero es para el kernel de Linux 2.4 y no se ha actualizado para 2.6.

Lo que sería perfecto sería un controlador de pérdida y de bucle que también le permitiera configurarlo para devolver errores de lectura cuando intente leer desde un conjunto determinado de bloques.

+0

Además de las respuestas ver la [lista de mecanismos de inyección de fallos de disco de Linux] (https://unix.stackexchange.com/a/144200/61610) sobre el el [Archivo especial que causa el error de E/S en la pregunta de Unix y Linux] (https://unix.stackexchange.com/questions/77492/special-file-that-causes-io-error/144200#144200). – Anon

Respuesta

19

No es un dispositivo de bucle invertido lo que está buscando, sino un dispositivo-mapeador.

Utilice dmsetup para crear un dispositivo respaldado por el objetivo de "error". Aparecerá en /dev/mapper/<name>.

página 7 de la Device mapper presentation (PDF) tiene exactamente lo que está buscando:

dmsetup create bad_disk << EOF 
    0 8  linear /dev/sdb1 0 
    8 1  error 
    9 204791 linear /dev/sdb1 9 
EOF 

O dejar de lado las partes a sdb1 y poner el objetivo de "error" como dispositivo de bloques 0 - 8 (en lugar de sdb1) para hacer un disco de error puro.

Consulte también The Device Mapper apéndice de "RHEL 5 Administración del Administrador de volumen lógico".

+0

Funcionó perfectamente, justo lo que necesitaba. ¡Gracias! – SteveG

+0

El PDF de arriba no explica (al menos no entendí) la sintaxis de la línea de comando para "dmsetup create". La página man explica: dmsetup create dev_name dev_mapper_table. El segundo arg (dev_mapper_table) es un archivo de texto que describe cómo se mapean los bloques. La página man de dmsetup es concisa y no explica la sintaxis de esta tabla. Aquí hay un enlace que lo explica ... [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

4

La forma más fácil de jugar con dispositivos de bloque es usando nbd.

Descargue las fuentes de usuario de git://github.com/yoe/nbd.git y modifique nbd-server.c para que no pueda leer o escribir en las áreas en las que desea que falle, o fallar en un patrón controlablemente aleatorio, o básicamente cualquier cosa que desee.

5

Parece que las capacidades de inyección de fallas incorporadas de Linux serían una buena idea para usar.

Blog: http://blog.wpkg.org/2007/11/08/using-fault-injection/
Referencia: https://www.kernel.org/doc/Documentation/fault-injection/fault-injection.txt

+0

Mientras enlaces son buenos para leer más, supongo que debes presentar una respuesta concreta de forma explícita. –

+0

También depende de qué núcleo está utilizando: por ejemplo, en el kernel SLES11 SP4, la característica no está compilada. –

Cuestiones relacionadas