2009-12-08 3 views
11

Je suis à la recherche d'un moyen plus simple de tester mon application contre les périphériques blocs défectueux qui génèrent des erreurs de lecture d'E/S lorsque certains blocs sont lus. Essayer d'utiliser un disque dur physique avec des blocs défectueux connus est une douleur et je voudrais trouver une solution logicielle si elle existe.Simule un périphérique bloc défectueux avec des erreurs de lecture?

J'ai trouvé le Linux Disk Failure Simulation Driver qui permet de créer une interface qui peut être configurée pour générer des erreurs lorsque certaines plages de blocs sont lues, mais c'est pour le noyau Linux 2.4 et n'a pas été mis à jour pour 2.6. Ce qui serait parfait serait un pilote losetup et un pilote de boucle qui vous permettraient également de le configurer pour renvoyer des erreurs de lecture lors d'une tentative de lecture à partir d'un ensemble de blocs donné.

+0

En plus des réponses voir la [liste des mécanismes d'injection de défaut de disque Linux] (https://unix.stackexchange.com/a/144200/61610) sur le le [Fichier spécial qui provoque une erreur d'E/S Unix & Linux question] (https://unix.stackexchange.com/questions/77492/special-file-that-causes-io-error/144200#144200). – Anon

Répondre

19

Ce n'est pas un périphérique de bouclage que vous recherchez, mais plutôt un dispositif de mappage. Utilisez dmsetup pour créer un périphérique protégé par la cible "erreur". Il apparaîtra dans /dev/mapper/<name>.

Page 7 de la Device mapper presentation (PDF) a exactement ce que vous cherchez:

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

Ou laisser les sdb1 parties à mettre et la « erreur » cible en tant que périphérique pour les blocs 0 - 8 (au lieu de sdb1) pour créer un disque d'erreur pur. Voir aussi The Device Mapper à l'annexe de "RHEL 5 Logical Volume Manager Administration".

+0

A travaillé parfaitement - juste ce dont j'avais besoin. Merci! – SteveG

+0

Le fichier PDF ci-dessus n'explique pas (du moins je n'ai pas compris) la syntaxe de la ligne de commande pour "dmsetup create". La page de manuel explique que c'est: dmsetup create dev_name dev_mapper_table. Le second argument (dev_mapper_table) est un fichier texte qui décrit comment les blocs sont mappés. La page de manuel dmsetup est succincte et n'explique pas la syntaxe de cette table. Voici un lien qui l'explique ... [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 manière la plus simple de jouer avec des périphériques blocs est d'utiliser nbd. Téléchargez les sources du domaine utilisateur à partir de git://github.com/yoe/nbd.git et modifiez nbd-server.c pour ne pas lire ou écrire sur les zones sur lesquelles vous voulez échouer, ou pour échouer dans un modèle aléatoire contrôlable, ou fondamentalement tout ce que vous voulez.

5

Il semble que les capacités intégrées d'injection de faute 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

+0

Alors que des liens sont bons pour la lecture, vous devriez explicitement présenter une réponse concrète ici, je suppose. –

+0

Cela dépend également du noyau que vous utilisez: Par exemple, dans le noyau SLES11 SP4, la fonction n'est pas compilée. –

Questions connexes