Simuler un périphérique de bloc défectueux avec des erreurs de lecture?

Je cherche un moyen plus facile de tester mon application contre les périphériques de blocs défectueux qui génèrent des erreurs de lecture E / S lorsque certains blocs sont lus. Tenter d’utiliser un disque dur physique avec des blocs défectueux connus est une gêne et j’aimerais trouver une solution logicielle, le cas échéant.

J’ai trouvé le pilote de simulation de défaillance de disque Linux qui permet de créer une interface pouvant être configurée pour générer des erreurs lorsque certaines plages de blocs sont lues, mais c’est pour le kernel Linux 2.4 et n’a pas été mis à jour pour la version 2.6.

Ce qui serait parfait serait un pilote de perte et de boucle qui vous permettrait également de le configurer pour renvoyer des erreurs de lecture lorsque vous tentez de lire un ensemble de blocs donné.

Ce n’est pas un périphérique de bouclage que vous recherchez, mais plutôt un périphérique.

Utilisez dmsetup pour créer un périphérique dmsetup par la cible “error”. Il apparaîtra dans /dev/mapper/ .

La page 7 de la présentation Device mapper (PDF) correspond exactement à ce que vous recherchez:

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

Ou sdb1 parties sdb1 et placez la cible "error" comme périphérique pour les blocs 0 à 8 (au lieu de sdb1 ) pour créer un disque d'erreur pur.

Voir également l'appendice Device Mapper de «Administration de RHEL 5 Logical Volume Manager».

Il semble que les capacités d’injection de fautes de Linux soient une bonne idée à utiliser.

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

La manière la plus simple de jouer avec des périphériques de bloc consiste à utiliser nbd .

Téléchargez les sources de l’ espace utilisateur de git: //github.com/yoe/nbd.git et modifiez le nbd-server.c pour qu’il échoue lors de la lecture ou de l’écriture dans les zones sur lesquelles vous souhaitez qu’il échoue ou échoue dans un modèle aléatoire contrôlable. ou fondamentalement tout ce que vous voulez.